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

Tre*_*une 10 android module shared-libraries gradle android-studio

我有Android应用程序A和B.我想从每个应用程序中提取重复的代码到共享库L.如何使用Gradle执行此操作?我之前看过这个问题的几个排列,但答案很少.

最接近/最好的问题是这一个:

多个Android应用程序取决于带有gradle的android库

第一个答案表明一个包含应用程序和库模块的父项目.这种耦合是不可取的,部分是因为A,B和L在他们自己的Git存储库中,但也因为它涉及有一个父项目和构建难以放入源代码控制的文件(或者涉及手动复制其他项目).因为默认情况下Android Studio喜欢用于单模块项目的父版本......嗯,对于应该是一个简单的家庭来说,它只是很多父母.这似乎是项目之间不必要的耦合,否则完全无关.

第二个答案涉及将AAR发布到repo并引用每个项目中的远程库.我可以使用这种方法,因为我们有一个本地的Nexus存储库,但如果没有手动版本控制/命名和上传文件,这似乎没有一种简单的方法(这是不可持续的).我正在尝试使用Sonatype gradle-release插件,但它似乎适用于JAR(不是AAR).

对于Android应用程序之间最基本的代码共享形式而言,它似乎是很多活动部分.有没有人有更好的解决方案?

Tre*_*une 1

我能够删除很多 SonaType 身份验证内容,因为我们有自己的 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 {
}
Run Code Online (Sandbox Code Playgroud)