【问题标题】:Modifying an Android Libraries' package using gradle使用 gradle 修改 Android 库的包
【发布时间】:2017-06-28 17:16:41
【问题描述】:

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

该库非常标准,包括以下内容:

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

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

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

【问题讨论】:

  • 您是否考虑过不关心用户是否是 root 用户?它是我的设备,我可以而且应该能够使用它的全部功能。而且由于根检测并非万无一失,它只会给你一种错误的安全感。如果您不希望潜在的 root 用户拥有某些信息,那么它不应该出现在客户端。
  • jarjar 工具实际上可以与gradle 一起使用。这是example。或者您是否尝试在groovy 中实现相同的功能?
  • @GabeSechan 我对它的政治并不感兴趣。我的一些设备已经植根,没有人试图说出你可以用你的设备做什么和不能做什么。但某些应用程序不得不包含敏感信息:电子邮件、银行应用程序、短信。授予 root 权限允许进程执行任何操作,因此您必须相信每个 root 进程都不是完全恶意的,也不包含任何安全漏洞。
  • 在 yourLibrary.aar 文件中有一个 classes.jar 文件。所以 jarjar-gradle 插件可能还是有用的
  • 通常,唯一能找到包名的资源文件是清单文件(布局文件可以使用相对类名)。但是在你的客户项目的构建过程中,所有的清单(app+libs)被合并为一个,你的包名不应该在最终的清单中。如果我错了,请纠正我。

标签: java android gradle android-gradle-plugin root


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 对不起,如果我不清楚,我是这个库的作者之一。我希望创建一个 gradle 任务来自动化它以供其他人使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2018-01-29
      • 2015-09-17
      • 2015-06-17
      • 2016-06-28
      • 1970-01-01
      • 2015-02-24
      相关资源
      最近更新 更多