Proguard 保留 R 类

Posted

技术标签:

【中文标题】Proguard 保留 R 类【英文标题】:Proguard retain R classes 【发布时间】:2013-03-25 20:03:42 【问题描述】:

我正在将亚马逊的广告集成到我的应用程序中,并且我使用 Proguard。他们告诉我,如果我使用 Proguard,我必须“确保 R 类在混淆过程中保留其名称”

有谁知道这是什么意思,如果知道,我该如何实现?

更新

我尝试了很多不同的选项,但我仍然从 Amazon 的 SDK 中收到一个错误,即我的资源被混淆了。我试过了:

-keepnames com.my.app.*.R;

-keeppackagenames com.my.app.*.R;

-keepclassmembers com.my.app.*.R;

-keep class com.my.app.*.R;

-keepclassmembers class **.R$* 
    public static <fields>;

【问题讨论】:

那些 * 在包名中做了什么? 【参考方案1】:

Proguard 通过将所有类名和方法替换为 A、B、C、D 等来混淆您的代码。

要保留类名,请将-keepnames 添加到您的 proguard 文件中。

例如-keepnames com.example.myproject.R

另请参阅此 SO 帖子:Proguard keep class names?

另请参阅 proguard 项目以了解有关它的作用以及可以使用哪些选项的更多信息:http://proguard.sourceforge.net/#manual/introduction.html

【讨论】:

感谢您的回复。我已经尝试了所有方法,但我无法让 Proguard 不混淆我的资源。到目前为止,我已将 OP 更新为我所尝试的方式。

以上是关于Proguard 保留 R 类的主要内容,如果未能解决你的问题,请参考以下文章

proguard 不保留匿名类

Proguard 保留公共类、字段和方法

Proguard 保留接口和抽象类的参数名称

ProGuard混淆时保留注释(@类内容)

ProGuard:保留包名,混淆类

带有 proguard 的 Kotlin AAR 库:如何只保留类和方法名?