Android程式碼報錯彙總
本帖子是個人開發中遇到的錯誤,會在此處做一個記錄,會持續更新。
1. 匯入依賴時,有時會報錯(類似下列錯誤)
More than one file was found with OS independent path ‘META-INF/DEPENDENCIES’
解決方式:
在build.gradle 中 新增下列程式碼(根據個人情況自行修改):
packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/license.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/notice.txt' exclude 'META-INF/ASL2.0' }
2. WebView載入過程中 對於Https 資源的載入問題。 可能會出現 https 相關的圖片無法顯示、 或者 相關的css 樣檔案無法顯示等
重寫webViewClient的以下方法即解決
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
3. DexArchiveMergerException: Unable to merge dex
這個錯誤,困擾了我幾個小時,在網上看了好多部落格,有刪除.gradle 然後 clean的, 也有其他的,但多半不能解決問題。 我這邊是通過 檢測重複的依賴,或者重複的包 解決的。
檢測一下是否匯入了重複的依賴 或則 jar包。
4.AES 加密中 AES/CBC/NoPadding 情況下, 當不足 16位元組 或者 16 * n 個位元組的情況下, 會導致加密失敗 即 null 。我們可以對不足部分進行 補充, 可以是不可見字元 , 或者… 自己定義吧。當然,解密的過程也會出現不可見字元, 這個自己處理一下便可以了
/** * 使用 noPadding 加密 不足16位部分 使用 0x00 不可見字元填充 * @param beforeStr * @return */ private static String processString(String beforeStr) { if (beforeStr == null)return null; int length = beforeStr.getBytes().length; int otherLength = 16 - length % 16; byte[] bytes = beforeStr.getBytes(); byte[] newBytes = new byte[length + otherLength]; for (int i = 0; i < newBytes.length; i++) { if (i < length){ newBytes[i] = bytes[i]; }else { newBytes[i] = 0x00; } } return new String(newBytes); }
5. 關於Gson解析異常:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
檢測json 字串,亂碼 或者 包含空格、 不可見字元等。都會導致解析失敗。
6. 遇到 release 版本與 debug 版本表現不一樣的情況下, 如果你的專案裡面有混淆,八成是混淆程式碼部分出了問題 。檢測表現不同或者是奔潰的地方,找到對於的 類或者 程式碼 塊, 看是否在混淆檔案裡面進行的處理。(因為半信半疑的想法,在這個不起眼的小問題上面浪費了 數個小時)
7.報錯: 無法儲存裁剪過的圖片
對於呼叫系統裁剪的程式碼中由以下這樣一行
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri1);
這行程式碼的意思是將圖片儲存到 我們所提供的uri1 中。
android4.4以下,可以正常, 4.4以上 當uri 是 應用內目錄就會有這樣的問題。等於是 一個應用要往另外一個應用儲存資料,這顯然是不被允許的。
解決方式:
1.刪除該行。
2.intent.putExtra(“return-data”, true);
3.在onActivityResult 的回撥中
Bitmap bitmap = data.getParcelableExtra("data");
來獲取圖片,然後就可以做我們想做的操作了。
Parcelable 報錯
Unmarshalling unknown type code 3670065 at offset 724
出現這樣的錯誤時因為序列化和反序列話的順序不一致導致的
Gradle 報錯 unable to Merge dex
目前預測 兩個原因:
1. 添加了重複的依賴 或者 jar 包 會報這個錯。
2. 方法數越界 65535問題。 可以在gradle Console 中 run -info 檢視詳細的報錯資訊。
WebView 定位問題
需要新增如下程式碼,即可定位:
//webview定位相關設定
settings.setDomStorageEnabled(true);
settings.setGeolocationEnabled(true);
//settings.setGeolocationDatabasePath(getFilesDir().getPath());
progressWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {
callback.invoke(origin, true, true);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
});