【问题标题】:Reflection fails in signed build Android反射在签名构建 Android 中失败
【发布时间】:2020-08-24 04:46:18
【问题描述】:

我正在模块化我们正在进行的项目。

假设有一个应用模块。

还有“n”个其他模块。 这些模块实现了app模块(即实现项目(':app_module'))

从应用模块我需要启动模块 1..n

我使用反射来获取 app_module 中的活动引用。

val intent = Intent()
intent.setClass(context, Class.forName("com.application.myapp.HelpActivity"))
context.startActivity(intent) 

所以当我运行应用程序时它工作正常。

但是当我生成 Signed debug build 并安装它时,我得到了 ClassNotFoundException

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.application.myapp.HelpActivity" on path: DexPathList

知道是什么导致签名调试构建中的反射失败?

注意:这不是亲卫问题。我已经禁用它并且我已经检查过了。有同样的问题。

谢谢。

【问题讨论】:

  • 我确定这是一个混淆问题。请在您签名的 APK 上使用 APK 分析器(在 Android Studio 中)并检查您的课程是否确实存在。
  • 嘿,我分析了APK发现我的模块不在classes.dex中。但是我已经在 pro-guard 中添加了该模块。而且我也启用了multidex。有什么想法吗?
  • 将您的 gradle 文件和 proguard 配置的相关部分添加到您的问题中。
  • 嗨,大卫,我知道了这个问题。这是因为在模块清单 dist:onDemand="true" 中,这就是模块类不存在于 dex 文件中的原因。谢谢。
  • 很高兴您能够解决问题。您可以为自己的问题创建一个答案并接受该答案。它会将问题从未回答的问题列表中删除,并可能帮助遇到类似问题的其他人。

标签: android gradle proguard android-module


【解决方案1】:

更新: 问题是因为该模块被视为动态模块。

问题的原因是模块清单中的dist:onDemand="true"

我将它设置为 false 并生成应用程序包并通过 bundletool 安装它。现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2019-09-29
    • 2021-10-07
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多