Android Studio的代码混淆
2016-02-06 11:37
302 查看
与eclipse不同的是,AS下的混淆文件名为:proguard-rules.pro,放在:app/proguard-rules.pro目录下。
直接打开:app/proguard-rules.pro,然后将如下的东西copy进去。
<pre name="code" class="java">-optimizationpasses 5 # 指定代码的压缩级别
然后在app/build.gradle里面配置:
1、http://my.oschina.net/janson2013/blog/417073
2、http://blog.csdn.net/leeo1010/article/details/49903759
3、http://www.bubuko.com/infodetail-987756.html
直接打开:app/proguard-rules.pro,然后将如下的东西copy进去。
<pre name="code" class="java">-optimizationpasses 5 # 指定代码的压缩级别
-dontusemixedcaseclassnames # 是否使用大小写混合<span style="font-family: Arial, Helvetica, sans-serif;"></span>
-dontskipnonpubliclibraryclasses #不去忽略非公共的库类 -dontpreverify # 混淆时是否做预校验 -verbose # 混淆时是否记录日志 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法
# 保护注解 -keepattributes *Annotation*
# 保持v4、v7类不被混淆 -keep class android.support.v4.**{*;} -keep class android.support.v7.**{*;} # 如果引用了v4或者v7包 -dontwarn android.support.**
# 保持第三方的类不被混淆 -keep class com.umeng.socialize.** { *; } -keep class de.greenrobot.** {*;} -keep class com.android.volley.**{*;} -keep class com.nhaarman.listviewanimations.**{*;} -keep class cn.jpush.**{*;} -keep class com.nineoldandroids.**{*;} -keep class com.umeng.analytics.**{*;} -keep class com.github.ksoichiro.android.observablescrollview.**{*;} -keep class kale.adapter.**{*;} -keep class kale.**{*;} -keep class com.astuetz.**{*;} -keep class uk.co.senab.photoview.**{*;} -keep class com.nostra13.universalimageloader.**{*;} -keep class com.news.lessnet.tools.**{*;} -dontwarn uk.co.senab.photoview.** -keepclassmembers class com.nostra13.universalimageloader.** {*;} -keepclassmembers class ** { @de.greenrobot.event.Subscribe <methods>; } #所有com.news.lessnet的内部类 -keepattributes Exceptions,InnerClasses,... -keep class com.news.lessnet.A{ *; } -keep class com.news.lessnet.A$* { *; } # 如果用到EventBus,这个一定要加上 -keepclassmembers class ** { public void onEvent*(**); } ##记录生成的日志数据,gradle build时在本项目根目录输出## #apk 包内所有 class 的内部结构 -dump class_files.txt #未混淆的类和成员 -printseeds seeds.txt #列出从 apk 中删除的代码 -printusage unused.txt #混淆前后的映射 -printmapping mapping.txt -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 com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { native <methods>; } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.content.Context { public void *(android.view.View); public void *(android.view.MenuItem); } -keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } -keep public class mypackage.MyBean { public void setMyProperty(int); public int getMyProperty(); } #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。? #gson -keep class com.google.gson.**{*;} -keepattributes Signature # Gson specific classes -keep class sun.misc.Unsafe { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { *; } #保持 Serializable 不被混淆并且enum 类也不被混淆 -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; !private <fields>; !private <methods>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class **.R$* { public static <fields>; } -keep public class * { public protected *; } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #所有实体类所在包 -keep class com.news.lessnet.bean.**{ *; } #友盟的混淆代码 -dontshrink -dontoptimize -dontwarn com.google.android.maps.** -dontwarn android.webkit.WebView -dontwarn com.umeng.** -dontwarn com.tencent.weibo.sdk.** -dontwarn com.facebook.** -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 public class javax.** -keep public class android.webkit.** -keep class com.facebook.** -keep class com.umeng.scrshot.** -keep public class com.tencent.** {*;} -keep class com.umeng.socialize.sensor.** -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{*;} -keep public class [your_pkg].R$*{ public static final int *; } -dontwarn org.apache.http.** -dontwarn android.net.http.AndroidHttpClient -dontwarn com.google.android.gms.** -dontwarn com.android.volley.toolbox.** -dontwarn cn.jpush.** -dontwarn com.google.** -keep class com.google.gson.** {*;} -dontwarn com.google.** -keep class com.google.protobuf.** {*;} #如下是友盟的更新服务用到的混淆规则 -keepclassmembers class * { public <init>(org.json.JSONObject); } # 以下类过滤不混淆 -keep public class * extends com.umeng.** # 以下包不进行过滤 -keep class com.umeng.** { *; } #如果使用了双向反馈功能,还需要添加下面代码,以免UMeng自定义的UI被混淆 -keep public class com.umeng.fb.ui.ThreadView { } -keep public class com.news.lessnet.R$*{ public static final int *; }
然后在app/build.gradle里面配置:
buildTypes { /*debug { // 显示Log buildConfigField "boolean", "LOG_DEBUG", "true" versionNameSuffix "-debug" minifyEnabled true zipAlignEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 4000 }*/ release { // 显示Log buildConfigField "boolean", "LOG_DEBUG", "true" //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }参考资料:
1、http://my.oschina.net/janson2013/blog/417073
2、http://blog.csdn.net/leeo1010/article/details/49903759
3、http://www.bubuko.com/infodetail-987756.html
相关文章推荐
- Android Studio注释模板介绍
- Android应用开发之代码混淆
- Android实用图文教程之代码混淆、第三方平台加固加密、渠道分发
- 关于Android Studio 和 Gradle的那些事儿
- 收藏各种技术源码
- Android Studio 使用 Gradle 打包 Jar-IT蓝豹
- Android Studio android.view.InflateException: Error inflating class com.baidu.mapapi.map.MapView
- Android Studio集成ShareSDK免费短信平台
- Cordova与Android之一 Activity跳转
- Android Studio 利用Gradle打包SDK jar文件
- Android Studio配置签名
- Android ADT 中的项目迁移到 Android Studio出现编码乱码问题
- 项目总结android studio——assets
- android EventBus
- android 学习笔记之一
- android studio关于隐藏标题栏崩溃问题
- Android Studio导入第三方类库的方法
- Android Studio快捷键
- 【非程序问题】building gradle project info一直卡住的解决方法
- Android Studio 运行java程序