【问题标题】:Proguard obfuscates Activity names in a merged library manifestProguard 混淆了合并库清单中的 Activity 名称
【发布时间】:2013-04-18 08:49:30
【问题描述】:

我有几个使用公共库项目的应用程序项目。我最近尝试将每个应用程序项目的 AndroidManifest.xml 中的一些常见 Activity 声明移动到库的清单中,并启用清单与 project.properties 中的 manifestmerger.enabled=true 合并。

在调试版本中一切正常,但发布版本(由 Proguard 混淆)失败并显示 ActivityNotFoundException。这是因为 Proguard 混淆了库清单中声明的​​活动名称,而不是应用程序清单中声明的​​活动名称。

我检查了应用程序项目的合并 bin/AndroidManifest.xml 文件,它正确地列出了活动名称。

有人可以建议一个解决方法吗?

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    标准 Ant 构建过程调用 aapt 工具来创建 ProGuard 配置 (bin/proguard.txt),该配置保留必要的类(例如,它认为使用的所有活动)。如果这对您的项目结构不起作用(可能是错误或不受支持的情况),您可以自己在 proguard-project.txt 中保留这些类:

    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    

    如果生成的应用程序仍然缺少其他类,您可以在 ProGuard 手册 > 示例 > A complete Android application 中找到更多手动配置。

    【讨论】:

    • @Eric,我认为这是构建系统中的错误 (code.google.com/p/android/issues/detail?id=36077)。您有什么解决方法或建议吗?
    • @user802421 显式添加上面的 -keep 行应该可以解决它。
    • @ Eric,明确添加仍然无效。仅保留 apk 项目清单中的类定义。现在我需要关闭合并并从 lib 项目中复制所有内容。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多