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中删除的代码。

三、编写自己的混淆代码

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • USB协议详解

    USB协议详解本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100@163.com一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。1.传输数据通信USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输…

  • django 模糊查询

    django 模糊查询fromdjango.shortcutsimportrenderfrom.modelsimportBook#Createyourviewshere.defindex(req):books=Book.objects.filter(name__contains="python")returnrender(req,"index.html",{"…

  • Cover Letter实用指南

    Cover Letter实用指南1、什么是CoverLetter?指的是投稿信2、coverletter的内容主要包括那些?应该简述所投稿件的核心内容、主要发现和意义,拟投期刊,对稿件处理有无特殊要求等(如“nottoreview”list)。另外,请附上主要作者的中文姓名、通讯地址、电话、传真和e-mail地址。此外有的杂志要求推荐几位审稿人及其联系方式。以及谁已经阅读过该文(当然是牛人)。

  • phpstrom2021 激活码【2021免费激活】

    (phpstrom2021 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • python基础语法个人笔记_python基础题库

    python基础语法个人笔记_python基础题库python语法规范python的语法规范非常重要,简洁明了是python的特性,以下是python语法的一些说明python3的编码格式是unicode(utf-8)标识符的规则:由字母、数字

  • java二维数组初始化为0_怎样把java二维数组初始化为0

    java二维数组初始化为0_怎样把java二维数组初始化为0展开全部新new出来的二维数组就是已经初始为0了,或者利62616964757a686964616fe58685e5aeb931333337623462用循环依次赋值0;例如:publicclassMain{publicstaticvoidmain(String[]args){inta[][]=newint[5][5];for(inti=0;i<5;i++){for…

发表回复

您的电子邮箱地址不会被公开。

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