android的Proguard混淆
来源:互联网 发布:小米5怎么设置4g网络 编辑:程序博客网 时间:2024/04/28 11:38
这几天在混淆代码过程中遇到好几个坑,所幸堵了《app研发录》这本书,帮了我的大忙。
现记录先后遇到的几个坑:
1. butterknife,在混淆时注意是6.0还是7.0,混淆方式不一样;
2. 实体bean不要混淆,这会影响到JSON的使用;
3. 内部类尽量独立出来,无法独立单独的class,要标记不要混淆;
4. 友盟sdk,打包时一直提醒几千个警告,目前不知怎么解决
其他方面,下面这篇博客也有很大帮助:
Android Proguard原理
第三方库的混淆可以参考:
各框架库混淆
另外,记录下我的proguard内容,很多部分是拜《App研发录》的帮助,有兴趣的可以看看这本书(非广告):
#---------------------------------------------基本设置------------------------------------------------optimizationpasses 5 #代码混淆压缩比,0-7之间,默认5-dontusemixedcaseclassnames #混淆时不使用大小写混合,混淆后类名小写-dontskipnonpubliclibraryclasses #指定不去忽略非公共的类-dontskipnonpubliclibraryclassmembers #指定不去忽略非公共的类的成员-dontpreverify #不做预校验,android一般不用,加快速度-verbose #生成映射文件-printmapping proguardMapping.txt #映射文件名称-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #混淆算法,一般不变-keepattributes *Annotation* #Annotation不混淆,对于JSON实体映射重要,例如FastJson/Gson-keepattributes Signature #避免混淆泛型,对于JSON实体映射重要-keepattributes SourceFile,LineNumberTable #抛出异常时保留代码行号#保留所有本地native方法-keepclasseswithmembernames class * { native <methods>;}#保留继承自Activity、Application类的子类,可能被外部调用-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class * extends android.view.View-keep public class com.android.vending.licensing.ILicensingService#-------------------------------------------v4/v7/Fragment-------------------------------------------dontwarn android.support.v7.**-keep class android.support.v7.**{*;}-keep interface android.support.v7.app.**{*;}-keep public class * extends android.support.v7.**-keep public class * extends android.app.Fragment#保留Activity中方法参数是view的方法,使onClick不受影响-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}#枚举类不被混淆-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}#自定义控件(继承自View)不被混淆-keep public class * extends android.view.View{ *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int);}#Parcelable序列化类不混淆-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}#Serializable序列化类不混淆-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjextStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}#R类及资源不混淆-keep class **.R$*{ *;}#带有回调函数onXXXEvent的不混淆-keepclassmembers class * { void *(**On*Event);}#保留实体类和成员不被混淆-keep public class com.qtest.journal.bean.**{# public void set*(***);# public *** get*();# public *** is*(); *;}#WebView处理-keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); public boolean *(android.webkit.WebView, java.lang.String);}-keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.webView, java.lang.String);}#内嵌类#Javascript处理#反射处理#release包去除敏感verbose/debug的log日志信息-dontobfuscate #prevent from changing class name and method name etc...-assumenosideeffects class android.util.Log{ public static int d(...); public static int v(...);}#第三方jar:#----------------------------------------------Gson混淆----------------------------------------------keep class sun.misc.Unsafe { *; }#-------------------------------------------butterknife----------------------------------------------keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewInjector { *; } #butterknife6.0#-keep class **$$ViewBinder { *; } #butterknife7.0-keepclasseswithmembernames class * { @butterknife.* <fields>;}-keepclasseswithmembernames class * { @butterknife.* <methods>;}#---------------------------------------------Volley-------------------------------------------------keep class com.android.volley.** {*;}-keep class com.android.volley.toolbox.** {*;}-keep class com.android.volley.Response$* { *; }-keep class com.android.volley.Request$* { *; }-keep class com.android.volley.RequestQueue$* { *; }-keep class com.android.volley.toolbox.HurlStack$* { *; }-keep class com.android.volley.toolbox.ImageLoader$* { *; }#---------------------------------------------友盟sdk-----------------------------------------------# -dontshrink# -dontoptimize -dontwarn com.google.android.maps.** -dontwarn android.webkit.WebView -dontwarn com.umeng.** -dontwarn com.tencent.weibo.sdk.** -dontwarn com.facebook.** -keep public class javax.** -keep public class android.webkit.** -dontwarn android.support.v4.** -keep enum com.facebook.** -keepattributes Exceptions,InnerClasses,Signature -keepattributes *Annotation* -keepattributes SourceFile,LineNumberTable -keep public interface com.facebook.** -keep public interface com.tencent.** -keep public interface com.umeng.socialize.** -keep public interface com.umeng.socialize.sensor.** -keep public interface com.umeng.scrshot.** -keep public class com.umeng.socialize.* {*;} -keep class com.facebook.** -keep class com.facebook.** { *; } -keep class com.umeng.scrshot.** -keep public class com.tencent.** {*;} -keep class com.umeng.socialize.sensor.** -keep class com.umeng.socialize.handler.** -keep class com.umeng.socialize.handler.* -keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;} -keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;} -keep class im.yixin.sdk.api.YXMessage {*;} -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;} -dontwarn twitter4j.** -keep class twitter4j.** { *; } -keep class com.tencent.** {*;} -dontwarn com.tencent.** -keep public class com.umeng.soexample.R$*{ public static final int *; } -keep public class com.umeng.soexample.R$*{ public static final int *; } -keep class com.tencent.open.TDialog$* -keep class com.tencent.open.TDialog$* {*;} -keep class com.tencent.open.PKDialog -keep class com.tencent.open.PKDialog {*;} -keep class com.tencent.open.PKDialog$* -keep class com.tencent.open.PKDialog$* {*;} -keep class com.sina.** {*;} -dontwarn com.sina.** -keep class com.alipay.share.sdk.** { *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; } -keep class com.linkedin.** { *; } -keepattributes Signature -dontwarn com.linkedin.platform.internals.**
0 0
- android的Proguard混淆
- android 混淆器的使用 proguard.flags
- android 混淆器的使用 proguard.flags
- android的apk使用proguard混淆
- Android 混淆proguard的实现(图文)
- Android proguard混淆编译的问题
- android的apk使用proguard混淆
- android.mk混淆编译proguard的问题
- Android的代码混淆(ProGuard)
- Android 编程下的代码混淆proguard
- android proguard 混淆 的一点心得
- Android Studio的Proguard(代码混淆)
- android 代码混淆proguard
- Android Java混淆(ProGuard)
- Android Java混淆(ProGuard)
- android 混淆器(ProGuard)
- Proguard混淆器Android
- android 混淆器(ProGuard)
- 深度学习(五十六)tensorflow项目构建流程
- 图解try catch 中有return,finally执行吗?什么时候执行?
- Android异步处理三:Handler+Looper+MessageQueue深入详解
- android视频播放器Vitamio的使用
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
- android的Proguard混淆
- 使用requireJS加载不符合AMD规范的js文件:shim的使用方式和实现原理
- JS中最经典的全局变量和局部变量问题
- Getting start with OCMock in you unit test
- Plugin with id 'com.android.application' not found.
- c/c++ 友元函数友元类,及const作用
- 动态规划和贪心算法问题(一)
- SEO上下线营销思维:二者兼备实现“落地”
- 年度最具特色生活类APP