代碼混淆打包

常用的混淆設(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容