一、混淆
步骤1:在build.gradle(app)文件中添加
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
minifyEnabled默认为false改为true表示混淆, proguard-android.txt是SDK自带的文件无需修改,proguard-rules.pro便是混淆需要编辑的策略文件。
二、修改proguard-rules.pro文件
#-----------------混淆配置设定------------------------------------------------------------------------
-optimizationpasses5 #指定代码压缩级别
-dontusemixedcaseclassnames #混淆时不会产生形形色色的类名
-dontskipnonpubliclibraryclasses
#指定不忽略非公共类库
-dontpreverify #不预校验,如果需要预校验,是-dontoptimize
-ignorewarnings #屏蔽警告
-verbose #混淆时记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#优化
#-----------------不需要混淆第三方类库------------------------------------------------------------------
-dontwarn android.support.v4.** #去掉警告
-keep class android.support.v4.** { *;
} #过滤android.support.v4
-keep interface android.support.v4.app.** { *;
}
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
-keep class org.apache.**{*;}
#过滤commons-httpclient-3.1.jar
-keep class org.greenrobot.**{*;}
#过滤eventbus-3.0.0.jar
-keep class com.google.gson.**{*;}
#过滤gson-2.7.jar
-keep class com.google.inject.**{*;} #过滤guice-3.0-no_aop.jar等
-keep class roboguice.**{*;}
#过滤roboguice-2.0.jar等
-keep class com.ndktools.javamd5.**{*;}
#过滤JavaMD5.jar等
-keep class javax.inject.**{*;} #过滤javax.inject-1.jar等
-keep class javax.annotation.**{*;} #过滤jsr305-1.3.9.jar等
-keep class grgbanking.rcc.tools.**{*;} #过滤rcctools.jar等
-keep class com.android.volley.**{*;} #过滤volley.jar等
#-----------------不需要混淆系统组件等-------------------------------------------------------------------
-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.preference.Preference
-keep public classcom.android.vending.licensing.ILicensingService
-keep class com.client.volley.bean.**{*;}
#过滤掉自己编写的实体类
#----------------保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在------------------------------------
-keepclasseswithmembernamesclass * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet,int);
}
按照这个模板,替换你自己不需要混淆的外部jar包和系统jar包。
三、发布
点击Build-->genericsigned APK
第一次需要点击【Create new】弹出密钥设置界面
Certificate至少需要设置一项,设置好后点击【ok】,便开始打apk包,并且在工程目录下app文件夹下生成app-release.apk,这就是混淆后发布的apk
参考:http://blog.csdn.net/ttccaaa/article/details/47687241