Android 代碼混淆的實(shí)現(xiàn),基本內(nèi)容

  1. 開啟混淆代碼
    在app module下的gradle文件中
android {
    ...
  
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

默認(rèn)minifyEnable是false宙址,我們只需要改為true就開啟了混淆靶溜。這里只需要在release的時(shí)候開啟混淆即可炬太,代碼混淆會(huì)加長(zhǎng)APK的生成時(shí)間.如果這時(shí)候打包锭部,安裝凌受,如果引入了其他第三方的代碼的話决摧,不出意外時(shí)會(huì)crash的涣脚,雖然proguard-android.txt文件中已經(jīng)包含了一些不混淆的指令了示辈,那些事系統(tǒng)常規(guī)的指令,對(duì)于自定義的一些指令就需要自己在app下的proguard-rules.pro文件中去定義遣蚀。
2.具體實(shí)現(xiàn)代碼
①.基本指令:包含了壓縮級(jí)別矾麻,忽略警告纱耻,混淆警告等;

-dontwarn java.awt.**
-dontwarn javax.swing.**
-dontwarn java.rmi.**
-dontwarn org.apache.tools.ant.**
-dontwarn org.zeroturnaround.javarebel.ClassEventListener
-dontwarn org.jaxen.**
-dontwarn com.sun.org.apache.xml.internal.utils.PrefixResolver

類似于上邊這樣的 -dontwarn 包名,控制臺(tái)哪個(gè)包報(bào)警告就用上邊的指令去書寫
也可以這樣寫 - dontwarn 包名* 代表這個(gè)包下所有的文件
②固定不混淆的代碼:包含繼承四大組件中的內(nèi)容险耀,support包弄喘,view相關(guān)、序列化相關(guān)甩牺、R文件蘑志、枚舉、native方法等贬派;
這個(gè)看自己項(xiàng)目實(shí)現(xiàn):
我自己做了一些整理急但,可以直接復(fù)制上去的

//json
-keep class com.google.gson.** {*;}

#---------------------------------與js互相調(diào)用的類------------------------
#在這下面寫與js互相調(diào)用的類,沒(méi)有就去掉這句話搞乏!
-keep class 包名.類名_ViewBinding{*;}
-keep class 包名.類名{*;}

#---------------------------------webview------------------------------------
-keepclassmembers class fqcn.of.javascript.interface.for.Webview {
   public *;
}
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
    public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, jav.lang.String);
}


# #  ######## greenDao混淆  ##########
# # -------------------------------------------
-keep class de.greenrobot.dao.** {*;}
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
    public static Java.lang.String TABLENAME;
}
-keep class **$Properties


#-ButterKnife 7.0
 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
  @butterknife.* <fields>;
 }
 -keepclasseswithmembernames class * {
 @butterknife.* <methods>;
 }


#---------------------------------自定義View的類------------------------
#在這下面寫自定義View的類的類波桩,沒(méi)有就去掉這句話!
  -keep class 包名.類名{*;}
  -keep class 包名.類名{*;}
  -keep public class * extends android.view.View { ####
          *** get*();
          void set*(***);
          public <init>(android.content.Context);
          public <init>(android.content.Context, android.util.AttributeSet);
          public <init>(android.content.Context, android.util.AttributeSet, int);
      }

#保持基本組件不被混淆
 -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
#保持 Google 原生服務(wù)需要的類不被混淆
 -keep public class com.google.vending.licensing.ILicensingService
 -keep public class com.android.vending.licensing.ILicensingService
#保持 native 方法不被混淆
 -keepclasseswithmembernames class * { ####
         native <methods>;
     }
#     保留指定格式的構(gòu)造方法不被混淆
-keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
#保留在Activity中的方法參數(shù)是view的方法(避免布局文件里面onClick被影響)
-keepclassmembers class * extends android.app.Activity {
            public void *(android.view.View);
    }
#保持枚舉 enum 類不被混淆
-keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
#保持R(資源)下的所有類及其方法不能被混淆
-keep class **.R$* { *; }
#保持 Parcelable 序列化的類不被混淆(注:aidl文件不能去混淆)
-keep class * implements android.os.Parcelable {
        public static final android.os.Parcelable$Creator *;
    }
#需要序列化和反序列化的類不能被混淆(注:Java反射用到的類也不能被混淆)
-keepnames class * implements java.io.Serializable

#保持 BaseAdapter 類不被混淆
-keep public class * extends android.widget.BaseAdapter { *; }

#保持 CusorAdapter 類不被混淆
-keep public class * extends android.widget.CusorAdapter{ *; }


#javaBean 類取消混淆
-keep class com.example.tisingrain.ganbumanager_android.model.**{*;}

-keep class net.sqlcipher.** { *; }
-keep class net.sqlcipher.database.* { *; }

 #greendao 3
  -keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
  public static java.lang.String TABLENAME;
  } -keep class **$Properties

大概就這些请敦,具體的一些基本指令去看這篇文章Android代碼混淆 - 簡(jiǎn)書 (jianshu.com)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镐躲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子侍筛,更是在濱河造成了極大的恐慌匀油,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勾笆,死亡現(xiàn)場(chǎng)離奇詭異敌蚜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)窝爪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門弛车,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蒲每,你說(shuō)我怎么就攤上這事纷跛。” “怎么了邀杏?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵贫奠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我望蜡,道長(zhǎng)唤崭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任脖律,我火速辦了婚禮谢肾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘小泉。我一直安慰自己芦疏,他們只是感情好冕杠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酸茴,像睡著了一般分预。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上薪捍,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天噪舀,我揣著相機(jī)與錄音,去河邊找鬼飘诗。 笑死与倡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的昆稿。 我是一名探鬼主播纺座,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼溉潭!你這毒婦竟也來(lái)了净响?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喳瓣,失蹤者是張志新(化名)和其女友劉穎馋贤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畏陕,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡配乓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惠毁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犹芹。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鞠绰,靈堂內(nèi)的尸體忽然破棺而出腰埂,到底是詐尸還是另有隱情,我是刑警寧澤蜈膨,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布屿笼,位于F島的核電站,受9級(jí)特大地震影響翁巍,放射性物質(zhì)發(fā)生泄漏驴一。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一曙咽、第九天 我趴在偏房一處隱蔽的房頂上張望蛔趴。 院中可真熱鬧挑辆,春花似錦例朱、人聲如沸孝情。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)箫荡。三九已至,卻和暖如春渔隶,著一層夾襖步出監(jiān)牢的瞬間羔挡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工间唉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绞灼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓呈野,卻偏偏與公主長(zhǎng)得像低矮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子被冒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容