Android混淆你了解多少?,想跳槽涨薪的必看

本文详细介绍了Android代码混淆的各个方面,包括资源压缩、自定义保留资源、启用严格检查模式、移除备用资源以及自定义混淆规则。通过保留必要的类、方法和枚举等,防止混淆导致的错误。混淆是优化APK大小和提高代码安全性的关键步骤,同时,了解如何恢复混淆后的堆栈跟踪对于调试至关重要。
摘要由CSDN通过智能技术生成
  • 它是一个包含代码文件压缩、优化、混淆和校验等功能的工具

  • 它能够检测并删除无用的类、变量、方法和属性

  • 它能够优化字节码并删除未使用的指令

  • 它能够将类、变量和方法的名字重命名为无意义的名称从而达到混淆效果

  • 最后,它还会校验处理后的代码,主要针对 Java 6 及以上版本和 Java ME

资源压缩

Android 中,编译器为我们提供了另外一项强大的功能:资源的压缩。资源压缩能够帮助我们移除项目及依赖仓库中未使用到的资源,有效地降低了apk包的大小。由于资源压缩与代码混淆是协同工作,所以,如果需要开启资源的压缩,切记要先开启代码混淆,否则会出现以下问题:

ERROR: Removing unused resources requires unused code shrinking to be turned on. See http://d.android.com/r/tools/shrink-resources.html for more information.

Affected Modules: app

自定义要保留的资源

当我们开启了资源压缩之后,系统会默认替我们移除所有未使用的资源,假如我们需要保留某些特定的资源,可以在我们项目中创建一个被 标记的 XML 文件(如 res/raw/keep.xml),并在 tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。

这两个属性都接受逗号分隔的资源名称列表。同样,我们可以使用字符 * 作为通配符。

如:

<?xml version="1.0" encoding="utf-8"?>

<resources xmlns:tools=“http://schemas.android.com/tools”

tools:keep="@layout/activity_video*,@layout/dialog_update_v2"

tools:discard="@layout/unused_layout,@drawable/unused_selector" />

启用严格检查模式

正常情况下,资源压缩器可准确判定系统是否使用了资源。不过,如果您的代码(包含库)调用 Resources.getIdentifier(),这就表示您的代码将根据动态生成的字符串查询资源名称。

这时,资源压缩器会采取防御性行为,将所有具有匹配名称格式的资源标记为可能已使用,无法移除。例如,以下代码会使所有带 img_ 前缀的资源标记为已使用:

String name = String.format(“img_%1d”, angle + 1);

res = getResources().getIdentifier(name, “drawable”, getPackageName());

这时,我可以开启资源的严格审查模式,只会保留确定已使用的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值