我的用例如下:
我的问题是这是否可能? 我在堆栈溢出中查看了一些类似的问题-我得到了以下可能的解决方案-但它们似乎都不适合:
因此再次重申基本要求是:
在我提到的限制条件下,有什么方法可以实现它-不一定必须通过合并aar。
是否可能/有任何意义?
答案 0 :(得分:0)
在可见性方面,如果要隐藏L1,只需使用“ implementation”关键字将其添加到项目中即可。这样,它就不会泄漏到消费者的路径中。现在,这并不意味着L1会立即打包到L2中。常规二进制文件仅打包其类,而外部类应从存储库中提供。因此,您有两种可能的路径:
1。-将L1和L2上载到某种存储库。请注意,所述存储库不必是公共的,您可以设置自己的存储库并向用户提供凭据。从长远来看,这是最不痛苦的道路。
2。-创建一个超级aar / fat aar。您可以使用几个插件。例如,此one正在积极开发中。或者您可以使用maven android插件并使用maven创建L2;在这种情况下,任何适用于uber二进制文件的maven插件都应该起作用。 Maven android插件与gradle项目格式兼容,因此您只需要一个POM文件。显然,如果您使用额外的gradle插件来构建L2,则可能不可行。
3.-以某种方式将所有L1类打包到L2中。例如,您可以手动构建aar文件。需要注意的是,维护将成为一场噩梦。从本质上讲,您将回到类似于ANT的场景,并且有很多原因使人们避免使用ant。如果L1发生变化,将会很痛苦。另外,最终文件将无法工作,因为您还需要跟踪L1的所有传递依赖项,并将它们添加到L2的路径中,以便导入。如果有机会,向您提供L1的人做了类似的事情,那么您就被搞砸了。
4。-向用户提供L1和L2文件,以便他们将它们添加到其lib文件夹中。在这种情况下,即使将L1作为“实现”导入,它也会泄漏到路径中,因为几乎每个人都只是导入整个libs文件夹。
所有的事情都说,你需要选择你的毒药。我的推荐?创建一个私有仓库(您甚至可以使用github)。这是最不痛苦的选择,您可以在任何时候减少对用户的访问,并且如果有必要处理所有用户的自定义构建,只需更改artifactId / groupID即可完成。所有其他路径都有陷阱,在某些时候会给您带来困难。