zoukankan      html  css  js  c++  java
  • 详细讲解Android对自己的应用代码进行混淆加密防止反编译

    1.查看项目中有没有proguard.cfg。

    2.如果没有那就看看这个文件中写的什么吧,看完后将他复制到你的项目中。

    -optimizationpasses 5

    -dontusemixedcaseclassnames

    -dontskipnonpubliclibraryclasses

    -dontpreverify

    -verbose

    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    -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 com.android.vending.licensing.ILicensingService

     

    -keepclasseswithmembernames class * {

        native ;

    }

     

    -keepclasseswithmembers class * {

        public (android.content.Context, android.util.AttributeSet);

    }

     

    -keepclasseswithmembers class * {

        public (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 *;

    }

    3.复制到项目中后打开project.properties文件

    4.打开后在项目中加上一句话:proguard.config=proguard.cfg

    5.这样就开始按照正常的签名对自己的应用进行签名,生成后的apk经过反编译后就会和源代码有很大的不一样,不过这一步你会遇到很多问题,根本就签名不成功。例如:①如果工程引入了android-support-v4的jar类库,那么在工程打包混淆时,就会出现报错提示你:You may need to specify additional library jars (using '-libraryjars')。②引用第三方包等问题

    6.那就详细讲解5中出现的问题

    如果工程引入了android-support-v4的jar类库,那你就在proguard.cfg里的后面,添加如下内容:

    -libraryjars /android-support-v4.jar

    -dontwarn android.support.v4.**

    -keep class android.support.v4.** { *; }

    -keep public class * extends android.support.v4.**

    -keep public class * extends android.app.Fragment

    然后你再打包看看,应该可以正常生成apk安装包了。

    如果出现:"类1 can't find referenced class 类2" 字面上的意思就是类1找不到类2的引用;它会建议你:"You may need to specify additional library jars (using '-libraryjars').";

    需要使用-libraryjars加上项目中使用到的第三方库就OK了。

    例如:-libraryjars /android-support-v4.jar

    注意:这里引用方式是当前工程的根目录(也可以配置其他目录),也就是说,你要把第三方jar放到当前目录下,否则就会警告说找不到jar文件!

    如果出现: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator,碰到这样的情况,可以使用-dontwarn com.xx.yy.**,不对错误提出警告。

    注意:使用这个方式的话,要确保自己没有用到这个库里面的类!否则就会抛ClassNotFoundException!

    如果在工程中确实用到了该类,采用上面方式还是不行。这个时候就要再增加一项:-keep class com.xx.yy.** { *;},让当前类不混淆。

    总结:

    对于引用第三方包的情况,可以采用下面方式避免打包出错:

    -libraryjars /aaa.jar

    -dontwarn com.xx.yy.**

    -keep class com.xx.yy.** { *;}

    最后打包成功,祝君成功混淆加密!

    7.附上完整的proguard.cfg

    -optimizationpasses 5

    -dontusemixedcaseclassnames

    -dontskipnonpubliclibraryclasses

    -dontpreverify

    -verbose

    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

     

    -dontwarn com.slidingmenu.**

    -keep class com.slidingmenu.** { *;}

     

    -libraryjars /libs/android-support-v4.jar

    -dontwarn android.support.v4.**

    -keep class android.support.v4.** { *; }

    -keep public class * extends android.support.v4.**

    -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 com.android.vending.licensing.ILicensingService

     

    -keepclasseswithmembernames class * {

        native ;

    }

     

    -keepclasseswithmembers class * {

        public (android.content.Context, android.util.AttributeSet);

    }

     

    -keepclasseswithmembers class * {

        public (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 *;

    }

    转自http://blog.sina.com.cn/s/blog_6e334dc70101d5sh.html

  • 相关阅读:
    洛谷 P1278 单词游戏 【状压dp】
    洛谷 P1854 花店橱窗布置 【dp】
    洛谷 P2258 子矩阵
    洛谷 P3102 [USACO14FEB]秘密代码Secret Code 【区间dp】
    洛谷U14200 Changing 题解 【杨辉三角】
    洛谷P3933 Chtholly Nota Seniorious 【二分 + 贪心 + 矩阵旋转】
    P3932 浮游大陆的68号岛 【线段树】
    洛谷P1273 有线电视网 【树上分组背包】
    NOI2013 矩阵游戏 【数论】
    洛谷P1268 树的重量 【构造 + 枚举】
  • 原文地址:https://www.cnblogs.com/wangheblog/p/4317290.html
Copyright © 2011-2022 走看看