Android 混淆代碼詳解及實(shí)例
為了防止自己的勞動(dòng)成果被別人竊取,混淆代碼能有效防止被反編譯,下面來(lái)總結(jié)以下混淆代碼的步驟:
1. 大家也許都注意到新建一個(gè)工程會(huì)看到項(xiàng)目下邊有這樣proguard-project.txt一個(gè)文件,這個(gè)對(duì)混淆代碼很重要,如果你不小心刪掉了,沒(méi)關(guān)系,從其他地方拷貝一個(gè)過(guò)來(lái)
2. 最重要的就是在proguard-project.txt添加混淆的申明了:
a. 把所有你的jar包都申明進(jìn)來(lái),例如:
-libraryjars libs/apns_1.0.6.jar
-libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so
-libraryjars libs/armeabi/liblocSDK4.so
-libraryjars libs/baidumapapi_v2_3_1.jar
-libraryjars libs/core.jar
-libraryjars libs/gesture-imageview.jar
-libraryjars libs/gson-2.0.jar
-libraryjars libs/infogracesound.jar
-libraryjars libs/locSDK_4.0.jar
-libraryjars libs/ormlite-android-4.48.jar
-libraryjars libs/ormlite-core-4.48.jar
-libraryjars libs/universal-image-loader-1.9.0.jar
b. 將你不需要混淆的部分申明進(jìn)來(lái),因?yàn)橛行╊?lèi)經(jīng)過(guò)混淆會(huì)導(dǎo)致程序編譯不通過(guò),如下:
-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
-keep public class * extends android.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService
--以上都是API里邊的類(lèi),最好都要避免混淆
有些很特殊的,例如百度地圖,你需要添加以下申明:
-keep class com.baidu.** { *; }
-keep class vi.com.gdi.bgl.android.**{*;}
根據(jù)我的經(jīng)驗(yàn),一般model最好避免混淆(model無(wú)關(guān)緊要,不混淆也沒(méi)多大關(guān)系)如:
-keep class com.bank.pingan.model.** { *; }
下面在貼上關(guān)于Umeng分享統(tǒng)計(jì)的避免混淆的申明
-dontwarn android.support.v4.**
-dontwarn org.apache.commons.net.**
-dontwarn com.tencent.**
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context);
}
-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**
-keep class com.facebook.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-keep public class [your_pkg].R$*{
public static final int *;
}
3.以上工作完成,混淆工作就完成了一大半了,最后需要做的就是在project.properties文件中加上你的混淆文件申明了,如下:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
4. OK, 最后一步,打簽名包測(cè)試,如果有問(wèn)題,仔細(xì)看下Log也許有得類(lèi)不能混淆,那么你得加入到proguard-project.txt文件中
-------以上就是混淆代碼的全過(guò)程了
最后貼上proguard-project.txt的全部代碼:
# To enable ProGuard in your project, edit project.properties # to define the proguard.config property as described in that file. # # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in ${sdk.dir}/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the ProGuard # include property in project.properties. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keepattributes *Annotation* -keepattributes Signature -libraryjars libs/apns_1.0.6.jar -libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so -libraryjars libs/armeabi/liblocSDK4.so -libraryjars libs/baidumapapi_v2_3_1.jar -libraryjars libs/core.jar -libraryjars libs/gesture-imageview.jar -libraryjars libs/gson-2.0.jar -libraryjars libs/infogracesound.jar -libraryjars libs/locSDK_4.0.jar -libraryjars libs/ormlite-android-4.48.jar -libraryjars libs/ormlite-core-4.48.jar -libraryjars libs/universal-image-loader-1.9.0.jar -keep class com.baidu.** { *; } -keep class vi.com.gdi.bgl.android.**{*;} -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 -keep public class * extends android.support.v4.** -keep public class com.android.vending.licensing.ILicensingService -keep class com.google.gson.stream.** { *; } -keep class com.google.gson.examples.android.model.** { *; } -keep class com.uuhelper.Application.** { *; } -keep class net.sourceforge.zbar.** { *; } -keep class com.google.android.gms.** { *; } -keep class com.bank.pingan.model.** { *; } -keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper -keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager -keep class com.android.vending.licensing.ILicensingService -keep class android.support.v4.** { *; } -keep class org.apache.commons.net.** { *; } -keep class com.tencent.** { *; } -keep class com.umeng.** { *; } -keep class com.umeng.analytics.** { *; } -keep class com.umeng.common.** { *; } -keep class com.umeng.newxp.** { *; } -keep class com.j256.ormlite.** { *; } -keep class com.j256.ormlite.android.** { *; } -keep class com.j256.ormlite.field.** { *; } -keep class com.j256.ormlite.stmt.** { *; } -dontwarn android.support.v4.** -dontwarn org.apache.commons.net.** -dontwarn com.tencent.** -keepclasseswithmembernames class * { native <methods>; } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclasseswithmembers class * { public <init>(android.content.Context); } -dontshrink -dontoptimize -dontwarn com.google.android.maps.** -dontwarn android.webkit.WebView -dontwarn com.umeng.** -dontwarn com.tencent.weibo.sdk.** -dontwarn com.facebook.** -keep enum com.facebook.** -keepattributes Exceptions,InnerClasses,Signature -keepattributes *Annotation* -keepattributes SourceFile,LineNumberTable -keep public interface com.facebook.** -keep public interface com.tencent.** -keep public interface com.umeng.socialize.** -keep public interface com.umeng.socialize.sensor.** -keep public interface com.umeng.scrshot.** -keep public class com.umeng.socialize.* {*;} -keep public class javax.** -keep public class android.webkit.** -keep class com.facebook.** -keep class com.umeng.scrshot.** -keep public class com.tencent.** {*;} -keep class com.umeng.socialize.sensor.** -keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;} -keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;} -keep class im.yixin.sdk.api.YXMessage {*;} -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;} -keep public class [your_pkg].R$*{ public static final int *; }
2015-05-25更新
1. 依賴(lài)工程的jar 申明:
以下是郵件發(fā)送的實(shí)例
-libraryjars ../KlowerBase/libs/mail-activation.jar
-libraryjars ../KlowerBase/libs/mail-additionnal.jar
-libraryjars ../KlowerBase/libs/mail.jar
2. 解決郵件發(fā)送時(shí)報(bào)的以異常
-keep class javax.mail.**{*;} -keep class com.sun.mail.**{*;} -keep class javax.activation.**{*;} -keep class org.apache.harmony.**{*;} -keep class java.security.**{*;}
#解決:can't find referenced class java.beans.Beans -dontwarn org.apache.commons.collections.BeanMap -dontwarn java.beans.** #解決:can't find referenced class javax.security.sasl.Sasl -dontwarn com.sun.mail.imap.protocol.**
通過(guò)本文希望能幫助 Android開(kāi)發(fā)應(yīng)用使用混淆代碼的朋友,謝謝大家對(duì)本站的支持!
- 詳解Android的反編譯和代碼混淆
- Android 實(shí)現(xiàn)代碼混淆的實(shí)例
- Android studio 混淆+打包+驗(yàn)證是否成功
- AndroidApk混淆編譯時(shí),報(bào)告java.io.IOException...錯(cuò)誤解決辦法
- Android studio利用gradle打jar包并混淆的方法詳解
- Android Studio多渠道批量打包及代碼混淆
- android app進(jìn)行代碼混淆實(shí)例詳解
- Android實(shí)用圖文教程之代碼混淆、第三方平臺(tái)加固加密、渠道分發(fā)
- Android應(yīng)用開(kāi)發(fā)之代碼混淆
- ANDROID應(yīng)用程序的混淆打包分享
- android4.0混淆XmlPullParser報(bào)錯(cuò)原因分析解決
- proguar在Android混淆中的用法
相關(guān)文章
android Imageview 圖片覆蓋具體實(shí)現(xiàn)
android Imageview 圖片覆蓋實(shí)現(xiàn)及注意事項(xiàng)如下,感興趣的朋友可以參考下哈2013-06-06Android?RecyclerChart其它圖表繪制示例詳解
這篇文章主要為大家介紹了Android?RecyclerChart其它圖表繪制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12android從系統(tǒng)圖庫(kù)中取圖片的實(shí)例代碼
這篇文章主要介紹了android從系統(tǒng)圖庫(kù)中取圖片的方法,涉及Android讀取及選擇圖片等相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Android通過(guò)startService播放背景音樂(lè)
這篇文章主要介紹了Android通過(guò)startService播放背景音樂(lè)簡(jiǎn)單示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12Android 超詳細(xì)深刨Activity Result API的使用
這篇文章主要介紹了Android開(kāi)發(fā)中Activity Result API的使用,掌握了它以后你就可以放棄startActivityForResult了,感興趣的朋友一起來(lái)看看吧2022-03-03Android快速實(shí)現(xiàn)斷點(diǎn)續(xù)傳的方法
這篇文章主要為大家詳細(xì)介紹了Android快速實(shí)現(xiàn)斷點(diǎn)續(xù)傳的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07基于Android XML解析與保存的實(shí)現(xiàn)
本篇文章小編為大家介紹,基于Android XML解析與保存的實(shí)現(xiàn)。需要的朋友參考下2013-04-04