当前位置: 首页 > 知识库问答 >
问题:

Proguard不会混淆类名,只混淆方法

方宏富
2023-03-14

我尝试在android studio中使用Proguard,但Proguard似乎没有混淆类名,例如,我的应用程序结构和配置:

和配置

但当我尝试在应用程序中触发异常时:

ADB控制台中列出了异常:

只有方法被混淆了,MainActivity.class没有

共有2个答案

鲁洋
2023-03-14

我也面临着同样的问题,

在为Gradle更新Android插件后,Proguard停止混淆我的实用程序和其他类文件。

经过几次搜索,我发现Android studio gradle现在使用的是更新版本的Proguard。

根据这个堆栈溢出的答案,其中指出:proGuard会自动添加特定于android/google包的规则。

因此,在我的应用程序中更改了一些规则后,Proguard再次混淆了类名。

旧的proguard规则。赞成的意见:

#support-v4
#@link https://stackoverflow.com/questions/18978706/obfuscate-android-support-v7-widget-gridlayout-issue
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }

#support-v7
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
#https://stackoverflow.com/a/34895791/4754141
-keep class !android.support.v7.view.menu.**
-keep interface android.support.v7.* { *; }

#support design
#@link https://stackoverflow.com/a/31028536
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

#error : Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
#solution : @link https://stackoverflow.com/a/14463528
-dontnote com.google.vending.licensing.ILicensingService
-dontnote **ILicensingService

#updating to Gradle 2.14.1 caused error :         https://stackoverflow.com/q/17141832/4754141
-keepattributes EnclosingMethod

#render script
#@link https://stackoverflow.com/questions/22161832/renderscript-support-library-crashes-on-x86-devices
-keepclasseswithmembernames class * { native <methods>; }
-keep class android.support.v8.renderscript.** { *; }

新的proguard规则。赞成的意见:

#https://stackoverflow.com/a/41901653/4754141
#https://stackoverflow.com/a/23840049/4754141
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
卢黎明
2023-03-14

这是一种预期行为,因为课堂是一种活动!

AndroidM中提到的所有类anifest.xml必须保留它们的名称(活动、服务、提供者、接收者、应用程序、检测)。否则系统将无法找到它们。

Gradle build会自动为您的ProGuard配置生成一些规则来实现这一点。它扫描AndroidManifest。xml并为其中找到的每个类添加规则。

如果要查看使用的所有规则,请将此行添加到ProGuard规则中:

-printconfiguration "build/outputs/mapping/configuration.txt"

它将创建配置。包含所有规则的txt文件。

应该有这样的东西:

# view AndroidManifest.xml #generated:50
-keep class com.github.browep.proguard.MainActivity {
    <init>(...);
}
 类似资料:
  • 我对混淆有问题。为了获得更好的想象力: JAVA代码 本机代码 在我想发布一个混淆版本之前,一切都很好。这个类中的Java类(例如)和方法的名称被proGuard重命名为“a”和“a()”(这可能并不总是相同的),但在本机代码中,方法和类的原始名称保持不变,因为它被硬编码为字符串,如下所示: ...有没有办法动态设置方法名?

  • 我正在努力解决JavaFX应用程序的模糊问题。以本项目为基础: Proguard配置文件:-dontoptimized-dontshrink 有人有JavaFX模糊处理的经验吗?

  • 问题内容: 是否可以仅将ProGuard用于混淆。我不希望ProGuard从我的项目中删除任何类。我打算使用ProGuard只是为了混淆,以防止进行反向工程。 问题答案: 是的,通过指定 您可以在ProGuard手册中找到有关所有配置选项的详细信息。 请注意,缩小和优化可能有助于防止反向工程。

  • 看起来在Android Studio中创建的任何APK文件都可以通过www.limelect轻松反编译。com/android/utility快速反向工程APK文件。 有人成功地在Android Studio中混淆了他们的APK文件吗? 在谷歌,似乎没有人对此发表评论,尽管我试图用谷歌群组向Android工具团队的任何人发送信息。 我能够建立- 文件生成正常,但源Java文件很容易反编译和检查。

  • 我尝试使用。 当我在没有的情况下运行应用程序时,应用程序运行成功。当我用运行我的应用程序时,我的应用程序崩溃。 我认为问题是:将我的类的属性重命名为简短的。 保留my one(静态)类的方法和属性的正确方法是什么?

  • 我有一个项目,下面给出了文件。当我发出命令时,我希望Maven生成一个JAR,其中包含 所有依赖项和 我的代码的模糊版本。 为了拥有一个包含所有依赖项和模糊代码的JAR文件,我可以做些什么呢? 更新1(17.01.2016 19:54 MSK):更改了ProGuard配置,如下所示,但仍然生成一个带有未混淆类文件的JAR。 更新2(17.01.2016 20:29 MSK):失败。最后的消息可以在