如何在 Android Studio 中并行开发库和应用程序?

How to develop a library and an application side-by-side in Android Studio?

我目前正在开发一个库(没有活动)和一个依赖于该库的应用程序。目前,我将这些作为单独的项目,我可以将生成的 .aar 文件从库项目复制到应用程序项目的 libs 文件夹中,然后重新同步 gradle。但是,这是一个低效的过程,因为每次对库项目进行更改时,我都必须重建并手动重新复制 .aar 文件。我的问题是,如何简化此过程,以便我的应用程序自动使用库最近生成的 .aar 文件?

1) 在您应用的 settings.gradle 中将您的库作为项目包含在内:

include ':lib-project'
project(':lib-project').projectDir = new File('../path/to/lib/project/lib-project')

lib 项目的路径是相对于文件系统settings.gradle 位置的

2) 在您应用的 build.gradle 中添加 lib 项目作为依赖项:

dependencies { 
    compile project(':lib-project')
    ...
}

how can I streamline this process so that my application automatically uses the library's most recently generated .aar file?

选项 #1:专用库

第 1 步:将您的应用程序项目和库项目作为整个项目的公共根目录的子目录。出于此答案的目的,我将分别称它们为 app/library/

步骤 #2:在顶层(即公共根目录),有一个列出这些模块的 settings.gradle 文件:

include ':app', ':library'

第 3 步:在顶层,有一个 build.gradle 文件,它为 Android 插件设置 Gradle 和任何其他感兴趣的常见内容,例如:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

(请注意,上面的文件是您从 Android Studio 项目中获得的,由 IDE 创建)

第 3 步:在 library/ 目录中,有一个使用 com.android.library 插件的 build.gradle 文件

第 4 步:在 app/ 目录中,有一个 build.gradle 文件,其 dependencies 中有 compile project(':library') 以拉入库

您的 AAR 可能是可交付成果,而不是应用程序(例如,库是供社区使用的开源库,应用程序是演示应用程序)。在这种情况下,您可以使用 app/ 中的 debugCompile 来引入本地库项目以进行调试构建,但可以使用 releaseCompile 从已发布的源中引入 AAR,以确认您可以从 AAR 用户使用的相同内容构建。

我的大部分 CWAC 库都是这样设置的(例如,cwac-richedit)。

选项 #2:在本地发布 AAR

您可以使用 maven 插件和 uploadArchives 任务上传到本地 Maven 风格的仓库:

apply plugin: 'maven'

uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = PUBLISH_GROUP_ID
        pom.artifactId = PUBLISH_ARTIFACT_ID
        pom.version = PUBLISH_VERSION

        repository(url: LOCAL_REPO)
    }
}

在这里,我的常量是从一个 gradle.properties 文件中提取的,而 LOCAL_REPO 是一个指向本地存储库的 file:/// URL。然后,您可以 运行 gradle uploadArchives 生成 AAR 并将其推送到本地仓库。

然后,您的应用程序可以在 repositories 闭包中有一个 maven { url LOCAL_REPO } 闭包,并且可以从那里拉入 AAR 工件,就好像它来自 public 存储库一样(例如,Maven Central)。

我的 CWAC 库使用 uploadArchives 任务,但仅用于发布到我的 Amazon S3 托管的 Maven 存储库的本地镜像。

如果您真的想在 AAR 之外工作,但又想在多个项目中这样做,则可以采用这种方法。请注意,您当然可以将其发布到其他类型的 Maven 存储库(例如,Sonatype 服务器)以供企业使用。

选项 #3:Mod Mod指向其他地方库的规则

这是 Pavel Dudka 在 中的方法。我没试过这个。如果您想依赖来自多个应用程序的 ,这将是一个很好的方法,但您并不真正关心将实际的 AAR 作为分发的东西.

而且我敢肯定除了这三个之外还有其他选择。