android默认代码混淆,Android SDK默认混淆配置文件
一.介紹
通常情況下編譯后的字節(jié)碼包含了大量調(diào)試信息(如源類名/行號(hào)等)
混淆代碼就能刪除這些調(diào)試信息,并用無意義字符替換所有名字,增加反編譯難度!
ProGuard是一個(gè)混淆代碼的開源項(xiàng)目,主要作用如下:
混淆Obfuscate 用無意義字符替換類名/字段名/屬性名/方法名等
壓縮Shrink 移除無用類/字段/屬性/方法
優(yōu)化Optimize 移除無用字節(jié)碼指令
預(yù)檢preverify 預(yù)檢字節(jié)碼,確保可執(zhí)行
二.混淆配置
在Android studio/build.gradle中
android {
...
buildTypes {
release {
//開啟混淆/壓縮
minifyEnabled true
//proguard-android.txt是Android SDK默認(rèn)混淆配置文件,
//proguard-rules.pro是我們自定義混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
1.自定義混淆文件proguard-rules.pro
#基本指令----------------------------------
-printmapping proguardMapping.txt #輸出混淆前后代碼映射關(guān)系
-keepattributes Signature #保留泛型
-keepattributes SourceFile, LineNumberTable #拋出異常時(shí)保留代碼行號(hào)
#移除log代碼
#確保沒有開啟--dontoptimize選項(xiàng)
#默認(rèn)混淆文件不要用proguard-android.txt,應(yīng)該用proguard-android-optimize.txt
#assume no side effects假定無效, 標(biāo)識(shí)無效代碼
-assumenosideeffects class android.util.Log {
public static int v(...);
public static int d(...);
public static int i(...);
}
2.Android SDK默認(rèn)混淆文件proguard-android.txt
AndroidSDK\tools\proguard\proguard-android.txt
\proguard-android-optimize.txt
其中proguard-android是不開啟優(yōu)化的配置文件
proguard-android-optimize.tx是開啟優(yōu)化的配置文件
#1.在proguard-android-optimize.txt中——————————————————————————————
#開啟優(yōu)化
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* -optimizationpasses 5 -allowaccessmodification ......剩下部分同proguard-android.txt
#2.在proguard-android.txt中———————————————————————————————————————
#不開啟優(yōu)化, 會(huì)導(dǎo)致-assumenosideeffects無法去除log代碼
#如果要用-assumenosideeffects去除log代碼,默認(rèn)混淆文件應(yīng)該選proguard-android-optimize.txt
-dontoptimize
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontpreverify
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * {
native ;
}
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static ;
}
-dontwarn android.support.**
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep ;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep ;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep (...);
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的android默认代码混淆,Android SDK默认混淆配置文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 达梦数据库学习之备份还原
- 下一篇: String类中不同拼接方式