我如何确保 ProGuard 将我自己的所有 类 保存在 Xamarin.Android 中?
How can I ensure that ProGuard keeps all my own classes in Xamarin.Android?
ProGuard 删除我自己的 classes 时遇到问题。我创建了一个 proguard.cfg,我尝试为它们指定 -keep class,但我只能在使用它们的 md5 散列包指定 classes 时让它工作。
例如,我的应用程序的包名是se.initech.foo,我在子包Framework中有一个class,叫做InfoBox。
所以我希望完全限定的 class 名称是 se.initech.foo.Framework.InfoBox
.
但是在我编译打包和 运行 ProGuard 之后,在应用程序输出日志中我可以看到它找不到 class md586c878b9e5eee7e17627db5c3cd60647.InfoBox
.
如果我添加
-keep class md586c878b9e5eee7e17627db5c3cd60647.** { *; }
到我的 proguard.cfg 文件,它有效。但是,如果我尝试指定真实的 class 名称,即 se.initech.foo.**
甚至 se.initech.foo.Framwork.InfoBox
,它就不起作用。
有没有办法
a) 使用proguard.cfg中classes的真实包名,或者
b) 事先找出哈希值,而不仅仅是检查应用程序输出日志中的崩溃?
Xamarin auto-generates 包含您的项目的 proguard_xamarin.cfg
classes(它将在您的 obj
工件目录中):
proguard_xamarin.cfg
示例:
~~~~
-keep class md52ce486a14f4bcd95899665e9d932190b.** { *; <init>(...); }
-keepclassmembers class md52ce486a14f4bcd95899665e9d932190b.** { *; <init>(...); }
~~~~
它还会创建一个 proguard_project_references.cfg
,其中包含您的项目创建的所有 Android 可调用包装器 (ACW) classes。
如果您不希望 Xamarin 为 auto-create 基于 MD5 的 class 名称,您将需要通过 class 属性手动分配 Name
(~~~~Attribute
), 即:
ActivityAttribute
Name
:
[Activity(Name = "com.sushhangover.proguarddroid.WhosebugActivity", Label = "ProGuardDroid", MainLauncher = true, Icon = "@mipmap/icon")]
BroadcastReceiverAttribute
Name
:
[BroadcastReceiver(Name = "com.sushhangover.proguarddroid.SOBroadcastReceiver")]
public class SOBroadcastReceiver : BroadcastReceiver
ProGuard 删除我自己的 classes 时遇到问题。我创建了一个 proguard.cfg,我尝试为它们指定 -keep class,但我只能在使用它们的 md5 散列包指定 classes 时让它工作。
例如,我的应用程序的包名是se.initech.foo,我在子包Framework中有一个class,叫做InfoBox。
所以我希望完全限定的 class 名称是 se.initech.foo.Framework.InfoBox
.
但是在我编译打包和 运行 ProGuard 之后,在应用程序输出日志中我可以看到它找不到 class md586c878b9e5eee7e17627db5c3cd60647.InfoBox
.
如果我添加
-keep class md586c878b9e5eee7e17627db5c3cd60647.** { *; }
到我的 proguard.cfg 文件,它有效。但是,如果我尝试指定真实的 class 名称,即 se.initech.foo.**
甚至 se.initech.foo.Framwork.InfoBox
,它就不起作用。
有没有办法
a) 使用proguard.cfg中classes的真实包名,或者
b) 事先找出哈希值,而不仅仅是检查应用程序输出日志中的崩溃?
Xamarin auto-generates 包含您的项目的 proguard_xamarin.cfg
classes(它将在您的 obj
工件目录中):
proguard_xamarin.cfg
示例:
~~~~
-keep class md52ce486a14f4bcd95899665e9d932190b.** { *; <init>(...); }
-keepclassmembers class md52ce486a14f4bcd95899665e9d932190b.** { *; <init>(...); }
~~~~
它还会创建一个 proguard_project_references.cfg
,其中包含您的项目创建的所有 Android 可调用包装器 (ACW) classes。
如果您不希望 Xamarin 为 auto-create 基于 MD5 的 class 名称,您将需要通过 class 属性手动分配 Name
(~~~~Attribute
), 即:
ActivityAttribute
Name
:
[Activity(Name = "com.sushhangover.proguarddroid.WhosebugActivity", Label = "ProGuardDroid", MainLauncher = true, Icon = "@mipmap/icon")]
BroadcastReceiverAttribute
Name
:
[BroadcastReceiver(Name = "com.sushhangover.proguarddroid.SOBroadcastReceiver")]
public class SOBroadcastReceiver : BroadcastReceiver