根据此链接: http://developer.android.com/guide/developing/tools/proguard.html,他们声明:
ProGuard使您的应用程序更难以进行逆向工程,当您的应用程序使用对安全性敏感的功能时(例如,在许可您的应用程序时),使用它非常重要。
但那不是真的!我正在使用ADT 17预览版4中包含的最新Proguard(4.7)。我通过添加
导出我的应用程序时使用proguardproguard.config=proguard-android.txt
进入我的project.properties(proguard-android.txt只是ADT 17中包含的默认设置)。
但我可以轻松地对我的apk进行反向工程,使用以下步骤将其恢复为原始代码:
使用apk工具提取apk。
使用smali将.smali文件转换为.dex(您将smali指向包含.smali文件的文件夹,通常位于/ src / com / [公司名称] / [appname中])
使用dex2jar将生成的.dex文件转换为.jar
使用jd-gui查看生成的.jar文件
所以我的问题是:我做错了吗?或者,在混淆代码时,proguard是完全没用的吗?
答案 0 :(得分:1)
如果您使用的是android.support。*兼容库,则这可能是问题的根源。 将以下行添加到proguard配置文件中:
-dontwarn android.support.**
-keep class android.support.** { *; }
诊断proguard问题的最简单方法是使用apache ant构建应用程序。您将在stderr中看到所有警告和错误。
这适用于所有使用动态类加载,反射和依赖于API版本的同一类的多个实现的库。