Proguard obfuscating does not work
我正在尝试混淆我的软件包名称,包括我使用过的库之一。
我在gradle文件中使用此构建配置:
1 2 3 4 5 6 7 8 | buildTypes { debug { versionNameSuffix"-Development" debuggable true runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } #... |
这是我的保护文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 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 |
我正在使用以下命令转储所有已删除的类:
1 | 7z x -aoa my.apk classes.dex && dexdump classes.dex | grep"Class desc" | less |
如果我只是对" qqq "进行grep命令,我仍然会看到所有完整的软件包名称,但我没有得到任何结果,因此似乎规则
哇,这花了很长时间才能解决。刀刀规则打破了一切。我的解决方案是在首页中复制该代码,以及一切如何按预期进行。
以下是固定规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # Butterknife -keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; } -keepclasseswithmembernames class * { @butterknife.* <fields>; } -keepclasseswithmembernames class * { @butterknife.* <methods>; } # OrmLite uses reflection -keepclassmembers class com.j256.** { *; } -keep class my.package.name.database.** { *; } -keep class com.j256.** #test -repackageclasses 'qqq1' -flattenpackagehierarchy 'qqq2' -allowaccessmodification -forceprocessing |
对于库模块,似乎构建系统默认情况下会添加"-keeppackagenames ",这将导致软件包名称不被混淆。
您可以尝试使用此替代方法:
1 | Add"-keeppackagenames !**" to disable -keeppackagenames being injected by the build system. |
通过:https://code.google.com/p/android/issues/detail?id = 67587