【发布时间】:2015-05-23 23:00:44
【问题描述】:
我想使用 Gradle 构建一个封闭源代码的 android 库。我的库对开源项目有一些依赖。我应该如何构建我的图书馆?我可以使用 gradle 吗?
【问题讨论】:
-
如果你能解决这个问题,请分享
标签: android maven gradle android-library
我想使用 Gradle 构建一个封闭源代码的 android 库。我的库对开源项目有一些依赖。我应该如何构建我的图书馆?我可以使用 gradle 吗?
【问题讨论】:
标签: android maven gradle android-library
我可以使用 gradle 吗?
简答:
是的。
长答案:
我假设您的库被打包为aar(包含资源和编译的字节码)。
您需要知道的第一件事是,在撰写本文时,无法创建 fat-aar 库,这意味着您必须单独分发库的依赖项。在我看来,最方便的方法是生成pom.xml 文件并将您的库发布到 Maven 存储库(maven 插件可以完成所有这些),因此客户端将自己获取所有依赖项。由于它是一个“私人”库,因此可能是您公司通过访问权限关闭的存储库(简单来说 - 为您的存储库创建特殊用户并与相关方共享密码)。
这里的一个缺点是所有依赖项都将在pom.xml 中公开,您将无法混淆它们。就个人而言,我不认为这是一个问题。
此外,您还可以获得能够自动部署构建并让客户使用库的快照版本的巨大优势。当您尝试解决问题并希望快速将其交付给用户时,这非常有用。在客户端,他们需要做的只是更新他们的build.gradle 中的版本,或者只是重新同步项目以防他们使用快照。
第二件事。由于您的库是封闭源代码,您需要运行 proguard 来混淆除库的公共接口之外的所有内容(所有向最终用户公开的公共方法)。
请记住,即使经过混淆,您的代码仍然可以被反编译,并且所有字符串文字仍然存在。因此,尽管已经说过上百万次了,但请避免在库中存储任何关键数据(例如密码、密钥等)。提取它并不像你想象的那么难:https://www.youtube.com/watch?v=X28Oogg2Q3k
第三件事。我强烈建议您创建将使用您的库的内部测试项目(作为 gradle 子模块),这样您就可以确保不会进行任何重大更改。
希望这个答案至少让你的事情变得更容易一些。
【讨论】: