1. 程式人生 > >Android開發常見異常和解決方案(一)

Android開發常見異常和解決方案(一)

異常記錄,填過的坑記錄下來,作為以後的經驗

異常1
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexWithDexForRelease'
產生原因:該bug 是由於 grade 的依賴包的問題,檢視依賴是否重複但是版本不同。也可能出現的問題: 引入的jar包包含此jar包。
解決方案:檢查,刪除重複的依賴或者jar包
異常2com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536


產生原因:Android工程方法數超過65535,dex檔案是java程式碼打包後的位元組碼,一個dex檔案最多隻支援65535個方法,這也是為什麼微信有了三個dex檔案的原因。
解決方案:谷歌官方推薦使用MultiDexApplication,具體步驟如下
Gradle 配置:

    defaultConfig {   
           applicationId "XXX"
           minSdkVersion 14
           targetSdkVersion 27
           multiDexEnabled true
    }
    dependencies {
        compile 'com.android.support:multidex:1.0.0'
    }
    Application 類重寫方法:

    @Override
    protected void attachBaseContext(Context base) {
       super.attachBaseContext(base);
       MultiDex.install(this);
    }

異常3 關於Android微信支付的errCode=-1
專案中有用到微信支付,之前不是我負責開發的,來這也沒測過,昨天在測支付寶支付的問題,修復好之後順便試了一下微信支付,神馬情況,errCode=-1,微信文件上面是這樣講的,
errCode為-1可能的原因:簽名錯誤、未註冊APPID、專案設定APPID不正確、註冊的APPID與設定的不匹配、其他異常等。
然後好鬱悶,測線上的版本微信支付正常的,最後發現,打包簽名的app可以正常支付,用AS裝到手機上的則會出現errCode=-1的情況。造成支付返回code是-1的原因是:是簽名錯誤,用Android Studio直接裝到手機上的apk和打包簽名的apk簽名是不一樣的。
異常4

打包簽名失敗:signing.KeytoolException: Failed to read key atap from store “D:\pcApple.jks”: Keystore was tampered with, or password was incorrect
根據錯誤提示得知失敗的原因是無法從儲存中讀取金鑰atap“D:\ pcApple.jks”:金鑰庫被篡改,或者密碼不正確,解決方案:首先確定自己的key路徑是對的,密碼有沒有輸入錯誤,密碼是否reset重置過,如果點選alias後面的 …按鈕時提示Keystore was tampered with, or password was incorrect,可以採取以下操作,如果有之前key檔案的備份的話,就關閉AndroidStudio,把報錯的key檔案刪除掉,換成之前備份的key檔案,密碼什麼的要一致,然後開啟Androidstudio重新打包,點選alias後面的…按鈕,點之前把alias後面的值清空,這時會彈出框,讓你選擇以後的key或者重新生成,直接點選已經有的那個alias 值就行,這樣就可以打包成功了,我是這樣解決問題的,當然如果這樣還不行的話可以重新建立簽名的key檔案,如果專案已經做很大接了很多第三方平臺並且在很多移動應用平臺都已經發版上線後,不建議這樣做,也許會造成很多不必要的麻煩,不知道重新生成簽名後更新版本的時候會不會不支援。
異常5 移動端微信登陸成功後微信返回的使用者資訊出現亂碼:
解決方案:java程式碼:將微信返回的json字串這樣轉一下:
result = new String(result.getBytes(“ISO-8859-1”), “UTF-8”);

異常6 AS報錯Unable to merge dex:
錯誤資訊:

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

解決方案:先檢查有沒有重複的jar包依賴在專案的builde.grde檔案中,然後
1、Build->clean project
2、Build->rebuild project