一、混淆
步驟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