摘要
這幾天將原來的ECLIPSE項目遷移到了AndroidStudio開發環境中,遷移比較順利,本人有三臺測試機 ,一個是公司的(HTC–Android6.0),兩個自己的(T2-5.1.1、P7-5.1.1),項目在這三臺機子上運行正常,今天硬件部同事拿了臺手機(Android5.0以下)刷寫調試程序,點擊啓動圖標就奔潰。?從log上看到程序異常:com.android.dex.DexException 。
報錯信息如下圖:
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
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 'D:\tools\android\JDK\bin\java.exe'' finished with non-zero exit value 2
從描述上,應該是項目中存在相同的jar包,導致運行失敗。
但是檢查了lib庫並沒有衝突,經過百度和Google出現該問題的解決方案有四種。
1 項目中存在相同的jar包,導致運行失敗
解決方案: 刪除相同的jar包即可 ,大多數是因V4包
2 出現這個問題是因爲最新的v4包(compile ‘com.Android.support:support-v4:22.2.1’)已經包含了annotation.jar這個包,但其他jar包裏也包含這個包造成的。而非同時包含了v4/V7造成的,所以一堆人說在v7包裏進行如下設置:
解決方案:
compile (‘com.android.support:appcompat-v7:22.2.1’){
exclude group: “com.android.support”, module: “support-v4”
}
3 在application的build.gradle裏的dexOptions設置裏增加一句:preDexLibraries = false
dexOptions {
incremental = true;
preDexLibraries = false
javaMaxHeapSize “2g”
}
4 需要v4包的地方exclude掉annotation包,注意compile要多加個括號:
compile (‘com.android.support:support-v4:22.2.1’){
exclude module: ‘support-annotations’ }
分別根據上面的四種解決方便,進行BUG修復,結果BUG依舊存在,心都快碎了
最終的解決方案爲如下,說不出所以然,只是通過一下方案解決了,在此記錄一下!
打開projectStucture ,進行如下配置
加入後build.gradle文件顯示,沒有的補齊
dexOptions {
preDexLibraries false
jumboMode true
javaMaxHeapSize "2g"
incremental false
}