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

时间:2015-02-02 21:23:08

标签: android gradle dependencies android-library

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

2 个答案:

答案 0 :(得分:3)

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

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')
    ...
}

答案 1 :(得分:2)

  

如何简化此流程,以便我的应用程序自动使用库最近生成的.aar文件?

选项#1:专用图书馆

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

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

include ':app', ':library'

步骤3:在顶层,有一个build.gradle文件,用于设置Gradle for Android插件以及任何其他常见内容,例如:

// 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()
    }
}

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

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

步骤4:在app/目录中,有一个build.gradle文件,其compile project(':library')中有dependencies来提取库

可能是您的AAR是可交付的,而不是应用程序(例如,该库是供社区使用的开源库,并且该应用程序是演示应用程序)。在这种情况下,您可以使用debugCompile中的app/来引入本地库项目以进行调试构建,但是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:///网址。然后,您可以运行gradle uploadArchives来生成AAR并将其推送到本地仓库。

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

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

如果你真的想要在AAR上工作,但是想要从多个项目中做到这一点,那么这种方法就是这样。请注意,您当然可以将其发布到其他类型的Maven仓库(例如,Sonatype服务器)以供企业使用。

选项#3:修改模块以指向其他地方的库

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

我确信除了这三种选择还有其他选择。