开发者社区> 问答> 正文

【移动推送】集成Android SDK后运行App报以下内容如何解决?

已解决

接入移动推送 SDK 后,运行时报出java.lang.NoClassDefFoundError找不到某个类,但SDK中明明包含这个类,为什么会这样?

展开
收起
EMAS支持组 2022-09-15 15:12:10 630 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。


    更多官方信息

    EMAS官网介绍:https://www.aliyun.com/product/emas

    Devops:https://www.aliyun.com/product/emascrash/mobile_devops

    移动热修复:https://www.aliyun.com/product/hotfix

    移动测试:https://www.aliyun.com/activity/emas/mqcexpert

    移动推送:https://www.aliyun.com/product/cps

    HTTPDNS:https://www.aliyun.com/product/httpdns

    EMAS 控制台: https://emas.console.aliyun.com/products

    2022-09-16 16:07:01
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
基于阿里巴巴以及合作伙伴的最佳实践,围绕大前端、云原生领域的相关技术热点(小程序、Serverless、应用中间件、低代码、DevOps)展开行业探讨,与开发者一起探寻云原生时代应用研发的新范式。
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载