記一次 報錯:Android ClassNotFoundException: Didn't find class on path

Merbng發表於2018-06-15

場景

專案上線後,使用者反饋,安裝完開啟應用就顯示“應用已停止執行”,改錯誤發生在5.0以上的手機,經測試6.7.8.均沒有問題,推測是6.0以下會有這個問題。除錯時,報錯如下:

TIM圖片20180615190327.png
提示類找不到,檢查了AndroidManifest.xml 都沒問題,在網上搜了一圈,大多都是採用分包解決,然而專案本來就是採用的分包multiDexEnabled true,還有刪除build資料夾的,這些都試過.. 經測試,debug包是沒有問題的,只有打包後會出現,問題定位在打包配置上,檢查build.gradle如下圖
TIM截圖20180615173600.png

專案原先是沒有新增v2SigningEnabled true

解決

signingConfigs 裡新增配置v2SigningEnabled true 或者使用AS自帶的打包,勾選v2

微信圖片_20180615173510.png

深入

  • v1和v2的簽名使用 1)只勾選v1簽名並不會影響什麼,但是在7.0上不會使用更安全的驗證方式 2)只勾選V2簽名7.0以下會直接安裝完顯示未安裝,7.0以上則使用了V2的方式驗證 3)同時勾選V1和V2則所有機型都沒問題

  • Android 7.0中引入了APK Signature Scheme v2,v1是jar Signature來自JDK V1:應該是通過ZIP條目進行驗證,這樣APK 簽署後可進行許多修改 - 可以移動甚至重新壓縮檔案。 V2:驗證壓縮檔案的所有位元組,而不是單個 ZIP 條目,因此,在簽名後無法再更改(包括 zipalign)。正因如此,現在在編譯過程中,我們將壓縮、調整和簽署合併成一步完成。好處顯而易見,更安全而且新的簽名可縮短在裝置上進行驗證的時間(不需要費時地解壓縮然後驗證),從而加快應用安裝速度。

參考資料:

相關文章