gpt4 book ai didi

android - 我如何确保 ProGuard 在 Xamarin.Android 中保留我自己的所有类?

转载 作者:行者123 更新时间:2023-11-30 00:42:18 25 4
gpt4 key购买 nike

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

例如,我的应用程序的包名称是 se.initech.foo,我在子包 Framework 中有一个类,名为 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) 事先找出哈希值,而不仅仅是通过检查应用程序输出日志中的崩溃?

最佳答案

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

proguard_xamarin.cfg 示例:

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

它还会创建一个 proguard_project_references.cfg,其中包含您的项目创建的所有 Android 可调用包装器 (ACW) 类。

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

ActivityAttribute 名称:

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

BroadcastReceiverAttribute 名称:

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

关于android - 我如何确保 ProGuard 在 Xamarin.Android 中保留我自己的所有类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com