android中的proguard和R

Posted

技术标签:

【中文标题】android中的proguard和R【英文标题】:proguard and R in android 【发布时间】:2013-10-15 12:02:46 【问题描述】:

我是第一次在我的 android 应用中使用 proguard。

我没有让它正常工作。我正在查看我的 usage.txt 文件,以查看 proguard 从我的代码中删除的部分是什么。

我看到这些不寻常的东西,不知道该怎么想:

 [my_package].Manifest
    [my_package].Manifest$permission
    [my_package].R$array
    [my_package].R$attr
    [my_package].R$bool
    [my_package].R$color
    [my_package].R$dimen
    [my_package].R$id
    [my_package].R$integer
    [my_package].R$layout
    [my_package].R$menu
    [my_package].R$raw
    [my_package].R$string
    [my_package].R$style
    [my_package].R$styleable

proguard 是否会从我的代码中删除所有这些内容?

【问题讨论】:

你的程序在使用proguard后可以工作了吗? 不,proguard 导致我的应用出现一些错误。我想也是因为我在打电话的一些反思。我正在使用 keep 选项来避免删除/重命名此方法和类。 是的,当我们使用反射时,我们必须使用keep选项。 Proguard makes reflection with the R class in android application no longer work的可能重复 【参考方案1】:

将此添加到您的 proguard 配置中:

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

看看这个通用的 android proguard 设置:Android: What are the recommended configurations for Proguard?

编辑: 对于反射添加:

-keepattributes InnerClasses

-keep class **.R
-keep class **.R$* 
    <fields>;

【讨论】:

这已经在$sdk.dir/tools/proguard/proguard-android.txt 中,所以您不需要再次指定。 我正在使用:$sdk.dir/tools/proguard/proguard-android-optimize.txt 所以我想我已经添加了这些行 看这个。 ***.com/questions/13923815/…

以上是关于android中的proguard和R的主要内容,如果未能解决你的问题,请参考以下文章

android应用程序中的proguard

Android build.gradle 中的 proguard-android-optimize.txt 与 proguard-android.txt

Android中的consumer-rules.pro和proguard-rules.pro有啥区别?

Android 中的 ProGuard 不起作用。(不混淆)

Android 库中的 Proguard

android - android studio中的proguard错误