代碼混淆打包

常用的混淆設(shè)置


#AgmentWeb——start

-keep class com.just.agentweb.** {

? ? *;

}

-dontwarn com.just.agentweb.**

-keepclassmembers class com.just.agentweb.sample.common.AndroidInterface{ *; }?

#AgmentWeb——end

# glide 的混淆代碼_start

-keep public class * implements com.bumptech.glide.module.GlideModule

-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {

? **[] $VALUES;

? public *;

}

# glide 的混淆代碼_end

# banner 的混淆代碼_start

-keep class com.youth.banner.** {

? ? *;

}

# banner 的混淆代碼_end

#Rxjava+Retrofit+Okhttp

-dontwarn javax.annotation.**

-dontwarn javax.inject.**

# OkHttp3

-dontwarn okhttp3.logging.**

-keep class okhttp3.internal.**{*;}

-dontwarn okio.**

# Retrofit

-dontwarn retrofit2.**

-keep class retrofit2.** { *; }

#-keepattributes Signature-keepattributes Exceptions

# RxJava RxAndroid

-dontwarn sun.misc.**

-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {

? ? long producerIndex;

? ? long consumerIndex;

}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {

? ? rx.internal.util.atomic.LinkedQueueNode producerNode;

}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {

? ? rx.internal.util.atomic.LinkedQueueNode consumerNode;

}

# Gson

-keep class com.google.gson.stream.** { *; }

-keepattributes EnclosingMethod

#保留實體類不被混淆

-keep class com.example.lenovo.daochulvxing.bean.**{*;}#class后面的路徑為自己自己的bean的包名

#design 一般都會用到

-keep class com.android.**{*;}

#butterknife

-keep class butterknife.** { *; }

-dontwarn butterknife.internal.**

-keep class **$$ViewInjector{ *; }

-keepclasseswithmembernames class * {

? ? @butterknife.* <fields>;

}

-keepclasseswithmembernames class * {

? ? @butterknife.* <methods>;

}

#glide-transformations

-keep class jp.wasabeef.glide.transformations.**

############ --------以下通用--------###########

? #指定代碼的壓縮級別

? -optimizationpasses 5

? #包明不混合大小寫

? -dontusemixedcaseclassnames

? #不去忽略非公共的庫類

? -dontskipnonpubliclibraryclasses

? #優(yōu)化? 不優(yōu)化輸入的類文件

? -dontoptimize

? #預(yù)校驗

? -dontpreverify

? #混淆時是否記錄日志

? -verbose

? # 混淆時所采用的算法

? -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

? #保護(hù)注解

-keepattributes *Annotation*

? # 保持哪些類不被混淆

? -keep public class * extends android.app.Fragment

? -keep public class * extends android.app.Activity

? -keep public class * extends android.support.v7.app.AppCompatActivity

? -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 com.android.vending.licensing.ILicensingService

? #如果有引用v4包可以添加下面這行

? -keep public class * extends android.support.v4.app.Fragment

? ## 自定義控件

? -keep class com.everywhere.trip.widget.**{*;}

? #忽略警告

? -ignorewarning

? ##記錄生成的日志數(shù)據(jù),gradle build時在本項目根目錄輸出##

? #apk 包內(nèi)所有 class 的內(nèi)部結(jié)構(gòu)

? #-dump proguard/class_files.txt

? #未混淆的類和成員

? -printseeds proguard/seeds.txt

? #列出從 apk 中刪除的代碼

? -printusage proguard/unused.txt

? #混淆前后的映射

? -printmapping proguard/mapping.txt

? ########記錄生成的日志數(shù)據(jù)帅刊,gradle build時 在本項目根目錄輸出-end######

? #如果引用了v4或者v7包

? -dontwarn android.support.**

? ####混淆保護(hù)自己項目的部分代碼以及引用的第三方j(luò)ar包library-end####

? #保持 native 方法不被混淆

? -keepclasseswithmembernames class * {

? ? ? native <methods>;

? }

? #保持自定義控件類不被混淆

? -keepclasseswithmembers class * {

? ? ? public <init>(android.content.Context, android.util.AttributeSet);

? }

? #保持自定義控件類不被混淆

? -keepclassmembers class * extends android.app.Activity {

? ? public void *(android.view.View);

? }

? -keep public class * extends android.view.View {

? ? ? public <init>(android.content.Context);

? ? ? public <init>(android.content.Context, android.util.AttributeSet);

? ? ? public <init>(android.content.Context, android.util.AttributeSet, int);

? ? ? public void set*(...);

? }

? #保持 Parcelable 不被混淆

? -keep class * implements android.os.Parcelable {

? ? public static final android.os.Parcelable$Creator *;

? }

? #保持 Serializable 不被混淆

? -keepnames class * implements java.io.Serializable

? #保持 Serializable 不被混淆并且enum 類也不被混淆

? -keepclassmembers class * implements java.io.Serializable {

? ? ? static final long serialVersionUID;

? ? ? private static final java.io.ObjectStreamField[] serialPersistentFields;

? ? ? !static !transient <fields>;

? ? ? !private <fields>;

? ? ? !private <methods>;

? ? ? private void writeObject(java.io.ObjectOutputStream);

? ? ? private void readObject(java.io.ObjectInputStream);

? ? ? java.lang.Object writeReplace();

? ? ? java.lang.Object readResolve();

? }

? #保持枚舉 enum 類不被混淆

? -keepclassmembers enum * {

? ? public static **[] values();

? ? public static ** valueOf(java.lang.String);

? }

? -keepclassmembers class * {

? ? ? public void *ButtonClicked(android.view.View);

? }

? #不混淆資源類

? -keepclassmembers class **.R$* {

? ? ? public static <fields>;

? }

? #避免混淆泛型 如果混淆報錯建議關(guān)掉

? #-keepattributes Signature

? #移除Log類打印各個等級日志的代碼肚邢,打正式包的時候可以做為禁log使用打洼,這里可以作為禁止log打印的功能使用,另外的一種實現(xiàn)方案是通過BuildConfig.DEBUG的變量來控制

? #-assumenosideeffects class android.util.Log {

? #? ? public static *** v(...);

? #? ? public static *** i(...);

? #? ? public static *** d(...);

? #? ? public static *** w(...);

? #? ? public static *** e(...);

? #}

? #############################################################################################

? ########################? ? ? ? ? ? ? ? 以上通用? ? ? ? ? ##################################

? #############################################################################################

# 對WebView的處理

? -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, java.lang.String);

? }

? #自定義View

? -keep public class com.everywhere.trip.widget.** {*;}

? #V4下的撰筷,例如Fragment

? # 針對android-support-v4.jar的解決方案android.support.v4.app.Fragment

? -dontwarn android.support.v4.**

? -keep class android.support.v4.**? { *; }

? -keep interface android.support.v4.app.** { *; }

? -keep public class * extends android.support.v4.**

? -keep public class * extends android.app.Fragment

以上為基本混淆代碼 底下為配置

1.build.gradle(model:app)下配置

android--> buildTypes-->release-->下將 minifyEnabled 改為true(默認(rèn)是false)并且添加以下代碼

android.applicationVariants.all { variant ->

? ? ? ? ? ? ? ? variant.outputs.all {

? ? ? ? ? ? ? ? ? ? outputFileName = "EveryWhereTrip_${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }//這段代碼的作用就是可以給自己的apk包改名字

完成后復(fù)制一份release? 并且將release改名為debug

2.在signingConfigs底下添加

signingConfigs {

? ? ? ? debug {

? ? ? ? ? ? storeFile file('app.jks')

? ? ? ? ? ? storePassword "123456"

? ? ? ? ? ? keyAlias "app"

? ? ? ? ? ? keyPassword "123456"

? ? ? ? }

? ? ? ? release {

? ? ? ? ? ? storeFile file('app.jks')

? ? ? ? ? ? storePassword "123456"

? ? ? ? ? ? keyAlias "app"

? ? ? ? ? ? keyPassword "123456"

? ? ? ? }

? ? }

//多渠道打包配置

? ? productFlavors {

? ? ? ? //渠道的渠道號

? ? ? ? xiaomi {}

? ? ? ? qh360 {}

? ? ? ? baidu {}

? ? ? ? wandoujia {}

? ? ? ? huawei {}

? ? }

? ? productFlavors.all {

? ? ? ? flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]

? ? }

//多維度打包或者叫版本差異化打包,這里用不到,名字自己定義就好

? ? flavorDimensions "every"

}

// 獲取當(dāng)前系統(tǒng)時間

def releaseTime() {

? ? return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))

}

在清單文件的Application里面配置

? <meta-data

? ? ? ? ? ? android:name="channel"? //此處的channel在加固時AndroidName會用到

? ? ? ? ? ? android:value="${CHANNEL_VALUE}" />


然后在此打包利用軟件加固即可上線
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末津畸,一起剝皮案震驚了整個濱河市绣张,隨后出現(xiàn)的幾起案子惕蹄,更是在濱河造成了極大的恐慌狂秦,老刑警劉巖灌侣,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竭望,死亡現(xiàn)場離奇詭異绿聘,居然都是意外死亡单雾,警方通過查閱死者的電腦和手機(jī)冗酿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門平委,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驻售,“玉大人嗦明,你說我怎么就攤上這事撩荣⊥指” “怎么了哪审?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虑瀑。 經(jīng)常有香客問我湿滓,道長,這世上最難降的妖魔是什么缴川? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任茉稠,我火速辦了婚禮,結(jié)果婚禮上把夸,老公的妹妹穿的比我還像新娘而线。我一直安慰自己,他們只是感情好恋日,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布膀篮。 她就那樣靜靜地躺著,像睡著了一般岂膳。 火紅的嫁衣襯著肌膚如雪誓竿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天谈截,我揣著相機(jī)與錄音筷屡,去河邊找鬼。 笑死簸喂,一個胖子當(dāng)著我的面吹牛毙死,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喻鳄,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扼倘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了除呵?” 一聲冷哼從身側(cè)響起再菊,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤爪喘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纠拔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秉剑,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年稠诲,在試婚紗的時候發(fā)現(xiàn)自己被綠了秃症。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吕粹,死狀恐怖种柑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匹耕,我是刑警寧澤聚请,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站稳其,受9級特大地震影響驶赏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜既鞠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一煤傍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘱蛋,春花似錦蚯姆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凶伙,卻和暖如春郭毕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背函荣。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工显押, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傻挂。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓乘碑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親踊谋。 傳聞我的和親對象是個殘疾皇子蝉仇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • 轉(zhuǎn)載自: http://blog.csdn.net/u012188405/article/details/5198...
    fjxmyzy閱讀 1,716評論 1 5
  • 1.首先需要在app下的build.gradle下配置旋讹,true表示編譯時會混淆代碼\ 2.在proguard-r...
    Thomas_yy閱讀 6,658評論 0 6
  • 混淆規(guī)則 因為Android是使用Java開發(fā)的殖蚕,所以開發(fā)者可以使用ProGuard對代碼進(jìn)行混淆轿衔。SDK已經(jīng)集成...
    CarlosLynn閱讀 1,531評論 0 0
  • 在離職之際,也沒有啥事可以做睦疫,就自己搗騰下代碼混淆害驹,言歸正傳。 為了防止自己的勞動成果被別人竊取蛤育,混淆代碼能有效防...
    Orz013閱讀 1,018評論 0 0
  • 混淆是對自己勞動成果的一種保護(hù) 今天就總結(jié)一下 我最近這段時間的使用心得 在這里做下記錄(以AS舉例說明) 首先...
    nade_s閱讀 373評論 0 1