Android 的 Gradle 插件有了迅猛的发展,作为进化的特征,API 和构建文件的描述语言也经过了一些不兼容的更改。如果你正在试图加载用旧版本的 Gradle 插件构建的项目,它可能无法通过 1.0.0 版本正确构建。
本文档描述了大部分常见的变动,以帮助您迁移到 1.0.0。从1.0.0 及以后的版本起,我们将尽力不进行不兼容的更改。如果我们做到了,我们将打算编写 IDE 支持,以帮助自动迁移项目。
更新插件和 Gradle 版本号
构建系统知道要使用哪一个版本的 Gradle 插件,以及哪一个版本的 Gradle 。因为它们都在您的项目文件中显式列出。当您使用 Android Studio 1.0 并打开一个旧的项目时,它将主动提出自动查找和更新这些版本号。您也可以对这些版本号进行手动编辑。
Android Gradle 插件版本通常是在项目中顶级的
build.gradle
文件内列出,并可以更新为如下内容: dependencies {
- classpath ‘com.android.tools.build:gradle:0.8.+‘
+ classpath ‘com.android.tools.build:gradle:1.0.0‘
}
你的项目所用的 Gradle 版本还应该更新为2.2.1或更新的版本。你可以通过编辑
gradle/wrapper/gradle-wrapper.properties
文件来完成: zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-all.zip
+distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-all.zip
从 0.9.x 迁移到 1.0.0
runProguard
对用户产生影响的最常见的问题是
runProguard
属性名称改为了minifyEnabled
。如果您遇到以下这种构建错误 Gradle DSL method not found: ‘runProguard()‘
那么这就是你构建错误的原因。
会突然出现很多这样的问题,是因为那个属性在 0.14.0 版本之前会被插入到由 Android Studio 创建的所有项目中。
如果要升级您的项目,请编辑您的 build.gradle 文件,如下所示:
}
release {
- runProguard true
+ minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.txt‘
在构建类型(build types)和product flavors中,还有其他一些属性也被重命名了。
类库项目中的 ApplicationId
你不能使用 applicationId 来自定义一个库项目的包名。这个包名称必须在库项目里是固定的(并且在清单中以packageName指定)。在早些时候,Gradle 插件并不强制这个约束条件。
在 BuildTypes 中重命名的属性
runProguard => minifyEnabled
zipAlign => zipAlignEnabled
jniDebugBuild => jniDebuggable
renderscriptDebug => renderscriptDebuggable
在 ProductFlavors 中重命名的属性
flavorGroups => flavorDimensions
packageName => applicationId
testPackageName => testApplicationId
renderscriptSupportMode => renderscriptSupportModeEnabled
ProductFlavor.renderscriptNdkMode => renderscriptNdkModeEnabled
其他名称更改
InstrumentTest
was renamed to androidTest
.从 0.8.x 迁移到 0.9.x
Instrumentation Tests
如果您在您的项目中已经有了instrumentation 测试 (或其他类型的测试),请注意我们把名称和文件夹从 instrumentation 测试改为了 android 测试,以反映出一个事实。这个事实是,这种功能不只是instrumentation测试,也包含着普通的 JUnit 测试(在一个设备上运行)和最终的 UI automator测试。
如果要更新您的项目
- 将您的 instrumentTest 文件夹重命名为 androidTest,例如git
mv app/src/instrumentTest app/src/androidTest。
或者,你也可以通过重新设置你的 sourcesets 告诉 gradle 继续使用旧的文件夹。 - 把所有的测试依赖从 instrumentTestCompile 更新为 androidTestCompile :
dependencies {
- instrumentTestCompile ‘com.jayway.android.robotium:robotium-solo:4.3.1‘
+ androidTestCompile ‘com.jayway.android.robotium:robotium-solo:4.3.1‘
}
库项目
用于库项目的 DSL 现在应用程序项目是一样的了。这意味着您可以创建更多的构建类型,和创建flavors。
- 你可以在buildTypes { ... }容器里创建或配置更多的构建类型。
- 您可以通过productFlavors { ... }容器创建 product flavors。
- 你可以通过signingConfigs { ... }容器创建 signingConfigs。
例如,如果在你的库项目中有如下的配置:
android {debug {}release {}
debugSigningConfig {}
}
你将要把它替换为:
android {buildTypes {debug {}release {}}
signingConfigs {
debug {}
}
}