一般人我不告诉的bug

来源:互联网 发布:linux基础面试题 编辑:程序博客网 时间:2024/06/11 18:38

http://blog.csdn.net/axi295309066/article/details/52745694

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

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

aaptOptions.cruncherEnabled = false   aaptOptions.useNewCruncher = false

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

2、Android Studio 错误: 非法字符: ‘\ufeff’

原因: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 failed for task ':app:transformResourcesWithMergeJavaResForDebug'.

解决方法:在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、Timeout waiting to lock cp_proj class cache for build file

Error:Timeout waiting to lock cp_proj class cache for build file '/Users/Mr.xiao/Desktop/AndroidShopNC2014MoblieNew/androidShopNC2014Moblie/build.gradle'(/Users/Mr.xiao/.gradle/caches/2.10/scripts/build_3cyr7hzjurcc62ge3ixidshos/cp_proj).It is currently in use by another Gradle instance.Owner PID: unknownOur PID: 1412Owner Operation: unknownOur operation: Initialize cacheLock file: /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文件找不到

compileSdkVersion 23buildToolsVersion "23.0.3"defaultConfig {  applicationId "net.mmloo2014.android"  minSdkVersion 14  targetSdkVersion 23}

compileSdkVersion 是多少版本的
那么compile ‘com.android.support:appcompat-v7:23.2.1’ 就是啥版本的

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

问题描述

Error:Execution failed for task ':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 exit value 2

解决方案:这个错误在app的build.gradle里面添加下面这句就好了

android {   defaultConfig {     multiDexEnabled true  }}

65536问题

  • 解决传说中的Android 65k 问题
  • 其实你不知道MultiDex到底有多坑
  • AndroidStudio利用android-support-multidex解决65536问题64k问题

7、Android studio 编译问题:finished with non-zero exit value 1

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

由于导入的依赖出现重复造成的,解决方案:

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

8、transformClassesWithJarMergingForDebug

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException:duplicate entry: org/apache/http/ConnectionClosedException.class

解决方案

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

9、添加第三方依赖出现的问题processDebugManifest

Error:Execution failed for task ':app:processDebugManifest'.Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 19 declared in library [com.github.meikoz:basic:2.0.3] /AndroidStudioCode/EnjoyLife/app/build/intermediates/exploded-aar/com.github.meikoz/basic/2.0.3/AndroidManifest.xmlSuggestion: use tools:overrideLibrary="com.android.core" to force usage

错误原因:

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

解决方案:在AndroidManifest.xml文件中标签中添加

<uses-sdk tools:overridelibrary="xxx.xxx.xxx"></uses-sdk>

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

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

10、Android studio 编译问题:finished with non-zero exit value 1

错误描述

Error:Execution failed for task ':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 exit value 1

错误原因

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

解决方案

android {  compileSdkVersion 23  buildToolsVersion "23.0.3"}

11、Android studio 编译问题:Gradle DSL not found ‘android()’

解决方案 配置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 {     compileSdkVersion 23    buildToolsVersion '23.0.3'    defaultConfig {         minSdkVersion 9        targetSdkVersion 23        versionCode 1        versionName '1.0'    }}dependencies {     compile 'com.android.support:appcompat-v7:23.2.1'}

最后再同步一下sync即可

12、Android studio 编译问题:Gradle DSL not found ‘android()’

Error:(51, 52) 错误: -source 1.6 中不支持 diamond 运算符(请使用 -source 7 或更高版本以启用 diamond 运算符)

解决方法,在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圆形图片处理  */ static class CircleTransform extends BitmapTransformation {     public CircleTransform(Context context) {         super(context);     }     @Override     protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {         return circleCrop(pool, toTransform);     }     private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {         if (source == null) return null;         int size = Math.min(source.getWidth(), source.getHeight());         int x = (source.getWidth() - size) / 2;         int y = (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 = new Canvas(result);         Paint paint = new Paint();         paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));         paint.setAntiAlias(true);         float r = size / 2f;         canvas.drawCircle(r, r, r, paint);         return result;     }     @Override     public String getId() {         return getClass().getName();     } }

使用方法:

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

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

 Glide.with(mContext)      .load(url)      .placeholder(R.drawable.loading_drawable)      .into(new SimpleTarget<bitmap>(width, height) {          @Override public void onResourceReady(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: Value ? of type java.lang.String cannot be converted to JSONObject

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

客户端解决方案:

 /**     * 异常信息:org.json.JSONException: Value ? of type java.lang.String cannot be converted to JSONObject      * json串头部出现字符:"\ufeff" 解决方法     * @param data     * @return     */    public static final String removeBOM(String data) {        if (TextUtils.isEmpty(data)) {            return data;        }        if (data.startsWith("\ufeff")) {            return data.substring(1);        }        else {            return data;        }    }

服务器端解决方案:

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

15、Android studio编译问题:not found ndk()

解决方案

出现该问题,可能是由于ndk配置在build.gradle配置文件中位置弄错导致的

apply plugin: 'com.android.application'android {    compileSdkVersion 23    buildToolsVersion "23.0.2"    defaultConfig {        applicationId "com.guitarv.www.ndktest"        minSdkVersion 17        targetSdkVersion 23        versionCode 1        versionName "1.0"        ndk {            moduleName = "HelloJNI"        }        sourceSets.main {            jni.srcDirs = []            jniLibs.srcDir "src/main/libs"        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}

16、compileDebugJavaWithJavac

Error:Execution failed for task ':compileDebugJavaWithJavac'

17、Not recognizing known sRGB profile that has been edited

AAPT err(Facade for 1975606064):E:\workspace\SmartCity\app\src\main\res\mipmap-hdpi\bottom_tab_bg.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited

在build.gradle里添加以下两句:aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false,就直接添加到buildToolsVersion的下方即可,这个是用来关闭Android Studio的PNG合法性检查的,直接不让它检查

18、app:mergeDebugResources

Error:Execution failed for task ':app:mergeDebugResources'

19、transformClassesWithDexForDebug

Error:Execution failed for task ':demo:transformClassesWithDexForDebug'

20、gradle dsl method not found “runProguard()”

原因:gradle版本更新,方法名改变,改为minifyEnable()

21、the specified child already has a parent , you must call removeview() on the child’s parent first

Fragment重复加载的问题:一个孩子只能有一个爸爸

解决方案:在添加Fragment到ViewPager之前,先判断Fragment是否已经添加到ViewPager了,如果已经添加,先remove后再添加

public static void removeSelfFromParent(View view) {        if (view != null) {            ViewParent parent = view.getParent();            if (parent != null && parent instanceof ViewGroup) {                ViewGroup group = (ViewGroup) parent;                group.removeView(view);            }        }    }

22、illegalstateException非法状态异常

23、NullPointException 空指针异常

24、you need tou use a theme.appcompat theme to with activity,Error inflating class android.support.design.widget.TabLayout

使用TabLayout的时候出现该问题,给Activity设置一个theme.appcompat 主题,例如

android:theme="@style/Theme.AppCompat.Light"

25、fragment中嵌套viewpager,vierpager中有多个fragment,不显示

将getSupportFragmentManager()改为getChildFragmentManager()

26、Error:Failed to resolve: com.android.support:support-core-utils:24.2.1

在使用Fresco的时候报的错,升级Android Support Library就好了,原因是Android Support Library升级后v4包拆分成了好几个小包,其中就有support-core-utils

27、Rendering Problems

Failed to load the LayoutLib: com/android/layoutlib/bridge/Bridge : Unsupported major.minor version 52.0 (Details)

这是由于在Android 7.0 版本中增加对JAVA8的支持,所以在此给出两种中解决办法:

改下Android version或安装jdk1.8

28、Suspending all threads took: 5.639ms

29、ImageView no longer exists. You should not use this PhotoViewAttacher any more

30、java.lang.IllegalArgumentException: pointerIndex out of range

在使用ViewPager展示图片的时候,使用了PhotoView对ImageView进行多点触控放大缩小,出现了java.lang.IllegalArgumentException: pointerIndex out of range

31、com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 2 path

T t = gson.fromJson(gsonString,type);

32、Package manager has died

解决方法:http://blog.csdn.net/axi295309066/article/details/52876150

33、android java.net.UnknownHostException: Unable to resolve host “…”: No address associated 错误

我们在android开发的时候经常会遇到这个错误,一般来说,造成这种错误的最普遍情况有两种:

1、android设备网络连接没打开,例如3G网络和WIFI网络

所以,如果遇到这种错误时,请先查看网络是否已正常连接.

2、Manifest文件没有标明网络访问权限

如果确认网络已经正常连接并且还是出这种错误的话,那么请看下你的Manifest文件是否标明应用需要网络访问权限,如果没标明的话,也访问不了网络,也会造成这种情况的

 <uses-permission android:name="android.permission.INTERNET"/>

Failed to install *.apk on device ‘emulator-5554’: timeout

错误提示:
Failed to install helloworld.apk on device ‘emulator-5554’: timeout

或者the user data image is used

原因:由于模拟器已经开启而没有关闭或者非法关闭引起的。

解决方法:

删除 C:Documents and SettingsAdministrator.androidavd对应版本.avd
下所有以.lock结尾的文件夹。
或者
Failed to install .apk on device :
timeout Launch canceled!

还有一种办法:
在window->preferences->Android->DDMS->ADB connection time out (ms):
将这个值设置的大一些,默认为5000,设置成500000,然后就OK了

Android adb常见问题整理

问题1

The connection to adb is down, and a severe error has occured.
You must restart adb and Eclipse.
Please ensure that adb is correctly located at ‘adb.exe’ and can be executed.

解决方法

adb kill-serveradb start-server

问题2

ADB server didn’t ACK
failed to start daemon

解决方法

DDMS - Devices - Reset adb
如果不行,关闭豌豆荚或者Eclipse重启

问题3

Adb failed to restart! Make sure the plugin is properly configured

解决方法

杀死 Wandoujia 相关的所有进程,ok
wandoujia_daemon.exe
wandoujia_helper.exe

AndroidStudio 建议升级此编译器,主版本 52 比 51 新, 此编译器支持最新的主版本

JDK导致的问题

compileSdkVersion 24    buildToolsVersion "24.0.2"    defaultConfig {        minSdkVersion 15        targetSdkVersion 24        versionCode 1        versionName "1.0"    }

上面表示编译的时候使用Android 24的版本编译,最高支持到版本24

compile 'com.android.support:appcompat-v7:24.2.0'compile 'com.android.support:design:24.2.0'

这两行表示依赖了24版本的两个包

解决方法:

1、我的JDK是1.7,将JDK升级到1.8之后应该可以解决这个问题(这个只提供参考,因为公司还有其他项目,所以我没有升级到JDK1.8,但是同事是1.8运行正常)

2、将上面代码的24版本统统改为23版本,targetSdkVersion 24这个也要改为23,如果不改的话引入的两个包会报红,同时依赖的包也改为下面

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

debug.keystore not found for signing config ‘debug’

UnspportedOperationException

java.util.AbstractList.remove

List<String> mOtherChannel = Arrays.asList(CommonUtil.getStringArr(R.array.otherchannel));mOtherChannel.remove("xxx");

UnspportedOperationException抛出的原因是使用了不当的容器操作。通常是由于尝试修改固定长度的容器的缘故,调用Array.asList() 方法会返回这种容器。因为数组显然是固定长度的容器,使用asList方法转换为list也会保持这种属性。

Array.asList()返回的是Arrays类内部自定义的AbstractList的子类,它没有实现remove方法。

List<String> mOtherChannel = new ArrayList<>(Arrays.asList(CommonUtil.getStringArr(R.array.otherchannel)));
1 0