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