一 开启混淆

minifyEnabled true 设置为true

并在项目根目录建立proguard-android.txt的文件

android {

buildTypes {debug {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'jniDebuggable truesigningConfig signingConfigs.debug}release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'signingConfig signingConfigs.debug}}

}

二 混淆逻辑配置

proguard-android.txt

1混淆的功能

proguard包括四个功能,shrinker(压缩), optimizer(优化),obfuscator(混淆),preverifier(预校验),他们的作用分别是:

shrink: 检测并移除没有用到的类,变量,方法和属性;

optimize: 优化代码,非入口节点类会加上private/static/final, 在字节码级别执行优化,让应用运行的更快。。

obfuscate: 增大反编译难度,类和类成员会被随机命名,除非用keep保护。

preverify: 预校验代码是否符合Java1.6或者更高的规范.

2关闭方法

3 如果开启混淆,简单的例子

这里只写一些简单的obfuscate

保留混淆包 -keep

-keep class com.unity3d.player.* { *; }

-keep class com.unity3d.player.*  # 一颗星只保持本包的类名(不包含内容)

-keep class com.unity3d.player.** # 二颗星表示保持本包和子包下的类名(不包含内容)

保留混淆的类 -keepclasseswithmembers  //因为开启混淆后, 不被引用的方法会被丢弃掉

-keepclasseswithmembers class com.*****.cn.UnityPlayerActivity{public void commLogin(java.lang.String);}

4 注意事项

1,jni方法不可混淆,因为这个方法需要和native方法保持一致;

-keepclasseswithmembernamesclass*{# 保持native方法不被混淆    native ;}

2,反射用到的类不混淆(否则反射可能出现问题);

3,AndroidMainfest中的类不混淆,所以四大组件和Application的子类和Framework层下所有的类默认不会进行混淆。自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的;

4,与服务端交互时,使用GSON、fastjson等框架解析服务端数据时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象;

5,使用第三方开源库或者引用其他第三方的SDK包时,如果有特别要求,也需要在混淆文件中加入对应的混淆规则;

6,有用到WebView的JS调用也需要保证写的接口方法不混淆,原因和第一条一样;

7,Parcelable的子类和Creator静态成员变量不混淆,否则会产生Android.os.BadParcelableException异常;

-keepclass*implementsAndroid.os.Parcelable{# 保持Parcelable不被混淆          publicstaticfinalAndroid.os.Parcelable$Creator *;}

8,使用enum类型时需要注意避免以下两个方法混淆,因为enum类的特殊性,以下两个方法会被反射调用。

-keepclassmembersenum* {publicstatic**[] values();publicstatic**valueOf(java.lang.String);  }

5 资料参考:

1.http://proguard.sourceforge.net/ 
2.http://developer.android.com/tools/help/proguard.html

三 垃圾代码制造

android.applicationVariants.all { variant ->androidJunkCode.configMap.put(variant.name, {packageBase = "com.abc.game"  //生成java类根包名packageCount = 30 //生成包数量activityCountPerPackage = 3 //每个包下生成Activity类数量otherCountPerPackage = 50  //每个包下生成其它类的数量methodCountPerClass = 20  //每个类下生成方法数量resPrefix = "color_"  //生成的layout、drawable、string等资源名前缀drawableCount = 300  //生成drawable资源数量stringCount = 300  //生成string数量})
}

反编译后的效果

混淆项目的示例下载地址

hx_code_test.zip-Android文档类资源-CSDN下载

根目录的build.gradle中:

buildscript {repositories {mavenCentral()}dependencies {classpath "com.github.qq549631030:android-junk-code:1.1.2"}
}

app目录的build.gradle模块中:

apply plugin: 'com.android.application'
apply plugin: 'android-junk-code'androidJunkCode {variantConfig {release {//变体名称,如果没有设置productFlavors就是buildType名称,如果有设置productFlavors就是flavor+buildType,例如(freeRelease、proRelease)packageBase = "cn.hx.plugin.ui"  //生成java类根包名packageCount = 30 //生成包数量activityCountPerPackage = 3 //每个包下生成Activity类数量excludeActivityJavaFile = false //是否排除生成Activity的Java文件,默认false(layout和写入AndroidManifest.xml还会执行),主要用于处理类似神策全埋点编译过慢问题otherCountPerPackage = 50  //每个包下生成其它类的数量methodCountPerClass = 20  //每个类下生成方法数量resPrefix = "junk_"  //生成的layout、drawable、string等资源名前缀drawableCount = 300  //生成drawable资源数量stringCount = 300  //生成string数量}}
}

新版本下载地址

https://download.csdn.net/download/liutietuo/72096272https://download.csdn.net/download/liutietuo/72096272

android 代码混淆 垃圾代码制造相关推荐

  1. iOS 代码混淆 垃圾代码

    app风靡的时代,总有一些奇葩的需求. 为了刷量,刷排名,制作壳包,为了通过苹果爸爸审核,想到代码混淆,垃圾代码等策略. 作为一名程序员,怎么办? 爬了一些文章博客.总的来说有一下几方面: 字符串加密 ...

  2. 【无标题】android 代码混淆 垃圾代码制造

    原文链接:https://blog.csdn.net/liutietuo/article/details/108824904 一 开启混淆 minifyEnabled true 设置为true 并在项 ...

  3. Android高级混淆和代码保护技术

    本文讲的是 Android高级混淆和代码保护技术, 这是一篇关于 Android 代码保护的文章,旨在介绍代码混淆.防止逆向工程的各种高级技巧.大家都很忙,我也赶着回去继续开发我的新应用,因此话不多说 ...

  4. Android 高级混淆和代码保护技术

    转载自@drakeet Android大牛的博客 http://drakeet.me/android-advanced-proguard-and-security/ Android 高级混淆和代码保护 ...

  5. android代码混淆aar_android代码混淆个人总结及踩坑

    前言 公司项目使用组件化开发的形式,需要对自己负责的模块进行一些混淆配置,关于混淆相信做android开发的都或多或少有过一些接触,通过对混淆文件的配置从而将代码中的类名,方法名,成员变量等进行无意义 ...

  6. oc代码混淆_OC代码混淆工具

    之前用python写了一个OC代码混淆脚本(python脚本),每次运行不方便,且其他人使用起来困难,就尝试写了一个mac工具. 工具地址:点我下载   密码:2405 现阶段工具还处于初级阶段,功能 ...

  7. oc代码混淆_iOS 代码混淆

    一般做了防调试的话,被调试进程会退出的,是防动态分析措施. 代码混淆加花这些是防静态分析措施. 反调试是防动态分析措施. 混淆的方法 方法名混淆其实就是字符串替换,有2个方法可以,一个是#define ...

  8. Python代码部署的三种加密方案:代码混淆、代码编译、代码打包

    前言 最近需要源码部署一个项目,因此探索一下保护源码的方式,由简单到复杂主要总结为以下三大类: 代码混淆:主要是改变一些函数名.变量名 代码打包:思路是把Python代码打包成 .exe 的可执行文件 ...

  9. oc代码混淆_oc代码混淆

    #!/usr/bin/env python#coding=utf8 importosimportreimportrandom#规避文件夹 exclude_dirs = ["JBSDKOthe ...

  10. Android代码混淆

    作为一名技术开发人员,为了保护源代码,阻止反向工程我们势必会接触到代码混淆.代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为,代码混淆可以用于程序源代码, ...

最新文章

  1. ***CSS魔法堂:选择器及其优先级
  2. mysql 自带工具详解
  3. 图像上添加噪声 并滤波
  4. UA SIE545 优化理论基础3 Fritz-John与Kuhn-Tucker理论总结 带等式约束与不等式约束的极值问题
  5. python中可变参数和关键字参数_python的可变参数和关键字参数(*args **kw)
  6. goudp文件传输服务器,golang udp服务端客户端例子
  7. HoloLens开发手记-配置开发环境 Install the tools
  8. 《互联网理财一册通》一一第1章 做好互联网理财前的准备工作
  9. 理工计算机系相关内容,弗吉尼亚理工大学计算机系
  10. 枚举与常量需要注意的一个问题
  11. 基于bootstrap的双边栏选择框_iphone自带Dock栏美化功能,你out了
  12. MATLAB免疫算法求解超市物流配送中心选址问题实例
  13. Service Unavailable出现原因及解决方法
  14. ir指令、立即数的作用_计算机系统概论-笔记
  15. TVDI中线性拟合干湿边的步骤
  16. java Virtual Machine Launcher
  17. 一文搞懂什么是神经网络Neural Network【详细介绍】
  18. C#中操作Excel(4)—— 向Excel中插入两种图表以及设置图表格式
  19. Could Not Autowired ,No Beans of ....
  20. 哥谭第一季/全集Gotham迅雷下载

热门文章

  1. 计算机控制面板没,没有nvidia控制面板,手把手教你电脑没有nvidia控制面板
  2. sentinel——SLC数据下载、DEM数据下载拼接、精密轨道数据下载方法
  3. CodeProject 精彩系列
  4. maxscript编辑器脚本高亮显示
  5. ntko php,NTKO OFFICE文档控件
  6. 腾讯x5内核使用方法 手动安装 全网最简单
  7. 【学习笔记】数据分析师相关岗位招聘情况分析
  8. 资源收集:2020年11月行政区划代码
  9. windows自带黑体_win10字体设置黑体|win10系统文字如何设置黑体字体
  10. Android UUID.randomUUID()生成唯一数,1到100随机数