android - Proguard 混淆不起作用

标签 android obfuscation proguard

我试图混淆我的包名称,包括我使用过的库之一。

我在我的 gradle 文件中使用这个构建配置:

buildTypes {
    debug {
        versionNameSuffix "-Development"
        debuggable true
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    #...

这是我的混淆文件:

# Butterknife
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }
-keepnames class * { @butterknife.InjectView *;}

# OrmLite uses reflection
-keepclassmembers class com.j256.** { *; }
-keep class my.package.name.database.** { *; }
-keep class com.j256.**

#test
-repackageclasses 'qqq1'
-flattenpackagehierarchy 'qqq2'
-allowaccessmodification
-forceprocessing

我正在使用此命令转储所有 dexed 类:

7z x -aoa my.apk classes.dex && dexdump classes.dex | grep "Class desc" | less

如果我只是 grep for "qqq" 我仍然会看到所有完整的包名称我没有得到任何结果所以似乎 repackageclassesflattenpackagehierarchy 似乎被忽略了(我也测试过只使用其中一行)。知道我错过了什么吗?

最佳答案

对于库模块,构建系统似乎默认添加“-keeppackagenames”,这将导致包名称不被混淆。

您可以尝试使用此解决方法:

Add "-keeppackagenames !**" to disable -keeppackagenames being injected by the build system.

通过:https://code.google.com/p/android/issues/detail?id=67587

关于android - Proguard 混淆不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424391/

相关文章:

java - 在SD卡中添加多张图片

android - 如何混淆两个android项目?

java - j2objc 不尊重死代码报告

android - Firebase身份验证取决于自定义用户类型

java - 选择状态后使用 notifyDataSetChanged 更新 City Spinner

android - 下载监听器不工作

c# - 我怎样才能混淆我的 C# 代码,所以它不能那么容易地被混淆?

java - com.apple.eawt.Application 混淆后无法正常工作

javascript - 防止代码被用户执行

android - Flutter Jitsi 在 Release模式下停止