我试图混淆我的包名称,包括我使用的库之一。
我在我的 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"我没有得到任何结果,看来这两个规则repackageclasses
and flattenpackagehierarchy
似乎被忽略(我也测试过仅使用其中一行)。知道我错过了什么吗?
对于库模块,构建系统似乎默认添加“-keeppackagenames”,这将导致包名称不被混淆。
您可以尝试使用此解决方法:
Add "-keeppackagenames !**" to disable -keeppackagenames being injected by the build system.
Via: https://code.google.com/p/android/issues/detail?id=67587 https://code.google.com/p/android/issues/detail?id=67587
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)