如何使用 proguard 混淆 android 库(.aar)?
Posted
技术标签:
【中文标题】如何使用 proguard 混淆 android 库(.aar)?【英文标题】:How to obfuscate android library(.aar) using proguard? 【发布时间】:2017-10-29 09:24:29 【问题描述】:我想使用 proguard 混淆 .aar 库以用于分发目的,我在互联网上尝试了许多解决方案,但到目前为止没有任何效果,只有一些代码被混淆。谁能帮我解决这个问题?
【问题讨论】:
参考***.com/questions/30201420/…和***.com/questions/26983248/… @Redman 感谢您的快速响应,我已经浏览了上述链接,但它在一定程度上混淆了代码,资源文件夹保持不变.. 【参考方案1】:在你的 build.gradle 中,在 defaultConfig 下添加 consumerProguardFiles :
android
compileSdkVersion Integer.parseInt("$COMPILE_SDK")
buildToolsVersion "$BUILD_TOOLS_VERSION"
defaultConfig
targetSdkVersion Integer.parseInt("$TARGET_SDK")
minSdkVersion Integer.parseInt("$MIN_SDK")
consumerProguardFiles 'consumer-proguard-rules.pro'
您在库项目的根文件夹下添加一个名为 consumer-proguard-rules.pro 的文件。该文件应包含库项目的 build.gradle 中提到的所有依赖项的 proguard 规则。您应该为您的 POJO 类、带注释的接口以及任何其他需要保护免受 proguard 清理或混淆的类添加保留规则。 如果你收缩资源,你应该在资源下的 res 下添加一个 keep.xml 文件(例如 res/raw)。在此文件中,您指定要保留的可绘制对象或布局。你签入你的代码,使用反射调用 getResources().getIdentifier(..) 资源,如果是这样,你可以像这样添加你的可绘制对象。
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="safe"
tools:keep="@layout/layout1, @drawable/icon1,@drawable/icon2,@drawable/img_*"/>
你可以用*告诉proguard把所有以img_开头的drawable保存在drawable文件夹下。
【讨论】:
以上是关于如何使用 proguard 混淆 android 库(.aar)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中使用 Proguard 不混淆接口方法及其参数?
如何对使用 ProGuard 混淆的 Android APK 进行逆向工程/反编译?
Proguard 不会混淆 android 中的 strings.xml