Android代码混淆的写法总结

 更新时间:2018年02月27日 09:15:43   作者:翻滚吧李博  
本篇文章主要介绍了Android代码混淆的写法总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Apk文件被反编译出来能被获取到里面的代码。对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度。混淆可以起到压缩Apk,混淆文件,预检,优化的作用。

1. 使用方式,在gradle文件中设置minifyEnabled为true即可开启混淆

buildTypes {
    release {
      minifyEnabled ture //是否开启代码混淆
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

混淆内容在proguard-android.txt文件中写。

2. 混淆设置参数

-optimizationpasses 4 代码混淆的压缩比例,值介于0-7

-dontusemixedcaseclassnames 混淆后类型都为小写

-dontskipnonpubliclibraryclasses 不去忽略非公共的库类

-dontoptimize 不优化输入的类文件

-dontpreverify 不做预校验的操作

-ignorewarnings 忽略警告

-verbose 混淆时是否记录日志

-keepattributes Annotation 保护注解

-printmapping proguardMapping.txt 生成原类名和混淆后的类名的映射文件

-optimizations !code/simplification/cast,!field/ ,!class/merging/ 指定混淆是采用的算法

3. 保持不被混淆的设置

保持实体类不混淆

-keep class 你的实体类所在的包.** { *; }

保持四大组件,Application,Fragment不混淆

-keep public class * extends android.app.Application
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-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.preference.Preference

保持 native 方法不被混淆

-keepclasseswithmembernames class * { 
  native <methods>;
}

保持枚举enum类不被混淆

-keepclassmembers enum * { 
  public static **[] values();
  public static ** valueOf(java.lang.String);
}

保持 Parcelable 不被混淆

-keep class * implements android.os.Parcelable {  
  public static final android.os.Parcelable$Creator *;
}

保持第三方包不混淆,比如这里用到微信、支付宝支付第三方

#支付宝混淆
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}

#微信支付混淆
-keep class com.tencent.mm.opensdk.** {*;}
-keep class com.tencent.wxop.** {*;}
-keep class com.tencent.mm.sdk.** {*;}

4. 完整混淆示例:

#指定代码的压缩级别
-optimizationpasses 5

#包名不混合大小写
-dontusemixedcaseclassnames

#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses

 #优化 不优化输入的类文件
-dontoptimize

 #预校验
-dontpreverify

 #混淆时是否记录日志
-verbose

#忽略警告
-ignorewarning

#保护注解
-keepattributes *Annotation*

-keep public class * extends android.app.Application
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-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.preference.Preference

-keepclasseswithmembernames class * {
  native <methods>;
}
-keepclassmembers class * extends android.app.Activity {
  public void *(android.view.View);
}
-keepclassmembers enum * {
  public static **[] values();
  public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
 public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
  *;
}
-keep class * extends android.view.View{*;}
-keep class * extends android.app.Dialog{*;}
-keep class * implements java.io.Serializable{*;}

#butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

#volley
-dontwarn com.android.volley.**
-keep class com.android.volley.**{*;}

#fastjson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*;}

#happy-dns
-dontwarn com.qiniu.android.dns.**
-keep class com.qiniu.android.dns.**{*;}

#okhttp
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.**{*;}

-keep class okio.**{*;}

-keep class android.net.**{*;}
-keep class com.android.internal.http.multipart.**{*;}
-keep class org.apache.**{*;}

-keep class com.qiniu.android.**{*;}

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

-keep class com.squareup.wire.**{*;}

-keep class com.ant.liao.**{*;}

#腾讯
-keep class com.tencent.**{*;}

-keep class u.aly.**{*;}

#ImageLoader
-keep class com.nostra13.universalimageloader.**{*;}

#友盟
-dontwarn com.umeng.**
-keep class com.umeng.**{*;}

#pulltorefresh
-keep class com.handmark.pulltorefresh.** { *; }
-keep class android.support.v4.** { *;}
-keep public class * extends android.support.v4.**{
 public protected *;}
-keep class android.support.v7.** {*;}

自己试着用一个简单的项目加入混淆,打个包试试效果吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android Studio用genymotion运行后小图标无法显示问题

    Android Studio用genymotion运行后小图标无法显示问题

    这篇文章主要介绍了Android Studio用genymotion运行后小图标无法显示的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android编写简易文件管理模块

    Android编写简易文件管理模块

    这篇文章主要为大家详细介绍了Android编写简易文件管理模块的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Android中butterknife的使用与自动化查找组件插件详解

    Android中butterknife的使用与自动化查找组件插件详解

    这篇文章主要给大家介绍了关于Android中butterknife的使用与自动化查找组件插件的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • Android 三行代码实现高斯模糊效果

    Android 三行代码实现高斯模糊效果

    这篇文章主要介绍了Android 三行代码实现高斯模糊效果,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Android视频处理之动态时间水印效果

    Android视频处理之动态时间水印效果

    这篇文章主要A为大家详细介绍了Android视频处理之动态时间水印效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Android隐藏顶部状态栏所遇到的问题

    Android隐藏顶部状态栏所遇到的问题

    本文给大家分享两种隐藏状态栏的方法及在实现的过程中遇到的坑,下面在本文中给大家做个总结,希望对大家学习android顶部状态栏知识有所帮助
    2016-11-11
  • Cocos2d-x 3.0多线程异步加载资源实例

    Cocos2d-x 3.0多线程异步加载资源实例

    手机游戏,即便是休闲类的小游戏,往往也涉及大量纹理资源、音视频资源、文件读写以及网络通信,处理的稍有不甚就会出现画面卡顿,交互不畅的情况
    2014-04-04
  • Android实现省市区三级联动

    Android实现省市区三级联动

    这篇文章主要为大家详细介绍了Android实现省市区三级联动,Spinner实现省市区的三级联动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Flutter中http请求抓包的完美解决方案

    Flutter中http请求抓包的完美解决方案

    这篇文章主要给大家介绍了关于Flutter中http请求抓包的完美解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Android自定义View实现跟随手指移动的小兔子

    Android自定义View实现跟随手指移动的小兔子

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动的小兔子,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论