我目前正在开发一个库(没有活动)和一个依赖于库的应用程序。目前,我将这些作为单独的项目,我可以将生成的.aar文件从库项目复制到应用程序项目的libs文件夹中,并重新同步gradle。但是,这是一个效率低下的过程,因为每次我更改库项目时都必须重建并手动重新复制.aar文件。我的问题是,如何简化此流程,以便我的应用程序自动使用库最近生成的.aar文件?
答案 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:将您的应用程序项目和库项目作为整个项目的公共根目录的子项。出于本答案的目的,我将分别称呼这些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)。
您可以使用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服务器)以供企业使用。
这是Pavel Dudka在his answer中的方法。我没试过这个。如果您想依赖多个应用程序中的库,这将是一个很好的方法,但您并不真正关心将实际的AAR作为分发的东西。
我确信除了这三种选择还有其他选择。