前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android混淆

android混淆

作者头像
xiangzhihong
发布2018-01-30 10:47:02
1.3K0
发布2018-01-30 10:47:02
举报
文章被收录于专栏:向治洪向治洪

为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤:

1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来

2. 最重要的就是在proguard-project.txt添加混淆的申明了:

 a. 把所有你的jar包都申明进来,例如:  -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. 将你不需要混淆的部分申明进来,因为有些类经过混淆会导致程序编译不通过,如下: -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里边的类,最好都要避免混淆 有些很特殊的,例如百度地图,你需要添加以下申明: -keep class com.baidu.** { *; }  -keep class vi.com.gdi.bgl.android.**{*;} 根据我的经验,一般model最好避免混淆(model无关紧要,不混淆也没多大关系)如: -keep class com.bank.pingan.model.** { *; } 下面在贴上关于Umeng分享统计的避免混淆的申明 -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, 最后一步,打签名包测试,如果有问题,仔细看下Log也许有得类不能混淆,那么你得加入到proguard-project.txt文件中

-------以上就是混淆代码的全过程了

最后贴上proguard-project.txt的全部代码:

代码语言:java
复制
 # 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 *;  
 }  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档