gpt4 book ai didi

android - 我需要在 proguard.cfg 中放入什么来启用混淆?

转载 作者:行者123 更新时间:2023-11-29 00:44:42 24 4
gpt4 key购买 nike

我在应用程序的 proguard.cfg 中有以下代码(是的,我在 build.properties< 中也有 proguard.config=proguard.cfg/):

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
native <methods>;
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

然而,我惊讶地看到来自 Android Market 的错误报告在堆栈跟踪中包含Unobfuscated 符号。

我知道我上传了 ProGuard 导出版本,所以我错过了什么?

最佳答案

如果您的堆栈跟踪包括在 --keep 中指定的未混淆的类名和方法在你的 proguard.cfg 中声明,那么答案就在你的问题的正文中......

另请注意,由于 reflection 带来的挑战, ProGuard 自动保留以下内容:

  • Class.forName("SomeClass")
  • SomeClass.class
  • SomeClass.class.getField("someField")
  • SomeClass.class.getDeclaredField("someField")
  • SomeClass.class.getMethod("someMethod", new Class[] {})
  • SomeClass.class.getMethod("someMethod", new Class[] { A.class })
  • SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })
  • SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})
  • SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })
  • SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })
  • AtomicIntegerFieldUpdater.newUpdater(SomeClass.class, "someField")
  • AtomicLongFieldUpdater.newUpdater(SomeClass.class, "someField")
  • AtomicReferenceFieldUpdater.newUpdater(SomeClass.class, SomeType.class, "someField")

还有 note如果您以某种方式提供 ProGuard 生成的文件 proguard/mapping.txt,该工具 ReTrace可以取消混淆一切。

简而言之,您无需在 proguard.cfg 中添加任何内容即可启用混淆。默认选项就足够了。理论上,您可能希望删除一些默认的 --keep 选项,但 ProGuard 的文档明确指出:

For proper results, you should at least be somewhat familiar with the code that you are processing. Obfuscating code that performs a lot of reflection may require trial and error, especially without the necessary information about the internals of the code.

关于android - 我需要在 proguard.cfg 中放入什么来启用混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7005034/

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