Proguard混淆不起作用



我试图混淆我的包名,包括我使用的一个库。

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

buildTypes {
    debug {
        versionNameSuffix "-Development"
        debuggable true
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    #...
这是我的proguard文件:
# 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

我使用这个命令来转储所有索引类:

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

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

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

你可以尝试使用这个变通方法:

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

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

这个问题花了很长时间才解决。黄油刀规则打破了一切。我的解决方案是从主页上删除那个,并且一切都如预期的那样工作。

以下是固定规则:

# 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

相关内容

  • 没有找到相关文章

最新更新