开发者社区> 问答> 正文

移动推送Android SDK:集成SDK后运行App报java.lang.NoClassDefFo

移动推送Android SDK:集成SDK后运行App报java.lang.NoClassDefFoundError该如何解决?

展开
收起
保持可爱mmm 2020-03-27 22:46:16 911 0
1 条回答
写回答
取消 提交回答
  • 通过修改Gradle构建脚本,可以将一些类显示放到MainDex中:

    afterEvaluate { tasks.matching{ it.name.startsWith('create') && it.name.endsWith('MainDexClassList') }.each { tk -> tk.doLast { keepMainMultiDex(tk.outputFile); } } }

    /** * 控制MainDex中的class列表 * 将multidex.keep的内容追加到 maindexlist.txt 中 * @param outputFile */ def keepMainMultiDex(File outputFile){ File keepFile = file("multidex.keep"); outputFile << '\n' outputFile << keepFile.getText('UTF-8') } 这样在gradle的构建过程中,会将multidex.keep文件中的类同样打到maindex中。接下来只需要将报出NoClassDefFoundError的类写到multidex.keep文件即可(在app根目录下创建),如:

    com/alibaba/sdk/android/push/securitybox/alipush/AliPushSecurityBoxService com/alibaba/sdk/android/push/CloudPushService ...... 该问题为常规开发问题,MultiDex的使用建议直接看官方API文档,此处示例如未生效,也可以在网上搜索”Multidex分包:将指定的类打包到主dex中”,配置后可以自行反编译查看是否将找不到的类已打进主dex。

    2020-03-27 22:50:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
女性移动App安全攻防战 立即下载
汇聚云计算的生态核能——云市场,云上APP Store 立即下载
千万级用户直播App——服务端架构设计和思考 立即下载