使用gradle修改Android库的包

时间:2017-06-28 17:16:42

标签: java android gradle android-gradle root

是否可以使用gradle任务在编译时修改库的packagename,类似于jarjar如何更改.jar文件的包名。

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

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

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

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

{{1}}

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

答案 2 :(得分:0)

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

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