我正在尝试创建一个Android开源SDK包,以分发给一定数量的客户。
我了解,创建可分发的Android包以包括源代码, list ,布局XML和其他资源等的最佳方法是创建AAR文件,而我已经使用Android Studio做到了。
理想情况下,然后将通过Maven存储库分发AAR,以允许其他人使用源,以及分发列出依赖项的pom.xml
文件。
但是,我不想被迫将AAR上传到公共(public)(甚至私有(private))存储库中,我只是想拥有一种通过电子邮件或可下载的ZIP文件简单分发AAR文件的方式。
问题是我的图书馆项目有很多依赖关系(都来自Maven和本地项目),AAR本身似乎没有任何内在的支持来列出(甚至 bundle )它们的依赖关系,这需要从外部进行处理(我思考?)。
这意味着当在另一个应用程序中包含AAR时,每当我尝试使用AAR的任何依赖项时,我最终都会得到java.lang.NoClassDefFoundError
。
我发现的一种解决方法(不理想)是将Maven依赖项复制到主机应用程序的dependencies
的build.gradle
部分中。这不是很好,因为这是客户集成SDK的额外步骤,并且在管理依赖项层次结构方面还不干净。
对于我具有的项目依赖项,此解决方法也不起作用,因为在构建时将其排除在外。我大概可以将这种依赖关系作为源提供,并要求我的客户将其添加到他们的项目中,我确定它可以正常工作,但这变得更加困惑。
因此,问题是:怎么能创建一个易于分发的AAR文件,该文件可以通过自动依赖关系解析放入另一个应用程序中而无需存储库?
最佳答案
与您要寻找的最接近的东西是,您将Maven样式的存储库作为ZIP存档进行分发。这基本上就是您从Android SDK获得的Android Repository和Google Repository。您的客户会在某个位置(单个工作站,通用文件服务器等)解压缩归档文件,并在其模块的repositories
闭包中对其进行引用,然后使用常规的compile
指令。您可以将pom.xml
与指向依赖项的指针一起发送。那些本身是私有(private)的依赖关系将成为ZIP存档的一部分;那些公开的文件将被从JCenter或任何地方拉出。
(注意:您不需要从Android SDK和Google Repository的repositories
闭包中添加SDK的唯一原因是因为Google for Android插件或多或少自动添加了它们)
但是,这在您发布更新时会有些痛苦。您需要将新的 Artifact 和pom.xml
文件放入原始存储库的N个副本中,其中N是您的活跃客户数量。可能会提供替换的存储库,但是随着您的SDK支持的发行版数量的增加,该存储库开始呈线性增长。如果您决定放弃对较早版本的支持,那么您将开始破坏尚未升级到较新版本的任何人的构建,这可能会增加您的支持负担。另外,您将需要制定机制和说明,以仅使用新内容分发各种 repo “补丁集”,并希望客户正确安装它。