美文网首页面试专辑
android开发遇到的一些问题

android开发遇到的一些问题

作者: 卖梦为生_若愚 | 来源:发表于2016-11-24 10:02 被阅读312次

    (1)将Eclipse项目导入到Android studio 中 很多点9图出现问题解决方法:

    在build.gradle里添加以下两句:

    aaptOptions.cruncherEnabled= false

    aaptOptions.useNewCruncher= false

    用来关闭Android Studio的PNG合法性检查的,直接不让它检查。

    (2)Android Studio 错误: 非法字符: '\ufeff' 解决方案|错误: 需要class, interface或enum

    原因:

    Eclipse可以智能的把UTF-8+BOM文件转为普通的UTF-8文件,Android Studio还没有这个功能,所以使用Android Studio编译UTF-8+BOM编码的文件时会出现”非法字符: '\ufeff' “之类的错误

    解决方法:

    手动将UTF-8+BOM编码的文件转为普通的UTF-8文件。用EdItPlus打开.java文件依次:文档》文本编辑》转换文本编码》选择UTF-8编码即可

    (3)将项目导入到AS中出现以下问题:

    Error:Execution failedfortask':app:transformResourcesWithMergeJavaResForDebug'. > com.android.bui

    解决方法:

    在build.grade中添加以下代码:

    android{

    packagingOptions {

    exclude'META-INF/DEPENDENCIES.txt'exclude'META-INF/NOTICE'exclude'META-INF/NOTICE.txt'exclude'META-INF/LICENSE'exclude'META-INF/LICENSE.txt'}

    }

    (4)未知错误

    Error:Timeout waiting tolockcp_projclasscacheforbuildfile'/Users/Mr.xiao/Desktop/AndroidShopNC2014MoblieNew/androidShopNC2014Moblie/build.gradle'(/Users/Mr.xiao/.gradle/caches/2.10/scripts/build_3cyr7hzjurcc62ge3ixidshos/cp_proj).

    Itiscurrentlyinusebyanother Gradleinstance.

    Owner PID:unknownOur PID:1412Owner Operation:unknownOur operation: InitializecacheLockfile: /Users/Mr.xiao/.gradle/caches/2.10/scripts/build_3cyr7hzjurcc62ge3ixidshos/cp_proj/cache.properties.lock

    解决方案

    以上是错误提示。

    解决的思路很简单只需要把cache.properties.lock文件删除了就可以了。当时我们删除的时候会被占用这时候需要进入任务管理器结束关于java的进程就行比如 java 的jdk 删除后重启让java jdk启动 启动Android Studio就能启动APK了。

    (5)修改了Android项目的最小SDK版本之后出现很多stysle文件找不到

    解决方案

    compileSdkVersion23buildToolsVersion"23.0.3"defaultConfig {

    applicationId"net.mmloo2014.android"minSdkVersion14targetSdkVersion23}

    compileSdkVersion 是多少版本的

    那么compile 'com.android.support:appcompat-v7:23.2.1’ 就是啥版本的。

    (6)Android studio 编译问题:finished with non-zero exit value 2

    问题:

    Error:Execution failedfortask':androidShopNC2014Moblie:transformClassesWithDexForDebug'.

    >

    com.android.build.api.transform.TransformException:

    com.android.ide.common.process.ProcessException:

    java.util.concurrent.ExecutionException:

    com.android.ide.common.process.ProcessException:

    org.gradle.process.internal.ExecException:

    Process'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java''finished with non-zero exitvalue2

    解决方案

    这个错误在app的build.gradle里面添加下面这句就好了。

    android {

    defaultConfig {

    multiDexEnabled true

    }

    }

    (7)Android studio 编译问题:finished with non-zero exit value 1(由于导入的依赖出现重复造成的)

    问题:

    Error:Executionfailedfortask':app:transformClassesWithDexForDebug'.

    > com.[Android](http://lib.csdn.net/base/15).build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\Program Files (x86)\[Java](http://lib.csdn.net/base/17)\jdk1.8.0_31\bin\java.exe'' finished with non-zero exit value 1

    解决方案

    这个是因为依赖包重复了 (像v4和nineoldandroids),app中实现了对easeUI的依赖,但是app和easeUI都添加了对这个包的依赖。所以就报这个错误,修改之后再报,就clean,rebuild一下。

    (8)问题

    Error:Executionfailedfortask':app:transformClassesWithJarMergingForDebug'.>

    com.android.build.api.transform.TransformException:java.util.zip.ZipException:duplicateentry:org/apache/http/ConnectionClosedException.class

    解决方案

    这个是在我们启动的时候报错的,而不是在编译的时候,原因是这样的,报这个错是因为有2个库中存在相同的类。大家可以看到stackoverflow上有人也提了这样的问题。只需要删除其中的一个就可以解决了。

    (9)添加第三方依赖出现的问题

    Error:Execution failedfortask':app:processDebugManifest'.

    >

    Manifest merger failed :

    uses-sdk:minSdkVersion14cannot be smaller than version19declaredinlibrary[com.github.meikoz:basic:2.0.3]

    /AndroidStudioCode/EnjoyLife/app/build/intermediates/exploded-aar/

    com.github.meikoz/basic/2.0.3/AndroidManifest.xml

    Suggestion: use tools:overrideLibrary="com.android.core"to force usage

    错误原因

    出现这个错误的原因是我引入的第三方库最低支持版本高于我的项目的最低支持版本,异常中的信息显示:我的项目的最低支持版本为14,而第三方库的最低支持版本为19,所以抛出了这个异常。

    解决方案

    在AndroidManifest.xml文件中标签中添加

    其中的xxx.xxx.xxx为第三方库包名,如果存在多个库有此异常,则用逗号分割它们,例如:

    这样做是为了项目中的AndroidManifest.xml和第三方库的AndroidManifest.xml合并时可以忽略最低版本限制。

    (10)Android studio 编译问题:finished with non-zero exit value 1(由于buildtools版本太高造成的)

    错误

    Error:Execution failedfortask':app:transformClassesWithDexForDebug'.

    > com.android.ide.common.process.ProcessException:

    org.gradle.process.internal.ExecException:

    Process'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java''finished with non-zero exitvalue1

    错误原因

    buildToolsVersion版本太高,我原来的 buildToolsVersion "24.0.0” 需要jdk1.8,而我的是jdk1.7,所以一直报这个错,刚开始以为是v4包和V7包冲突,因为之前遇到这样的问题,而这次删除V4包之后依然报这个错,上stackoverflow搜了一下,把buildTools版本降下来就好了。

    解决方案

    android {

    compileSdkVersion23buildToolsVersion"23.0.3"}

    (11)Android studio 编译问题:Gradle DSL not found 'android()'

    问题

    clipboard.png

    解决方案

    配置build.gradle:

    buildscript {

    repositories {

    jcenter()

    }

    dependencies {

    classpath'com.android.tools.build:gradle:2.1.2'}

    }

    allprojects {

    repositories {

    jcenter()

    }

    }

    buildscript {

    repositories {

    jcenter()

    }

    dependencies {

    classpath'com.android.tools.build:gradle:2.1.2'}

    }

    allprojects {

    repositories {

    jcenter()

    }

    }

    配置app/build.gradle:

    apply plugin:'com.android.application'android{

    compileSdkVersion23buildToolsVersion'23.0.3'

    defaultConfig {

    minSdkVersion9targetSdkVersion23versionCode1versionName'1.0'

    }

    }

    dependencies {

    compile'com.android.support:appcompat-v7:23.2.1'

    }

    最后再同步一下sync即可。

    (12)Android studio 编译问题:Gradle DSL not found 'android()'

    问题描述

    Error:(51,52) 错误: -source1.6中不支持 diamond 运算符

    (请使用 -source7或更高版本以启用 diamond 运算符)

    解决方案

    方案一

    将标红处设置为1.7.png

    修改soure为1.7.png

    方案二

    在build gradle中进行配置如下代码:

    android {

    compileOptions {sourceCompatibility JavaVersion.VERSION_1_7

    targetCompatibility JavaVersion.VERSION_1_7

    }

    }

    最后同步一下即可

    (13)Glide使用问题:使用Glide加载圆角图片,第一次显示占位图

    问题描述

    最近在项目中使用Glide加载圆形图片,并且设置placehloder和error两个占位图,运行发现,第一次加载图片只显示占位图,需要第二次进入的时候才会正常显示。

    如果你刚好使用了这个圆形Imageview库或者其他的一些自定义的圆形Imageview,而你又刚好设置了占位的话,那么,你就会遇到第一个问题。如何解决呢?

    方案一

    不设置占位图

    方案二

    使用Glide的Transformation API自定义圆形Bitmap的转换

    /**

    * Glide圆形图片处理

    */staticclassCircleTransformextendsBitmapTransformation{publicCircleTransform(Context context) {super(context);

    }

    @OverrideprotectedBitmaptransform(BitmapPool pool, Bitmap toTransform,intoutWidth,intoutHeight) {returncircleCrop(pool, toTransform);

    }privatestaticBitmapcircleCrop(BitmapPool pool, Bitmap source) {if(source ==null)returnnull;intsize = Math.min(source.getWidth(), source.getHeight());intx = (source.getWidth() - size) /2;inty = (source.getHeight() - size) /2;

    Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

    Bitmap result = pool.get(size, size, Bitmap.Config.RGB_565);if(result ==null) {

    result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);

    }

    Canvas canvas =newCanvas(result);

    Paint paint =newPaint();

    paint.setShader(newBitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));

    paint.setAntiAlias(true);floatr = size /2f;

    canvas.drawCircle(r, r, r, paint);returnresult;

    }

    @OverridepublicStringgetId() {returngetClass().getName();

    }

    }

    使用方法:

    Glide.with(context).load(imageUrl).placeholder(placeholder).error(errorImage).transform(newCircleTransform(context)).into(imageView);

    方案三

    重写Glide的图片加载监听方法,具体如下:

    Glide.with(mContext)

    .load(url)

    .placeholder(R.drawable.loading_drawable)

    .into(newSimpleTarget(width, height) {

    @OverridepublicvoidonResourceReady(Bitmap bitmap, GlideAnimation anim) {// setImageBitmap(bitmap) on CircleImageView}

    });

    注意事项:

    该方法在listview上复用有问题的bug,如果在listview中加载CircleImageView,请不要使用该方法。

    方案四:不使用Glide的默认动画:

    Glide.with(mContext)

    .load(url)

    .dontAnimate()

    .placeholder(R.drawable.loading_drawable)

    .into(circleImageview);

    (14)json数据解析问题:json串头部出现字符:"\ufeff" 解决方法

    异常信息

    org.json.JSONException:Valueof type java.lang.Stringcannot be converted to JSONObject

    解析服务器返回 的json格式数据时,我们可能会发现,数据格式上是没有问题的,但是仔细对比会发现,在json串头部发现字符:"\ufeff"

    客户端解决方案:

    /**

    * 异常信息:org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject

    * json串头部出现字符:"\ufeff" 解决方法

    *@paramdata

    *@return*/publicstaticfinalString removeBOM(String data) {if(TextUtils.isEmpty(data)) {returndata;

    }if(data.startsWith("\ufeff")) {returndata.substring(1);

    }else{returndata;

    }

    }

    服务器端解决方案:

    将输出此json的php源码重新用editplus之类用utf-8无BOM的编码保存。不要用windows系统自带的记事本编辑php源码,这个BOM就是记事本这些windows自带的编辑器引入的

    ------------------------------------------------------------------------------------------

    Error:Execution failed for task ':app:mergeDebugResources'. > Crunching Cruncher scrollbar_thumb.9.png failed, see logs

    aaptOptions.cruncherEnabled = false

    aaptOptions.useNewCruncher = false

    相关文章

      网友评论

      • 星之声:大神,膜拜一下
      • 蛊月:太厉害了大神 这篇文章救了多少奔向rn一去不复返,最后头破血流的勇士呀:+1::+1::+1:

      本文标题:android开发遇到的一些问题

      本文链接:https://www.haomeiwen.com/subject/lcdbpttx.html