在 gradle android build 中使用 progaurd 生成 jar 文件

Posted

技术标签:

【中文标题】在 gradle android build 中使用 progaurd 生成 jar 文件【英文标题】:Generating jar files using progaurd in gradle android build 【发布时间】:2019-09-14 14:30:50 【问题描述】:

通常通过向 progaurd 提供 -injars 和 -outjars ,我们可以从 -injars 生成过滤后的类的混淆 jar 文件。

在 gradle android build 中是否有任何方法可以使用 proguardFile 属性从项目类组中生成过滤类的混淆 jar 文件。这些过滤后的 jar 文件是 gradle android build 二进制文件的补充。

【问题讨论】:

只需配置 proguard 以混淆该库模块。 为 -injars 赋予什么价值?根据 progaurd 文档,我们可以将 aars、wars、ears、zip、apks、目录作为 -injars 的输入,但是当我将 \build\intermediates\javac\release\compileReleaseJavaWithJavac\classes 作为输入时,它会失败并出现以下错误 - -> 警告:处理任务时出现异常 java.io.IOException:相同的输入 jar [D:\Luavmandroid\luavmandroid\build\intermediates\javac\release\compileReleaseJavaWithJavac\classes] 被指定了两次。 只是不要使用-injars ...并且不要定义默认类路径上的路径。混淆库模块与混淆应用程序模块没有什么不同。 好吧,从您的上述观点来看,我知道类将从默认类路径中选择。我的要求是选择几个类,然后打包到单独的 jar 文件中,除了最终的 gradle android build 二进制文件。 【参考方案1】:

您可能必须在项目中创建一个新的库模块并重构代码以将 jar 中所需的类移动到新的库模块中。

看到这个答案:https://***.com/a/47444948/3501286

还有这个:https://***.com/a/19037807/3501286

【讨论】:

【参考方案2】:

我基于从单个库项目中选择的少数类文件生成单个混淆 jar 文件的要求是通过以下方式实现的。这些单独的 jar 文件是最终 android 二进制文件(即 .aar 文件)的补充。

调试: 1. android build时,gradle将所有编译好的java文件移动到/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes文件夹下。

    在 proguard 文件中,我将 -injars 作为上述文件夹,将 -outjars 作为带有过滤器的自定义路径。

    使用 'proguardFile' 属性我已将 proguard 文件传递​​给 build.gradle

    使用 -injars 和 -outjars 指定的所有单个 jar 文件都将被混淆,并将放置在 -outjars 路径中

例如:

在调试模式下:

-injars 'D:\projectname\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes'(**.class)

-outjars 'D:\projectname\build\intermediates\transforms\proguard\debug\1.jar'(com/ui/tab/TabWidget.class,com/ui/Tab.class )

-injars 'D:\projectname\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes'(**.class)

-outjars 'D:\projectname\build\intermediates\transforms\proguard\debug\1.jar'(com/ui/CollapsibleWidget.class)

【讨论】:

以上是关于在 gradle android build 中使用 progaurd 生成 jar 文件的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百二十七回:在Android中使用MQTT通信一)

如何在android中使底部导航栏不透明?

Android Studio开发Android——build.gradle文件详解

Gradle 错误:找不到 com.android.tools.build:gradle:6.6.1

无法在 app/build.gradle 中在线导入 com.android.build.OutputFile 解析符号“build”

android build.gradle(groovy)