Creating a Library Project(创建一个库项目)
一个库项目与通常的Android项目非常类似,只是有一点小区别。
尽管构建库项目不同于构建应用程序,它们使用了不同的plugin。但是在内部这些plugin共享了大部分相同的代码,并且它们都由相同的com.android.tools.build.gradle.jar提供。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.6'
}
}
apply plugin: 'android-library'
android {
compileSdkVersion 15
}
这里创建了一个使用API 15编译SourceSet的库项目,并且依赖关系的配置方法与应用程序项目的配置方法一样,同样也支持自定义配置。
Differences between a Project and a Library Project(普通项目和库项目之间的区别)
一个库项目的main输出是一个.aar包(它代表Android的归档文件)。它组合了编译代码(例如jar包或者是本地的.so文件)和资源(manifest,res,assets)。 一个库项目同样也可以独立于应用程序生成一个测试用的apk来测试。
标识Task同样适用于库项目(assembleDebug
,assembleRelease
),因此在命令行上与构建一个项目没有什么不同。
其余的部分,库项目与应用程序项目一样。它们都拥有build type和product flavor,也可以生成多个aar版本。 记住大部分Build Type的配置不适用于库项目。但是你可以根据库项目是否被其它项目使用或者是否用来测试来使用自定义的sourceSet改变库项目的内容。
Referencing a Library(引用一个库项目)
引用一个库项目的方法与引用其它项目的方法一样:
dependencies {
compile project(':libraries:lib1')
compile project(':libraries:lib2')
}
Library Publication(库项目发布)
一般情况下一个库只会发布它的release Variant(变种)版本。这个版本将会被所有引用它的项目使用,而不管它们本身自己构建了什么版本。这是由于Gradle的限制,我们正在努力消除这个问题,所以这只是临时的限制。
你可以控制哪一个Variant版本作为发行版:
android {
defaultPublishConfig "debug"
}
注意这里的发布配置名称引用的是完整的Variant版本名称。Relesae,debug只适用于项目中没有其它特性版本的时候使用。如果你想要使用其它Variant版本取代默认的发布版本,你可以:
android {
defaultPublishConfig "flavor1Debug"
}
将库项目的所有Variant版本都发布也是可能的。我们计划在一般的项目依赖项目(类似于上述所说的)情况下允许这种做法,但是由于Gradle的限制(我们也在努力修复这个问题)现在还不太可能。 默认情况下没有启用发布所有Variant版本。可以通过以下启用:
android {
publishNonDefault true
}
理解发布多个Variant版本意味着发布多个arr文件而不是一个arr文件包含所有Variant版本是非常重要的。每一个arr包都包含一个单一的Variant版本。 发布一个变种版本意味着构建一个可用的arr文件作为Gradle项目的输出文件。无论是发布到一个maven仓库,还是其它项目需要创建一个这个库项目的依赖都可以使用到这个文件。
Gradle有一个默认文件的概念。当添加以下配置后就会被使用到:
compile project(':libraries:lib2')
创建一个其它发布文件的依赖,你需要指定具体使用哪一个:
dependencies {
flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}
重要:注意已发布的配置是一个完整的Variant版本,其中包括了build type,并且需要像以上一样被引用。
重要:当启用非默认发布,maven发布插件将会发布其它Variant版本作为扩展包(按分类器分类)。这意味着不能真正的兼容发布到maven仓库。你应该另外发布一个单一的Variant版本到仓库中,或者允许发布所有配置以支持跨项目依赖。