Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發各類常見錯誤解決方案

Android開發各類常見錯誤解決方案

編輯:關於Android編程

本文屬於個人平時項目開發過程遇到的一些問題,記錄下來並總結解決方案,希望能幫到大家解決問題,有些問題的解決方案是在StackoverFlow上找到的,建議大家遇到問題多去上面找,基本上都能找到解決方案的。

(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 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)未知錯誤

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: unknown
Our PID: 1412
Owner Operation: unknown
Our operation: Initialize cache
Lock 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 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)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
      }
}

(7)Android studio 編譯問題:finished with non-zero exit value 1(由於導入的依賴出現重復造成的)
- 問題:

Error:Execution failed for task ':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: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)添加第三方依賴出現的問題

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文件中標簽中添加


其中的xxx.xxx.xxx為第三方庫包名,如果存在多個庫有此異常,則用逗號分割它們,例如:

這樣做是為了項目中的AndroidManifest.xml和第三方庫的AndroidManifest.xml合並時可以忽略最低版本限制。

(10)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"?
}

(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 { 
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 運算符)
解決方案 方案一

將標紅處設置為1.7.png

修改soure為1.7.png

方案二<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxiciAvPg0K1NpidWlsZCBncmFkbGXW0L340NDF5NbDyOfPwrT6wuujug0KPHByZSBjbGFzcz0="brush:java;"> 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(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()
問題

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'
        }
    }
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved