Android studio3.0 正式版25號(hào)發(fā)布狸驳,剛好項(xiàng)目上個(gè)版本更新完行疏,然后 花了兩天時(shí)間更新成功(實(shí)際一天不到柠逞,中間各種評審劃水過時(shí)間)。成功跑完之后璧亮,在這里總結(jié)下遇到的問題萧诫。
1.升級
如果之前沒有出現(xiàn)過升級 3.0正版提示的在打開 studio的時(shí)候會(huì)收到提示然后就是直接等待下載升級斥难,如果沒有提示
更新之后會(huì)提示升級 build tool 到 26.0.2 照做就行
2.移除apt
因?yàn)樵?.0開始 使用annotationProcessor代替apt。不可再使用apt帘饶,否則會(huì)編譯報(bào)錯(cuò)哑诊。
Error:android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead.
去掉
//主 gradle
` apply plugin: 'com.neenbedankt.android-apt'
//項(xiàng)目 gradle
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
把
apt 'com.google.dagger:dagger-compiler:2.10-rc2'
改成
annotationProcessor 'com.google.dagger:dagger-compiler:2.10-rc2'
3.修改輸出apk的文件名導(dǎo)致的異常
1868359-7833eb3e63cf5361.png
點(diǎn)擊Open File定位到應(yīng)用級別的build.gradle文件中.谷歌一下后發(fā)現(xiàn)原來以前常用的apk文件名稱修改腳本在3.0中會(huì)報(bào)錯(cuò)
// 自定義輸出配置
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 輸出apk名稱為xxx_2_xxx.apk
def fileName = "dqxt_${defaultConfig.versionCode}_${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
通過官方的引導(dǎo)可以改成這樣
//AS3.0版本 自定義輸出配置
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "xxx_${defaultConfig.versionCode}_${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
}
}
4.butterknife問題
Gradle sync failed: Cause:
com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;
Consult IDE log for more details (Help | Show Log) (8s 123ms)
編譯的時(shí)候出現(xiàn)這種問題,在stackoverflow上搜了下發(fā)現(xiàn)有很多相同問題點(diǎn)了第一個(gè)進(jìn)去及刻,發(fā)現(xiàn)有兩種方法
降級或者升級搭儒,降級是把 butterknife-gradle-plugin 降級到 8.4.0,升級是升到 9.0 snapshot提茁,因?yàn)樵瓉?沒有升過9.0 直接選擇降級到8.4.0
//主 gradle
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
//項(xiàng)目 gradle
//視圖綁定 butterknife
implementation "com.jakewharton:butterknife:$rootProject.butterknifeVersion"
annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterknifeVersion"
5.移除retrolambda
Android studio 3.0 加入了Java1.8淹禾,這使得 原來的 retrolamdba的插件會(huì)產(chǎn)生沖突 所以把原來的retrolambda插件移除
//主 gradle
apply plugin: 'me.tatarka.retrolambda'
//項(xiàng)目 gradle
classpath 'me.tatarka:gradle-retrolambda:3.7.0'
6.multidex1.0.2問題
因?yàn)間oogle把自家的依賴收回到自家的CDN服務(wù)器 所以原來在項(xiàng)目 build.gradle中的jcenter()就能獲取的依賴現(xiàn)在必須添加 google()自己的依賴了。
repositories {
jcenter()
mavenCentral()
google()
}
allprojects {
repositories {
jcenter()
mavenCentral()
google()
maven { url "https://jitpack.io" }
maven { url 'https://maven.google.com' }
}
}
在stackoverflow上看到可能會(huì) GFW 所以 把 google() 和maven { url 'https://maven.google.com' }都添加上了
7.AAPT2編譯異常
image.png
解決方案
1.使用低版本的support包,把項(xiàng)目所有support包的版本配置到25.2.0或者其它較低的版本
2.配置gradle.properties中關(guān)閉AAPT2編譯,說人話就是在其中增加android.enableAapt2=false配置,再次編譯問題解決(推薦),例如
android.enableAapt2=false
可能會(huì)出現(xiàn)找不到 gradle.properties茴扁,可以把別的項(xiàng)目的gradle.properties復(fù)制過來铃岔,粘貼到項(xiàng)目根目錄。
8.flaovr配置問題
Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
在google 的官方文檔中給出的方法是
android {
defaultConfig {
flavorDimensions "tier","minApi"
}
}
productFlavors {
free {
// Assigns this product flavor to the "tier" flavor dimension. Specifying
// this property is optional if you are using only one dimension.
dimension "tier"
...
}
paid {
dimension "tier"
...
}
minApi23 {
dimension "minApi"
...
}
minApi18 {
dimension "minApi"
...
}
}
9.更新3.0 后 compile過時(shí)使用新的 implementation和api
后兩者和 compile 一樣都是依賴峭火,其中 api和 compile 可以說是一模一樣 只不過改了個(gè)名字毁习,而implementation 的特點(diǎn)就是,對于使用了該命令編譯的依賴卖丸,對該項(xiàng)目有依賴的項(xiàng)目將無法訪問到使用該命令編譯的依賴中的任何程序纺且,也就是將該依賴隱藏在內(nèi)部,而不對外部公開稍浆。
在Google IO 相關(guān)話題的中提到了一個(gè)建議载碌,就是依賴首先應(yīng)該設(shè)置為implementation的,如果沒有錯(cuò)衅枫,那就用implementation嫁艇,如果有錯(cuò),那么使用api指令弦撩。使用implementation會(huì)使編譯速度有所增快步咪。