Android 的 Gradle 插件有了迅猛的發(fā)展,作為進(jìn)化的特點(diǎn),API 和構(gòu)建文件的描寫(xiě)語(yǔ)言也經(jīng)過(guò)了1些不兼容的更改。如果你正在試圖加載用舊版本的 Gradle 插件構(gòu)建的項(xiàng)目,它可能沒(méi)法通過(guò) 1.0.0 版本正確構(gòu)建。
本文檔描寫(xiě)了大部份常見(jiàn)的變動(dòng),以幫助您遷移到 1.0.0。從1.0.0 及以后的版本起,我們將盡力不進(jìn)行不兼容的更改。如果我們做到了,我們將打算編寫(xiě) IDE 支持,以幫助自動(dòng)遷移項(xiàng)目。
更新插件和 Gradle 版本號(hào)
構(gòu)建系統(tǒng)知道要使用哪個(gè)版本的 Gradle 插件,和哪個(gè)版本的 Gradle 。由于它們都在您的項(xiàng)目文件中顯式列出。當(dāng)您使用 Android Studio 1.0 并打開(kāi)1個(gè)舊的項(xiàng)目時(shí),它將主動(dòng)提出自動(dòng)查找和更新這些版本號(hào)。您也能夠?qū)@些版本號(hào)進(jìn)行手動(dòng)編輯。
Android Gradle 插件版本通常是在項(xiàng)目中頂級(jí)的build.gradle
文件內(nèi)列出,并可以更新為以下內(nèi)容:
dependencies {
- classpath 'com.android.tools.build:gradle:0.8.+'
+ classpath 'com.android.tools.build:gradle:1.0.0'
}
你的項(xiàng)目所用的 Gradle 版本還應(yīng)當(dāng)更新為2.2.1或更新的版本。你可以通過(guò)編輯gradle/wrapper/gradle-wrapper.properties
文件來(lái)完成:
zipStorePath=wrapper/dists
-distributionUrl=http://services.gradle.org/distributions/gradle⑴.11-all.zip
+distributionUrl=http://services.gradle.org/distributions/gradle⑵.2.1-all.zip
再說(shuō),當(dāng)你打開(kāi)1個(gè)舊項(xiàng)目時(shí)Android Studio應(yīng)當(dāng)有提供自動(dòng)履行此編輯:
從 0.9.x 遷移到 1.0.0
runProguard
對(duì)用戶產(chǎn)生影響的最多見(jiàn)的問(wèn)題是runProguard
屬性名稱改成了minifyEnabled
。如果您遇到以下這類構(gòu)建毛病
Gradle DSL method not found: 'runProguard()'
那末這就是你構(gòu)建毛病的緣由。
會(huì)突然出現(xiàn)很多這樣的問(wèn)題,是由于那個(gè)屬性在 0.14.0 版本之前會(huì)被插入到由 Android Studio 創(chuàng)建的所有項(xiàng)目中。
如果要升級(jí)您的項(xiàng)目,請(qǐng)編輯您的 build.gradle 文件,以下所示:
}
release {
- runProguard true
+ minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
在構(gòu)建類型(build types)和product flavors中,還有其他1些屬性也被重命名了。
類庫(kù)項(xiàng)目中的 ApplicationId
你不能使用 applicationId 來(lái)自定義1個(gè)庫(kù)項(xiàng)目的包名。這個(gè)包名稱必須在庫(kù)項(xiàng)目里是固定的(并且在清單中以packageName指定)。在早些時(shí)候,Gradle 插件其實(shí)不強(qiáng)迫這個(gè)束縛條件。
在 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
Gradle 的 Android 插件(Gradle plugin for Android)的 0.9 版本統(tǒng)做了1些不兼容的更改,這些修改需要您的項(xiàng)目也進(jìn)行更新。這1頁(yè)文檔介紹了如何更新您的項(xiàng)目。請(qǐng)注意這不是這個(gè)插件的 0.9 版本中的所作更改的完全列表;它只是涵蓋需要了你的源文件需要進(jìn)行更新的那些更改。有關(guān)這些修改的完全的列表,請(qǐng)參見(jiàn). 用戶指南
Instrumentation Tests
如果您在您的項(xiàng)目中已有了instrumentation 測(cè)試 (或其他類型的測(cè)試),請(qǐng)注意我們把名稱和文件夾從 instrumentation 測(cè)試改成了 android 測(cè)試,以反應(yīng)出1個(gè)事實(shí)。這個(gè)事實(shí)是,這類功能不只是instrumentation測(cè)試,也包括著普通的 JUnit 測(cè)試(在1個(gè)裝備上運(yùn)行)和終究的 UI automator測(cè)試。
如果要更新您的項(xiàng)目
- 將您的 instrumentTest 文件夾重命名為 androidTest,例如git
mv app/src/instrumentTest app/src/androidTest。
或,你也能夠通太重新設(shè)置你的 sourcesets 告知 gradle 繼續(xù)使用舊的文件夾。 - 把所有的測(cè)試依賴從 instrumentTestCompile 更新為 androidTestCompile :
dependencies {
- instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.3.1'
+ androidTestCompile 'com.jayway.android.robotium:robotium-solo:4.3.1'
}
庫(kù)項(xiàng)目
用于庫(kù)項(xiàng)目的 DSL 現(xiàn)在利用程序項(xiàng)目是1樣的了。這意味著您可以創(chuàng)建更多的構(gòu)建類型,和創(chuàng)建flavors。
- 你可以在buildTypes { ... }容器里創(chuàng)建或配置更多的構(gòu)建類型。
- 您可以通過(guò)productFlavors { ... }容器創(chuàng)建
product flavors。
- 你可以通過(guò)signingConfigs { ... }容器創(chuàng)建
signingConfigs。
例如,如果在你的庫(kù)項(xiàng)目中有以下的配置:
android {
debug {
}
release {
}
debugSigningConfig {
}
}
你將要把它替換為:
android {
buildTypes {
debug {
}
release {
}
}
signingConfigs {
debug {
}
}
}