android 混淆规则作用,Android代码混淆详解

android 混淆规则作用,Android代码混淆详解一、混淆的意义混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。总结如下:1、将项目中的类、方法、变量等信息进行重命名,变成一些无意义的简短名字。2、移除未被使用的类、方法、变量等。二、混淆的规则和配置…

大家好,又见面了,我是你们的朋友全栈君。

一、混淆的意义

混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。 所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。总结如下:

1、将项目中的类、方法、变量等信息进行重命名,变成一些无意义的简短名字。

2、移除未被使用的类、方法、变量等。

二、混淆的规则和配置

凡是需要在AndroidManifest.xml中去注册的所有类的类名以及从父类重写的方法名都自动不会被混淆。 因此,除了Activity之外,这份规则同样也适用于Service、BroadcastReceiver和ContentProvider。

(1)minifyEnabled

minifyEnabled为true的作用:启用代码混淆、压缩APK;

minifyEnabled会对资源进行压缩,多余的代码在打包的时候就给移除掉了。不仅仅是代码,没有被调用的资源同样也会被移除掉,因此minifyEnabled除了混淆代码之外,还可以起到压缩APK包的作用。

开启混淆后也可添加shrinkResources,表示开启删除无用资源。

(2)shrinkResources

shrinkResources为true用来开启删除无用资源。

shrinkResources会对就是没有被引用的文件(经过实测是drawable,layout,实际并不是彻底删除,而是保留文件名,但是没有内容),但是因为需要知道是否被引用所以需要配合mififyEnable使用,只有当两者都为true的时候才会起到真正的删除无效代码和无引用资源的目的。

(3)避免被误删除

若配置minifyEnable true && shrinkResources true,防止避免误删除的文件,可以配置如下: 在res/raw/keep.xml(避免被误删除)写了配置的

对于没有被引用的文件&没有在配置文件keep.xml中声明保存的文件,打包后是没有内容的,声明保存的文件有内容(资源文件和layout文件)。 注意:string.xml中没有被引用的怎么设置都不会被删除。

(4)proguard-android.txt和proguard-rules.pro

proguard-android.txt:代表系统默认的混淆规则配置文件,该文件在/tools/proguard下,一般不要更改该配置文件,因为也会作用于其它项目。

proguard-rules.pro:代码表当前Project的混淆配置文件,在app module下,可以通过修改该文件来添加适用当前项目的混淆规则。

(5)proguard文件夹

代码混淆生成apk之后,项目下面会多出来一个proguard文件夹,proguard文件夹中四个文件的作用。

dump.txt : 描述了apk中所有类文件中内部的结构体。

mapping.txt : 列出了原始的类、方法和名称与混淆代码间的映射。

seeds.txt : 列出了没有混淆的类和方法。

usage.txt : 列出congapk中删除的代码。

三、编写自己的混淆代码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139132.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言数组当参数传递

    C语言数组当参数传递在学习C语言的过程中遇到数组作为参数传递的问题一维数组:#includeinttest2(inta[]){ for(inti=0;i<5;i++){ printf("%d",a[i]); }}intmain(){ inta[5]={1,2,3,4,5},*p; p=a; test2(a); }这样我们可以很顺利的在test去遍历这个

    2022年7月11日
    19
  • 四种方法求最长回文子串

    四种方法求最长回文子串所谓回文串,就是正着读和倒着读结果都一样的回文字符串。比如:a,aba,abccba都是回文串,ab,abb,abca都不是回文串。一、暴力法最容易想到的就是暴力破解,求出每一个子串,之后判断是不是回文,找到最长的那个。求每一个子串时间复杂度O(N^2),判断子串是不是回文O(N),两者是相乘关系,所以时间复杂度为O(N^3)。stringlongestPali…

    2022年6月5日
    52
  • 对日外包十日谈 之 我所了解的对日外包企业

    对日外包十日谈 之 我所了解的对日外包企业对日外包十日谈之我所了解的对日外包企业蒋彪2010-5-23于上海浦东1.  前言关于对日外包,我其实本来已经不想说些什么了。因为,我已经离开了对日外包行业。这个行业的是与非,正确与错误,我都不想评论什么了。但是唯一的,我觉得我还是应该把承诺的文章写完。有很多人问我,对日外包这个行业怎么样,我不知道该说些什么。如果你只是把这个职业看作是生存的手段,那么无可厚非。如果你

    2022年5月15日
    50
  • cmd下无法切换盘符[通俗易懂]

    cmd下无法切换盘符[通俗易懂]在cmd命令提示符窗口无法切换盘符?因为切换盘符不需要使用cd直接盘符加冒号就可以切换盘符

    2022年10月3日
    3
  • 【云原生&微服务二】SpringCloud之Ribbon自定义负载均衡策略(含Ribbon核心API)「建议收藏」

    【云原生&微服务二】SpringCloud之Ribbon自定义负载均衡策略(含Ribbon核心API)「建议收藏」1、SpringCloud之Ribbon自定义负载均衡策略,2、SpringCloud之Ribbon自定义服务实例心跳检查策略,3、ILoadBalancer、IRule、IPing介绍

    2022年10月13日
    1
  • 软件工程:数据流图和结构图怎么画?

    软件工程:数据流图和结构图怎么画?文章目录Step1:根据软件的功能描述,绘制数据流图:Step2:根据数据流图,分级绘制结构图:•边界划分:•第一级分解:•第二级分解:•精化减少耦合:Step1:根据软件的功能描述,绘制数据流图:问题表述:假设的仪表板将完成下述功能:(1)通过模数转换实现传感器和微处理机接口;(2)在发光二极管面板上显示数据;(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4)指示加速或减速;(5)超速警告:如果车速超过55英里/小时,则发出超速警告铃声。首先了

    2022年6月15日
    86

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号