zoukankan      html  css  js  c++  java
  • (转)Android Eclipse 代码混淆

    为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译

    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文件中

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

    注意:

    1. 依赖工程的jar 申明:

    1. 以下是邮件发送的实例  

    2. -libraryjars ../KlowerBase/libs/mail-activation.jar  

    3. -libraryjars ../KlowerBase/libs/mail-additionnal.jar  

    4. -libraryjars ../KlowerBase/libs/mail.jar  

      1. 2. 解决邮件发送时报的以异常  

      2.  -keep class javax.mail.**{*;}  

      3.  -keep class com.sun.mail.**{*;}  

      4. -keep class javax.activation.**{*;}  

      5. -keep class org.apache.harmony.**{*;}  

      6. -keep class java.security.**{*;}  

      7. #解决:can't find referenced class java.beans.Beans  

      8. -dontwarn org.apache.commons.collections.BeanMap  

      9. -dontwarn java.beans.**  

      10. #解决:can't find referenced class javax.security.sasl.Sasl  

      11. -dontwarn com.sun.mail.imap.protocol.**  

  • 相关阅读:
    毕业论文格式
    2018.12.14
    关于百度搜索引擎的优缺点
    2018.12.13
    2018.12.12
    2018.12.11
    2108.12.10
    2018.12.9
    2018.12.8
    2018.12.7
  • 原文地址:https://www.cnblogs.com/deepleo/p/android-proguard-project.html
Copyright © 2011-2022 走看看