zoukankan      html  css  js  c++  java
  • 利用android proguard混淆代码

    网上虽然有很多相关博客,不过貌似都不是最新版的。。于是百度+谷歌+github上的开源demo,终于成功的配置了android proguard。

    最新版的android sdk的默认配置已经可以满足我们的大多数要求了,我们只需要按照sdk的提示就可以配置大部分的必须配置,然后再加上一些基本的

    自定义配置就行了。

      第一步,取消project.properties里面关于proguard的注释。这一步可以开启proguard。根据网上的博客,

    最好加上sdk的路径。

    sdk.dir=D:/Java/IDE/adt-bundle-windows-x86_64-20130219/sdk
    proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
    

      

    这样一来默认的配置文件也会被包括进来。

    第二步,保存被AndroidManifest.xml调用或者webview的类。这是因为proguard会移除没有被调用的代码。

    -keepclassmembers class fqcn.of.javascript.interface.for.webview {
       public *;
    }
    -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   
    

      

    第三步,第三方类库。如果第三方库用到其他的类,但是找不到类,包警告错误,

    可以通过

    -dontwarn org.springframework.**
    -dontwarn java.**
    -dontwarn com.alibaba.fastjson.**
    -dontwarn javax.**
    -dontwarn org.junit.Test

    来忽略掉这些其他包引用了的但是没用的类

    #第三方类库
    -keep class android.** {*;}
    -keep class com.jeremyfeinstein.slidingmenu.lib.** {*;}
    -keep class com.actionbarsherlock.** {*;}
    -keep class com.lidroid.xutils.** {*;}
    

      

    第四步,其实这一步可以代替上面所有的keep语句,彻底将误删的概率降到最低。

    那就是保留所有具有公有访问权限的类和其公共成员。

    -keepclasseswithmembers class *{
    	public *;
    }
    

      

    第五步,在github上的开源proguarddemo上学来的,删除Log代码

    -assumenosideeffects class android.util.Log {
        public static *** e(...);
        public static *** w(...);
        public static *** wtf(...);
        public static *** d(...);
        public static *** v(...);
    }
    

      然后跑了一下,成功混淆并且可以运行。。。

  • 相关阅读:
    【Todo】Java线程面试题 Top 50 (转载)
    【Todo】秒杀系统 & 乐观锁 & Nginx反向代理
    【Todo】C++和Java里面的浮点数及各种数字表示
    asp.net操作word的表格
    Android消息推送(二)--基于MQTT协议实现的推送功能
    单点更新线段树 RMQ
    英语月结
    AppWidget应用(二)---PendingIntent 之 getActivity
    2 WAN 和1 Evo/3g Routeros PCC 方法负载平衡
    Android 网络权限配置
  • 原文地址:https://www.cnblogs.com/Mr-Nobody/p/3537396.html
Copyright © 2011-2022 走看看