使用Gradle在多个Android应用程序之间共享Android库

我有Android应用程序A和B.我想从每个提取重复代码到共享库L.我怎样才能使用Gradle做到这一点? 我曾经见过这个问题的一些排列,但是答案却很less。

最接近/最好的问题是这样的:

多个Android应用程序依赖于Android库与Gradle

第一个答案build议包含应用程序和库模块的父项目。 这种耦合是不受欢迎的,部分原因是A,B和L在他们自己的Git仓库中,也是因为它会涉及父项目和构build文件,这些文件难以放在源代码控制中(或者涉及手动复制其他项目)。 由于Android Studio在默认情况下喜欢单模块项目的父级构build,所以应该是一个简单的家族。 这真的好像是一个不相干的项目之间的不必要的耦合。

第二个答案涉及将AAR发布到回购库,并在每个项目中引用远程库。 如果我们有一个本地的Nexus存储库,那么我可以很好地使用这种方法,但似乎没有一个简单的方法来做到这一点,没有手动版本/命名和上传文件(这是不可持续的)。 我试图使用Sonatype gradle-release插件,但似乎是JAR(不是AAR)。

它看起来像是很多移动部件,相当于Android应用程序之间最基本的代码共享forms。 有没有人有更好的解决scheme?

Solutions Collecting From Web of "使用Gradle在多个Android应用程序之间共享Android库"

你最好的select就是走这条路,把它发布给maven 。

我能够删除许多SonaTypeauthentication的东西,因为我们有我们自己的Nexus回购没有使用它。 我的gradle.build文件(模块文件,而不是根)最终看起来像这样:

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.7.1' } } apply plugin: 'android-library' apply plugin: 'maven' version = 0.3 group = "com.whatevs.android.commons" uploadArchives { repositories.mavenDeployer { repository(url: 'http://nexus.whatevs.net:8081/nexus/content/repositories/internal-release') { } pom.project { packaging 'aar' scm { url 'scm:git:ssh://git@whatevs.net:7999/Mobile/android-commons.git' connection 'scm:git:ssh://git@whatevs.net:7999/Mobile/android-commons.git' developerConnection 'scm:git:ssh://git@whatevs.net:7999/Mobile/android-commons.git' } } } } repositories { mavenCentral() } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 14 targetSdkVersion 19 } release { runProguard false proguardFile 'proguard-rules.txt' proguardFile getDefaultProguardFile('proguard-android.txt') } } dependencies { } 

根据Android的官方文档( https://developer.android.com/studio/projects/android-library.html ):通过导入模块,库模块被复制到您的项目中,所以您可以实际编辑库代码。 如果你想维护一个单一版本的库代码,那么这可能不是你想要的,而应该像上面描述的那样导入编译好的AAR文件。

还有一个选项,git子模块。 你可以让你的应用程序引用你的库的SHA。 所以图书馆只有一个副本。 每个应用程序只使用SHA。 对于图书馆的分支pipe理,你应该多加注意。 检查这个细节: https : //github.com/blog/2104-working-with-submodules