使用 gradle 修改 Android 库的包

Modifying an Android Libraries' package using gradle

是吗,或者是否有可能在编译时使用类似于 jarjar 更改 .jar 文件包名的方式的 gradle 任务来修改库的包名。

该库非常标准,包含如下:

dependencies {
    compile 'com.scottyab:rootbeer-lib:0.0.6'
}

这样做的目的是更改名称以避免根隐藏应用程序对库进行静态检测。

非常感谢任何建议或指导!谢谢

我可以看到你使用的库是一个开源库。您可以从这里简单地克隆 repo https://github.com/scottyab/rootbeer 并修改它以使用您想要的任何名称。您甚至不需要将更改构建为 aar 库。只需将其作为模块导入 Android Studio。

Gradle 任务也很强大,用 gradle 应该可以做到,但我不知道怎么做。

已经有一个 Gradle 插件可以做类似的事情。它重新定位依赖项,Shadow

它在库中捆绑和重新定位公共依赖以避免class路径conflicts.Shadow使用ASM库修改class字节代码以替换包名称和任何导入语句class。存储在包结构中的任何非 class 文件也将重新定位到新位置。

这是您重新定位包裹的方式:

shadowJar {
   relocate 'junit.framework', 'shadow.junit'
}

代码片段会将 junit.framework 中任何 class 的位置重写为 shadow.junit。例如,class junit.textui.TestRunner 变为 shadow.junit.TestRunner。在生成的 JAR 中,class 文件从 junit/textui/TestRunner.class 重定位到 shadow/junit/TestRunner.class.

已经有一个 Gradle 插件可以做类似的事情。它重新定位依赖项,Shadow

它在库中捆绑和重新定位公共依赖以避免class路径conflicts.Shadow使用ASM库修改class字节代码以替换包名称和任何导入语句class。存储在包结构中的任何非 class 文件也将重新定位到新位置。

这是您重新定位包裹的方式:

shadowJar {
   relocate 'junit.framework', 'shadow.junit'
}

代码片段会将 junit.framework 中任何 class 的位置重写为 shadow.junit。例如,class junit.textui.TestRunner 变为 shadow.junit.TestRunner。在生成的 JAR 中,class 文件从 junit/textui/TestRunner.class 重定位到 shadow/junit/TestRunner.class.