Android studio 遇到的常见问题

1.把eclipse项目导入AndroidStudio,结果报错了。

错误:Error:Execution failed for task ':app:mergeDebugResources'. > Error:Java.util.concurrent.ExecutionException: com.Android.ide.common.process.ProcessException:


解决方法

在gradle的android{ ... } 中加入这两句就可以了
android {
....
aaptOptions.cruncherEnabled = false 
aaptOptions.useNewCruncher = false 

出现错误的原因是:Androidstudio严格审查png图片,就是png没有达到Androidstudio的要求


上面的那两句话大概意思是

禁止Gradle检查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 failed for task ':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.修改了Android项目的最小SDK版本之后出现很多stysle文件找不到

  • 解决方案
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
    applicationId "net.mmloo2014.android" minSdkVersion 14 targetSdkVersion 23 }

compileSdkVersion 是多少版本的

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

6.问题

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上有人也提了这样的问题。只需要删除其中的一个就可以解决了。

7.添加第三方依赖出现的问题

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.xml Suggestion: use tools:overrideLibrary="com.android.core" to force usage
  • 错误原因
    出现这个错误的原因是我引入的第三方库最低支持版本高于我的项目的最低支持版本,异常中的信息显示:我的项目的最低支持版本为14,而第三方库的最低支持版本为19,所以抛出了这个异常。

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

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

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

<uses-sdk tools:overrideLibrary="xxx.xxx.aaa, xxx.xxx.bbb"/>

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

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

  • 错误
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"

}

9.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(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);

10.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自带的编辑器引入的。

11.Android studio编译问题:not found ndk()

问题

Error:(15, 0) Gradle DSL method not found: 'ndk()' method-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' } } }

12.Android studio导入其他的项目:UnsupportedMethodException

问题

UnsupportedMethodException
        Unsupported method: AndroidProject.getPluginGeneration().
        The version of Gradle you connect to does not support that method.
        To resolve the problem you can change/upgrade the target version of Gradle you connect to. Alternatively, you can ignore this exception and read other information from the model.

解决方案

将根目录中的build.gradle文件中的gradle版本号,出现错误之前,我的是1.3.0,修改成2.2.0之后重新编译一下就可以运行了。

dependencies {    
classpath 'com.android.tools.build:gradle:1.3.0'   
}

将这个版本号改成你其他项目能够运行成功的版本号即可

13、

Error:Execution failed for task ':app: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 'E:\Program Files\Java\jdk1.7.0_80\bin\java.exe'' finished with non-zero exit value 2

AndroidStudio进行SVN同步的时候常出现这个问题,初步猜测可能由同步下来不需要的build文件造成,clean一下项目即可解决。

14、

Error:Execution failed for task ':app:clean'.
> Unable to delete directory: F:\XXXXXX\app\build\intermediates\res\merged

说明这个文件被其他文件占用 
可以把android studio 关掉 直接去对应的文件夹下面删除对应的文件。一般在不能删除的情况下,多点几下重试,就能成功删除。如果实在无法删除。 
可以去任务管理器 把 java 的进程强行停止掉。 
再重新打开android studio 就可以了

15、

Error while executing: am start -n "package_name/package_name.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=package_name/.MainActivity } Error type 3 Error: Activity class {package_name/package_name.MainActivity} does not exist. Error while Launching activity

卸载应用之后再次运行出现这个错误,as默认项目没有修改,没有安装就直接启动app,因此报错。可能是由于AS的Instant Run功能异常导致,解决办法见7。

16、

03/30 17:11:41: Launching app No local changes, not deploying APK $ adb shell am start -n "package_name/package_name.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Connected to process 30598 on device coolpad-coolpad_8297-Coolpad8297-48dfce74

修改配置文件而没有修改代码的情况下,AndroidStudio默认为代码没有改变,因此没有重新安装APK。

可能是由于AS的Instant Run功能异常导致。可以在代码中加上一个回车或者几个空格试试。如果不行,解决办法见7。

17、

Error:(1, 1) A problem occurred evaluating project ':app'.
> Failed to apply plugin [id 'com.android.application'] > Gradle version 2.10 is required. Current version is 2.8. If using the gradle wrapper, try editing the distributionUrl in F:\XXX\gradle\wrapper\gradle-wrapper.properties to gradle-2.10-all.zip

Gradle的版本太低,那么怎么升级Gradle版本呢,首先打开android studio项目 找到项目目录gradle\wrapper\gradle-wrapper.properties这个文件,最后一句distributionUrl=http://services.gradle.org/distributions/gradle-2.8-all.zip就是Gradle的版本,修改成2.10即可。再次运行程序,AndroidStudio就会自动下载2.10的Gradle版本。

18、

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define XXX;
Error:Execution failed for task ':app:transformClassesWithDexForXXXDebug'.
> 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 'E:\Program Files\Java\jdk1.7.0_80\bin\java.exe'' finished with non-zero exit value 2

重复的库文件引用,找到并删除重复的库,就可以解决。

19、 
修改代码之后,点击运行,AndroidStudio没有进行重新编译,而是提示no changes to deploy,然后启动修改前的那个APP,代码修改完全没用。这个问题初步判断是由于AndroidStudio的Instant run功能出错导致的。目前只能在settings->Build,Execution,Deployment->Instant Run中将Enable Instant Run to hot swap code/resource changes on deploy选项的勾点掉。这是默认启用的。点掉之后就正常了,每次点击运行都会重新安装APP。

20、

Error:(1, 0) Your project path contains non-ASCII characters. This will most likelycause the build to fail on Windows. Please move your project to a differentdirectory. See http://b.android.com/95744 for details.This warning can be disabled by using the command line flag-Dcom.android.build.gradle.overridePathCheck=true, or adding the line'com.android.build.gradle.overridePathCheck=true' to gradle.properties filein the project directory.

项目路径含有中文,将中文替换掉就行了。

21、

Error running app:
Instant Run requires 'Tools|Android|Enable ADBintegration' to be enabled

菜单栏,Tools -> Adnroid -> enable ADB integration。

22.

Cannot resolve symbol 'BDLocation'

Android Studio 无法识别class 或自动导包,将其显示为红色。不能自动导包对开发者来说很不爽,同时还会影响项目的开发进度。

Clean Project 、删除Project下所有的build 以及.gradle下的文件、重启Android Studio ,重新 sync gradle 等都没用。

解决方案:

图一:
这里写图片描述
图二:
这里写图片描述
然后等待Android Studio 重新启动就OK了。


你可能感兴趣的:(android)