日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

集成Android SDK后運行App報java.lang.NoClassDefFoundError該如何解決?

問題詳述

接入移動推送 SDK 后,運行時報出java.lang.NoClassDefFoundError找不到某個類,但SDK中明明包含這個類,為什么會這樣?

問題原因

如果您的App工程使用了multidex架構(gòu),可能會出現(xiàn)java.lang.NoClassDefFoundError,原因在于:推送SDK由于需要在application中進行初始化,所以相關(guān)類需要被放到MainDex文件中,否則在app啟動時可能會報錯。

解決方法

通過修改Gradle構(gòu)建腳本,可以將一些類顯示放到MainDex中:

  1. afterEvaluate {
  2. tasks.matching{
  3. it.name.startsWith('create') && it.name.endsWith('MainDexClassList')
  4. }.each { tk ->
  5. tk.doLast {
  6. keepMainMultiDex(tk.outputFile);
  7. }
  8. }
  9. }
  10. /**
  11. * 控制MainDex中的class列表
  12. * 將multidex.keep的內(nèi)容追加到 maindexlist.txt 中
  13. * @param outputFile
  14. */
  15. def keepMainMultiDex(File outputFile){
  16. File keepFile = file("multidex.keep");
  17. outputFile << '\n'
  18. outputFile << keepFile.getText('UTF-8')
  19. }

這樣在gradle的構(gòu)建過程中,會將multidex.keep文件中的類同樣打到maindex中。接下來只需要將報出NoClassDefFoundError的類寫到multidex.keep文件即可(在app根目錄下創(chuàng)建),如:

  1. com/alibaba/sdk/android/push/securitybox/alipush/AliPushSecurityBoxService
  2. com/alibaba/sdk/android/push/CloudPushService
  3. ......

該問題為常規(guī)開發(fā)問題,MultiDex的使用建議直接看官方API文檔,此處示例如未生效,也可以在網(wǎng)上搜索”Multidex分包:將指定的類打包到主dex中”,配置后可以自行反編譯查看是否將找不到的類已打進主dex。