AS3.0升級埋坑之路

LiuZhiPeng1214發表於2017-11-08

1.pic.jpg
1.pic.jpg

10月26日,谷歌在經過大半年的磨練後終於釋出了Android studio 3.0 正式版,給廣大Android 開發人員一份滿意的答卷,如同往常一樣,大多數人擔心版本穩定性,是否存在坑等問題選擇隔岸關火,等過段時間在選擇升級,我也是猶豫很久,經過仔細檢視官方文件後選擇了升級,以下將自己在升級過程中遇到的問題分享給大家。

AS3.0的版本特性


Kotlin Support

正如Google I / O 2017宣佈的那樣,Kotlin程式語言現在在Android上正式得到支援。所以在這個版本中,Android Studio包含了Android開發的Kotlin語言支援。

選擇工具欄 Code -> Convert Java File To Kotlin File,或者使用快捷鍵的形式,你可以一鍵實現 Java 檔案到 Kotlin 檔案的轉換。

image
image

具體檢視 官網add Kotlin to your project

Java 8 language features support

3.0 對 Java 8 語言特性的預設支援使你不用在 build.gradle 配置檔案中新增 jackOptions 一項。如果你有使用到的話,記得刪除:

android {
    ...
    defaultConfig {
        ...
        // Remove this block.
        jackOptions {
            enabled true
            ...
        }
    }
}複製程式碼

選擇工具欄 File->Project Structure,修改 Source Compatibility 和 Target Compatibility 選項到 1.8 即可使我們的專案支援 Java 8 語言特性。

image
image

Android Profiler

新的Android Profiler 取代了Android Monitor工具,並提供了一套新的工具來實時測量您的應用程式的CPU,記憶體和網路使用情況。您可以執行基於樣本的方法跟蹤來定時執行程式碼,捕獲堆轉儲,檢視記憶體分配以及檢查網路傳輸檔案的詳細資訊。
如下圖所示,點選圖示即可開啟

2.pic.jpg
2.pic.jpg
詳細內容檢視官方文件

Device File Explorer

新版開發工具帶來的資源管理器允許我們訪問連線裝置的檔案系統,實現 PC 端到手機或模擬器端的便捷檔案傳輸。有了這個工具,從此就可以告別之前使用的「檔案傳輸助手」等第三方工具啦

image
image

開啟方式為 :View > Tool Windows > Device File Explorer.
具體詳情看官網 Device File Explorer guide

Adaptive Icons wizard

選擇 File -> New -> Image Asset,利用 Android Studio 提供的工具建立圖片資源一直以來也是開發利器之一。現在,這個工具開始支援
vector drawables 格式,並且能夠建立用於適配 Android 8.0 系統上各種形狀的桌面圖示。

image
image

其他功能

大家可以參考官方文件 Android Studio Release Notes


舊專案遷移遇到的坑


在Android studio 3.0釋出的同時,Android Plugin for Gradle 3.0.0 也同時釋出了 ,編譯速度得到巨大提升,因為Android Plugin for Gradle 3.0.0 對新增依賴的方法有很大的變化,會導致舊專案不能被編譯通過。所以需要對舊專案做必要的修改才能通過Gradle 編譯。下面我根據一個工程來記錄一下埋坑之路。

#####gradle 升級錯誤
因為Android Plugin for Gradle 3.0.0需要Gradle版本4.1或更高版本,所以需要將gradle升級

image
image

由於國內限制訪問的原因,不能線上更新,翻牆除外,所以給大家上離線更新方法。

  • windows系統
    檢視所需gradle版本:開啟C:\Users\使用者名稱.gradle\wrapper\dists\gradle-x.xx-all\xxxxxxxxxxxx,如果裡面的 gradle-xx-all.zip不完整(如0KB),則說明下載不成功,需要下載離線包放置到該目錄下。如下所示

    image
    image
    那麼,則需要下載gradle-2.8-all.zip。gradle各個版本離線包下載地址:download.csdn.net/album/detai…
    匯入完成後,執行AS之後會自動解壓,如下。重新開啟專案就可以了~~
    image
    image

  • mac系統
    1.找到.gradle目錄,一般在/User/<使用者名稱>/下;需要執行defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder命令顯示隱藏的檔案即可看到.gradle資料夾
    2.進入.gradle/wrapper/dists/gradle-4.1-all/xxxxxxxxxxxxxxx資料夾下,刪除.part檔案
    3.去gradle網站下載對應的gradle-4.1-all.zi檔案,下載完成後不解壓放入xxxxxxxxxxxxx資料夾下
    4.重新開啟android studio問題已經解決

新版 Android Studio 工具預設使用 Google’s Maven Repository 用於下載依賴 Android Support Library,替代了 Android SDK Manager 的本地依賴方式。所以,需要在工程根目錄下的 build.gradle 檔案中新增 google() 一行程式碼:

allprojects {
    repositories {
        google()
    }
}複製程式碼

將project下的build.gradle修改為

4.pic.jpg
4.pic.jpg

接下來是這三個error,我們一個個解決

1.pic_hd.jpg
1.pic_hd.jpg

Android Plugin For Gradle 3.0.0 預設自動新增外掛所需要用到的最小版本的編譯工具。所以,我們不需要再手動在 build.gradle 新增一行 buildToolsVersion 屬性的程式碼。對於舊的專案,可以去掉這行配置,比如:

android {
     compileSdkVersion 26
    //remove buildToolsVersion
    //buildToolsVersion '26.0.2'
    ...
}複製程式碼

Error:android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead.,以為plugin開始,第三方android-adt不在受支援,所以這個問題根據建議,我們將專案中的adt 替換成 annotationProcessor,以butterknife為例

將根目錄下的build.gradle 中的依賴移除

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        //移除
        //classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

    }
}複製程式碼

將 app下的adt依賴替換成 annotationProcessor,然後將apply plugin: 'android-apt'去除,例如:

2.pic.jpg
2.pic.jpg
3.pic.jpg
3.pic.jpg

Error:All flavors must now belong to a named flavor dimension. Learn more at d.android.com/r/tools/fla…

對於這個錯誤,Plugin 3.0.0 開始,如果 build.gradle 自定義有 productFlavors 配置的話,需要新增定義 flavorDimensions(風味維度)。否則,編譯報錯。
flavorDimensions 的出現使得構建變種型別更加多樣化,詳細可參閱 配置構建變體
在這裡我們為了舊專案的順利編譯 加一個預設值

flavorDimensions "default"

productFlavors {
    beta {
      ...
    }

    production {
        ...
    }
}複製程式碼

接下來會遇到樣式找不到的問題

4.pic_hd.jpg
4.pic_hd.jpg

這是因為在 Plugin 3.0.0開始,AAPT2 預設被開啟,我們關掉它就好了,在gradle.properties中加一行

android.enableAapt2=false複製程式碼

最後是這個問題

5.pic_hd.jpg
5.pic_hd.jpg

因為在3.0.0開始,compile被棄用,將不適合本地庫和庫依賴,例如

 implementation project(':library')複製程式碼

如果主專案有多個buildTypes,相應的本地庫也應該新增對應的buildTypes。例如
主專案

buildTypes {
  release {}
  debug{}
}

library裡也應該新增
buildTypes {
  release {}
  debug{}
}複製程式碼

對於舊的工程,上面就是我遇到的問題,如果你還遇到別的問題,別緊張,靜下心來仔細看看官網,一切問題會迎刃而解。

相關文章