如何使用 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

如何使用 proguard 混淆选择性课程?

如何在 Android Studio 中启用 ProGuard 混淆功能?

导出已签名、混淆的 Android 应用程序时,如何在 Eclipse 中设置 ProGuard?