android默认代码混淆,Android SDK默认混淆配置文件
一.介紹
通常情況下編譯后的字節(jié)碼包含了大量調試信息(如源類名/行號等)
混淆代碼就能刪除這些調試信息,并用無意義字符替換所有名字,增加反編譯難度!
ProGuard是一個混淆代碼的開源項目,主要作用如下:
混淆Obfuscate 用無意義字符替換類名/字段名/屬性名/方法名等
壓縮Shrink 移除無用類/字段/屬性/方法
優(yōu)化Optimize 移除無用字節(jié)碼指令
預檢preverify 預檢字節(jié)碼,確??蓤?zhí)行
二.混淆配置
在Android studio/build.gradle中
android {
...
buildTypes {
release {
//開啟混淆/壓縮
minifyEnabled true
//proguard-android.txt是Android SDK默認混淆配置文件,
//proguard-rules.pro是我們自定義混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
1.自定義混淆文件proguard-rules.pro
#基本指令----------------------------------
-printmapping proguardMapping.txt #輸出混淆前后代碼映射關系
-keepattributes Signature #保留泛型
-keepattributes SourceFile, LineNumberTable #拋出異常時保留代碼行號
#移除log代碼
#確保沒有開啟--dontoptimize選項
#默認混淆文件不要用proguard-android.txt,應該用proguard-android-optimize.txt
#assume no side effects假定無效, 標識無效代碼
-assumenosideeffects class android.util.Log {
public static int v(...);
public static int d(...);
public static int i(...);
}
2.Android SDK默認混淆文件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)化, 會導致-assumenosideeffects無法去除log代碼
#如果要用-assumenosideeffects去除log代碼,默認混淆文件應該選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)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的android默认代码混淆,Android SDK默认混淆配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 达梦数据库学习之备份还原
- 下一篇: android sina oauth2.