Android 如何合并/合并两个aar文件?
我的用例如下所示:Android 如何合并/合并两个aar文件?,android,android-studio,gradle,android-gradle-plugin,dependency-management,Android,Android Studio,Gradle,Android Gradle Plugin,Dependency Management,我的用例如下所示: 我有一个由第三方提供的aar库(比如L1)。请注意,我没有这方面的来源 我想在L1上写一个包装层,并创建另一个aar(SDK)(比如L2)。L1应封装在L2中。请注意,L2中的代码是最小的,它就像L1的包装器 这个想法是,如果有人将这个SDK集成到他们的Android应用程序中,应用程序应该只与L2交互,它甚至不需要知道L1的存在。基本上,我希望在应用程序gradle文件中只包含L2 我的问题是这是否可能? 我研究了一些关于堆栈溢出的类似问题——我得到了以下可能的解决方案——
在可见性方面,如果您想隐藏L1,只需使用“implementation”关键字将其添加到项目中即可。这样,它就不会泄漏到消费者的路径中。现在,这并不意味着L1会被瞬间压缩到L2中。常规二进制文件只打包它们的类,外部类应该由存储库提供。因此,您有两种可能的路径: 1.-将L1和L2上传到某种存储库。请注意,所述存储库不需要是公共的,您可以设置自己的存储库并向用户提供凭据。从长远来看,这是一条痛苦最少的道路 2.-创建优步aar/fat aar。有几个插件可供您使用。例如,这是在积极发展。或者你可以使用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即可。所有其他路径都会遇到一些问题,这在某个时候会给您带来困难。我认为您与以下用户有相同的问题。不,不可能合并2个AAR文件,您必须将L1托管到maven或其他存储库。在artifactory上托管您的L1之后,您将获得一个像其他任何组件一样的gradle依赖项。对L1使用“实现”而不是“api”或“编译”,这将限制L2的用户仅使用L2的代码而不是L1代码。在应用程序项目的
app/build.gradle
依赖项中启用对aar
依赖项的传递依赖项。当你不提供错误日志,build.gradle
等时,你真的束缚了我们的手脚。。。