Android:proguard 不会混淆源代码
Posted
技术标签:
【中文标题】Android:proguard 不会混淆源代码【英文标题】:Android: proguard is not obfuscating the source 【发布时间】:2013-01-16 23:02:27 【问题描述】:我在 project.properties 中启用了 proguard:
proguard.config=proguard.cfg
我的 proguard.cfg 没有禁用混淆。但没有任何东西被混淆。
我使用
运行项目构建蚂蚁释放。
有铃声响起吗?
-优化通过 5 -dontusemixedcase类名 -dontskipnonpubliclibraryclasses -dontpreverify -详细 -优化 !code/simplification/arithmetic,!field/,!class/merging/
-保持公共类 * 扩展 android.app.Activity -保持公共类 * 扩展 android.app.Application -keep public class * 扩展 android.app.Service -保持公共类 * 扩展 android.content.BroadcastReceiver -保持公共类 * 扩展 android.content.ContentProvider -保持公共类 * 扩展 android.app.backup.BackupAgentHelper -keep public class * 扩展 android.preference.Preference -保持公共类com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * 本国的 ;
-keepclasseswithmembers class * 公共(android.content.Context,android.util.AttributeSet);
-keepclasseswithmembers class * 公共(android.content.Context,android.util.AttributeSet,int);
-keepclassmembers class * extends android.app.Activity public void *(android.view.View);
-keepclassmembers 枚举 * 公共静态 *[] 值(); 公共静态 * valueOf(java.lang.String);
-keep class * 实现 android.os.Parcelable public static final android.os.Parcelable$Creator *;
【问题讨论】:
如何检查是否有任何内容被混淆?你可以在这里发布你的 proguard.cfg 吗?您是否在 ant 输出中看到 proguard 正在处理您的文件? 用 proguard.cfg 编辑了问题。我只是在源代码中抛出一个异常并观察堆栈跟踪。有点愚蠢,但仍然有效。而且我注意到应该混淆的类不是。此外,在构建时,当构建经过“混淆”阶段时,我什么也看不到。 【参考方案1】:您应该确保您的项目已针对您的 Android SDK 进行了配置:
android update project -p MyProjectDirectory
从 Android SDK r20 开始,ProGuard 配置文件分为几个部分,在project.properties
中指定:
proguard.config=$sdk.dir/tools/proguard/proguard-android.txt:proguard-project.txt
简短的项目特定配置在proguard-project.txt
中定义(不再在 proguard.cfg 中,就像在旧版本的 SDK 中一样)。 SDK 文档在这方面可能并不完全是最新的。
当您运行 ant release
时,您应该会看到来自 ProGuard 的一些日志记录输出。
【讨论】:
【参考方案2】:@Thanks Danail,今天我刚刚克服了这个问题。只是详细说明
android:debuggable
是否可以调试应用程序,即使在用户模式下在设备上运行时也是如此——如果可以,"true"
,如果不能,则为“false”。默认值为“false”。
更多详情您可以访问
http://www.vogella.com/tutorials/AndroidDebugging/article.html
【讨论】:
【参考方案3】:这比我想象的要简单得多:我们(在 manifest.xml 文件中)启用了
android:debuggable="true"
哦。
【讨论】:
以上是关于Android:proguard 不会混淆源代码的主要内容,如果未能解决你的问题,请参考以下文章
从 Android Studio 构建替代 buildType 时,ProGuard 不会混淆
Android Proguard - dontobfuscate 不会禁用混淆