【问题标题】:How can I ensure that ProGuard keeps all my own classes in Xamarin.Android?如何确保 ProGuard 在 Xamarin.Android 中保留我自己的所有类?
【发布时间】:2017-02-21 10:37:15
【问题描述】:

ProGuard 删除我自己的课程时遇到问题。我创建了一个 proguard.cfg,我尝试在其中为它们指定 -keep 类,但我只能在使用它们的 md5 散列包指定类时让它工作。

例如,我的应用程序的包名称是 se.initech.foo,并且我在一个子包框架中有一个类,称为 InfoBox。 所以我希望完全限定的类名是se.initech.foo.Framework.InfoBox

但是我编译打包运行ProGuard后,在应用输出日志中可以看到找不到类md586c878b9e5eee7e17627db5c3cd60647.InfoBox

如果我添加

-keep class md586c878b9e5eee7e17627db5c3cd60647.** { *; }

到我的 proguard.cfg 文件,它可以工作。但是,如果我尝试指定真实的类名,即se.initech.foo.** 甚至se.initech.foo.Framwork.InfoBox,它就不起作用。

有没有办法

a) 使用 proguard.cfg 中类的真实包名,或

b) 事先找出哈希值,而不仅仅是通过检查应用程序输出日志中的崩溃?

【问题讨论】:

    标签: android xamarin xamarin.android proguard android-proguard


    【解决方案1】:

    Xamarin 会自动生成一个包含您的项目类的 proguard_xamarin.cfg(它将位于您的 obj 工件目录中):

    proguard_xamarin.cfg 示例:

    ~~~~
    -keep class md52ce486a14f4bcd95899665e9d932190b.** { *; <init>(...); }
    -keepclassmembers class md52ce486a14f4bcd95899665e9d932190b.** { *; <init>(...); }
    ~~~~
    

    它还将创建一个 proguard_project_references.cfg,其中包含您的项目创建的所有 Android Callable Wrapper (ACW) 类。

    如果您不想让 Xamarin 自动创建基于 MD5 的类名,则需要通过类属性 (~~~~Attribute) 手动分配 Name,即:

    ActivityAttributeName:

    [Activity(Name = "com.sushhangover.proguarddroid.StackOverflowActivity", Label = "ProGuardDroid", MainLauncher = true, Icon = "@mipmap/icon")]
    

    BroadcastReceiverAttributeName:

    [BroadcastReceiver(Name = "com.sushhangover.proguarddroid.SOBroadcastReceiver")]
    public class SOBroadcastReceiver : BroadcastReceiver
    

    【讨论】:

    • 但这不是只保留我的活动名称吗?我遇到问题的类是从 LinearLayout 继承的 Fragment 和布局组件。我尝试使用 [Activity(Name = “se.initech.blue.MyActivity”)] 按名称注册我的活动,在生成的文件 proguard_project_primary.cfg 中我可以看到我的活动保留了它们的好名字,但其他所有内容仍然是散列...
    • 没关系,我意识到我可以通过[Register(se.initech.foo.MyClass)]在任何类上使用相同的方法
    • @JohanDriessen 对于您不想使用自动 MD5 命名的任何基于 ACW 的类,您需要为每个人提供一个硬编码的 Name。基于 ACW 的类应自动添加到 proguard_project_references.cfg 中。我知道内部类不会自动添加,并且必须手动添加到您项目中的自定义 proguard 文件中,我提交了一个关于此的错误,该错误已无处可去;-(。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2013-03-25
    • 2012-06-13
    • 2012-07-22
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多