【Android Studio安裝部署系列】12、Android studio代碼混淆

版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html

概述

爲何須要代碼混淆呢?緣由很簡單,你的apk很容易被反編譯出來,你寫的代碼都會被看到,所以咱們須要在編譯過程當中對代碼進行必定程度的混淆,使得別人不能反編譯不出你的代碼。android

新建一個項目,Android Studio默認關閉代碼混淆開關,在build.gradle文件中,minifyEnabled 開關默認爲false,所以若是須要混淆代碼,需將false改成true,而後在文件proguard-rules.pro添加具體混淆規則。算法

開啓代碼混淆

在文件proguard-rules.pro添加具體混淆規則

經常使用的混淆規則json

#==================================API=================================================
#API裏邊的類,最好都要避免混淆
-keep public class * extends android.app.Fragment
-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.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService

-dontwarn android.annotation
-keepattributes *Annotation*

#=====================保留了全部的Native變量名及類名=====================
-keepclasseswithmembernames class * {
    native <methods>;
}
#某些構造方法不能去混淆
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
#枚舉類不能去混淆
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

#aidl文件不能去混淆.
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keepclassmembers class * {
   public <init>(org.json.JSONObject);
}

#=====================不混淆資源類=====================
-keepclassmembers class **.R$* {
    public static <fields>;
}
#過濾R文件的混淆:
-keep class **.R$* {
    *;
}

#=================================當前項目==================================================
#通常model最好避免混淆(model可有可無,不混淆也沒多大關係)如:
#-keep class com.why.project.helloworld.bean.**{*;}

#===================================其餘常規================================================
#加上這句話,否則會在控制檯中報warning警告【不添加的話比較好,能夠用來驗證簽名是否成功】
#-ignorewarnings
#設置混淆的壓縮比率 0 ~ 7
-optimizationpasses 5
#Aa aA
-dontusemixedcaseclassnames
#混淆後生產映射文件 map 類名->轉化後類名的映射
-verbose
#混淆採用的算法.
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

The same input jar is specified twice 解決辦法

解決方法以下:app

打開 proguard-rules.cfg文件ide

在全部的-libraryjars 前插入 # 變成 #-libraryjars xxxx.jarpost

緣由是build.gradle文件配置了gradle

舊版本:ui

新版本:url

裏面已經添加過jar包,經過 proguard 混淆代碼時默認已經將 lib目錄中的 jar 都已經添加到打包腳本中,因此不須要再次手動添加。

參考資料

Android Studio 代碼混淆

相關文章
相關標籤/搜索