這篇文章將為大家詳細(xì)講解有關(guān)Android代碼混淆如何實(shí)現(xiàn),小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了長(zhǎng)壽免費(fèi)建站歡迎大家使用!
Apk文件被反編譯出來(lái)能被獲取到里面的代碼。對(duì)于這種情況,我們可以對(duì)項(xiàng)目代碼進(jìn)行混淆,隨機(jī)生成難理解的類名,方法名,讓代碼難以閱讀,加大功能被盜取的難度?;煜梢云鸬綁嚎sApk,混淆文件,預(yù)檢,優(yōu)化的作用。
1. 使用方式,在gradle文件中設(shè)置minifyEnabled為true即可開(kāi)啟混淆
buildTypes { release { minifyEnabled ture //是否開(kāi)啟代碼混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
混淆內(nèi)容在proguard-android.txt文件中寫。
2. 混淆設(shè)置參數(shù)
-optimizationpasses 4 代碼混淆的壓縮比例,值介于0-7
-dontusemixedcaseclassnames 混淆后類型都為小寫
-dontskipnonpubliclibraryclasses 不去忽略非公共的庫(kù)類
-dontoptimize 不優(yōu)化輸入的類文件
-dontpreverify 不做預(yù)校驗(yàn)的操作
-ignorewarnings 忽略警告
-verbose 混淆時(shí)是否記錄日志
-keepattributes Annotation 保護(hù)注解
-printmapping proguardMapping.txt 生成原類名和混淆后的類名的映射文件
-optimizations !code/simplification/cast,!field/ ,!class/merging/ 指定混淆是采用的算法
3. 保持不被混淆的設(shè)置
保持實(shí)體類不混淆
-keep class 你的實(shí)體類所在的包.** { *; }
保持四大組件,Application,F(xiàn)ragment不混淆
-keep public class * extends android.app.Application -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends android.support.v4.app.Fragment -keep public class * extends android.app.Fragment -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.preference.Preference
保持 native 方法不被混淆
-keepclasseswithmembernames class * { native; }
保持枚舉enum類不被混淆
-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
保持第三方包不混淆,比如這里用到微信、支付寶支付第三方
#支付寶混淆 -keep class com.alipay.android.app.IAlixPay{*;} -keep class com.alipay.android.app.IAlixPay$Stub{*;} -keep class com.alipay.android.app.IRemoteServiceCallback{*;} -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;} -keep class com.alipay.sdk.app.PayTask{ public *;} -keep class com.alipay.sdk.app.AuthTask{ public *;} #微信支付混淆 -keep class com.tencent.mm.opensdk.** {*;} -keep class com.tencent.wxop.** {*;} -keep class com.tencent.mm.sdk.** {*;}
4. 完整混淆示例:
#指定代碼的壓縮級(jí)別 -optimizationpasses 5 #包名不混合大小寫 -dontusemixedcaseclassnames #不去忽略非公共的庫(kù)類 -dontskipnonpubliclibraryclasses #優(yōu)化 不優(yōu)化輸入的類文件 -dontoptimize #預(yù)校驗(yàn) -dontpreverify #混淆時(shí)是否記錄日志 -verbose #忽略警告 -ignorewarning #保護(hù)注解 -keepattributes *Annotation* -keep public class * extends android.app.Application -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends android.support.v4.app.Fragment -keep public class * extends android.app.Fragment -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.preference.Preference -keepclasseswithmembernames class * { native; } -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class **.R$* { *; } -keep class * extends android.view.View{*;} -keep class * extends android.app.Dialog{*;} -keep class * implements java.io.Serializable{*;} #butterknife -keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; } #volley -dontwarn com.android.volley.** -keep class com.android.volley.**{*;} #fastjson -dontwarn com.alibaba.fastjson.** -keep class com.alibaba.fastjson.**{*;} #happy-DNS -dontwarn com.qiniu.android.dns.** -keep class com.qiniu.android.dns.**{*;} #okhttp -dontwarn com.squareup.okhttp.** -keep class com.squareup.okhttp.**{*;} -keep class okio.**{*;} -keep class android.net.**{*;} -keep class com.android.internal.http.multipart.**{*;} -keep class org.apache.**{*;} -keep class com.qiniu.android.**{*;} -keep class android.support.annotation.**{*;} -keep class com.squareup.wire.**{*;} -keep class com.ant.liao.**{*;} #騰訊 -keep class com.tencent.**{*;} -keep class u.aly.**{*;} #ImageLoader -keep class com.nostra13.universalimageloader.**{*;} #友盟 -dontwarn com.umeng.** -keep class com.umeng.**{*;} #pulltorefresh -keep class com.handmark.pulltorefresh.** { *; } -keep class android.support.v4.** { *;} -keep public class * extends android.support.v4.**{ public protected *;} -keep class android.support.v7.** {*;}
關(guān)于“Android代碼混淆如何實(shí)現(xiàn)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。