我正在尝试在我的Android项目上启用proguard代码混淆。多年来我看到很多问题,但很多线程已经很老了,很难说它们对我来说有多重要。
我无法让Eclipse生成一个默认的proguard配置文件,所以我一直试图把它拼凑在一起而且很痛苦(我从中获得的构建几乎立即崩溃并且看起来它模糊了第三方的某些元素我在应用程序中使用的库)。我可以理解生成的文件现在可能是完美的,但似乎它至少可以在处理项目库时采取一些措施。
以下是我尝试启用proguard的步骤。
1确保我的Eclipse和Android SDK完全是最新的。
2编辑project.properties,取消注释
proguard.config = $ {sdk.dir} /tools/proguard/proguard-android.txt:proguard-project.txt
3由于pro guard-project.txt不存在,立即构建失败。 (这是我希望它会生成一个)
4我在proguard-project.txt创建了我自己的pro guard.config文件(内容如下所示)
-injars bin / classes -outjars bin / classes-processed.jar -libraryjars libs / FlurryAgent.jar:libs / GoogleAdMobAdsSdk-4.1.1.jar -libraryjars libs / commons-codec-1.4.jar -libraryjars libs / commons-io-2.1.jar -libraryjars libs / commons-logging-1.1.1.jar -libraryjars libs / httpclient-4.1.2.jar -libraryjars libs / httpclient-cache-4.1.2.jar -libraryjars libs / httpcore-4.1.3.jar -libraryjars libs / httpmime-4.1.2.jar -libraryjars libs / mapquest-android-sdk-1.0.3.jar -libraryjars libs / oranjestad-notifications-1.0.jar
-dontwarn org.apache。** -dontwarn org.ietf。*
-keepnames org.apache。**
-dontpreverify -repackageclasses'' -allowaccessmodification - 优化!代码/简化/算术 -keepattributes Annotation
-keep public class * extends android.app.Activity -keep public class *扩展android.app.Application -keep public class *扩展android.app.Service -keep public class *扩展了android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider
-keep public class * extends android.view.View { public(android.content.Context); public(android.content.Context,android.util.AttributeSet); public(android.content.Context,android.util.AttributeSet,int); public void set *(...); }
-keepclasseswithmembers class * { public(android.content.Context,android.util.AttributeSet); }
-keepclasseswithmembers class * { public(android.content.Context,android.util.AttributeSet,int); }
-keepclassmembers class * extends android.content.Context {public void *(android.view.View); public void *(android.view.MenuItem); }
-keepclassmembers类*实现android.os.Parcelable { static android.os.Parcelable $ Creator CREATOR; }
-keepclassmembers class * .R $ { 公共静态; }
5此时我的项目已构建,但由于某些类别强制执行日志记录异常而失败。这让我回到第3步,我希望基于eclipse库依赖项生成合理的proguard-project.txt。显然,我创造的是不对的。
答案 0 :(得分:1)
更新SDK后,您还必须确保更新项目本身:
android update project --path MyAndroidProjectDirectory
在最近的Android SDK中,这应创建proguard-project.txt
。
答案 1 :(得分:0)
除非你的设置有问题,否则创建新的Android项目,同时写下proguard配置文件。所以只需设置虚拟项目并检查其文件夹 - 它应该在那里。将其复制回当前项目并根据需要进行调整。