Android Studio 3.0 新功能解析和舊項目適配

上週四,Google 終於在經歷大半年的打磨錘鍊以後正式發佈 Android Studio 3.0 版本,給廣大安卓開發人員一份滿意的答卷。如往常同樣,每次新版開發工具的發佈,不少謹慎點的朋友仍擔憂穩定性、是否存在坑等問題,選擇隔岸觀火,等一段時間再更新升級。android

通過查看官網對新版開發工具的新功能介紹以後,當天我就選擇了升級。事實上,我也的確折騰良久,可是截至目前,沒有發現所謂的坑。只是須要對舊的工程作一些配置上的調整而已。各方面響應速度和新功能的使用,整體仍是以爲值得升級。這篇文章,就來介紹新版開發工具給咱們帶來哪些實用的改變,並以實際操做經驗告訴你們,舊工程的配置須要如何作兼容修改。備註:上週作的福利活動,還有時間參與,傳送門請點擊 送書和免費加入小密圈,感謝一路有你陪我走過兩週年程序員

3.0 帶來的改變

Kotlin Support網絡

在 Android Studio 3.0 以前,使用 Kotlin 語言開發安卓應用,須要額外配置 Kotlin 插件。而新版本內置默認支持 Kotlin 語言,來減小咱們在配置上的工做。app

選擇工具欄 Code ——》 Convert Java File To Kotlin File,或者使用快捷鍵的形式,你能夠一鍵實現 Java 文件到 Kotlin 文件的轉換。ide

備註:關於快捷鍵的使用,你可使用 Command + Shift + A 這組快捷鍵打開 Find Action 窗口,輸入關鍵字尋找對應功能及其快捷鍵,效果就像上面 Gif 圖展現的這樣。工具

Java 8 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 語言特性。測試

Android Profilergradle

過去咱們使用的 Android Monitor 工具從 3.0 版本開始被 Android Profiler 替代掉了。如圖,run 按鈕一欄多了一個 Android Profiler 按鈕:

Android Profiler 提供有 CPU、Memory 和 Network 三大調試分析利器,實時跟蹤 Apk 的運行狀態,能夠幫助咱們可視化地作一些性能調優工做。

這三個工具在開發階段很是實用,好比 CPU Profiler 可以分析應用中的線程使用狀況,Memory Profiler 可以檢測出內存泄漏,Network Profiler 可以攔截網絡請求實現抓包功能等。這裏列舉一些使用圖片,簡單預覽一下這三大工具的風采:

有關這幾個工具的詳細使用細節,能夠參考官方的介紹:

  • CPU Profiler guide

  • Memory Profiler guide

  • Network Profiler guide

Device File Explorer

這個功能厲害了。新版開發工具帶來的資源管理器容許咱們訪問鏈接設備的文件系統,實現 PC 端到手機或模擬器端的便捷文件傳輸。有了這個工具,今後就能夠告別以前使用的「文件傳輸助手」等第三方工具啦。

Adaptive Icons wizard

選擇 File -> New -> Image Asset,利用 Android Studio 提供的工具建立圖片資源一直以來也是開發利器之一。如今,這個工具開始支持vector drawables 格式,而且可以建立用於適配 Android 8.0 系統上各類形狀的桌面圖標。

URL intent-filter validator

這個功能也蠻貼心的。Manifest 清單文件開始支持一個特殊的標籤,用於測試給定的 Url 字符串是否符合 intent-filter 標籤內容所定義的規則。舉個例子:

如圖,這裏使用 data 標籤訂義一個 Url 規則,並使用 tools:validation 標籤驗證一個錯誤的測試 Url 地址,檢測器可以自動識別並給出錯誤提示。這個例子很簡單,肉眼一眼就能看出錯誤。那若是是比較複雜的規則呢,可能就不那麼容易看得出來。這個時候,這個工具就能夠派上用場啦。

APK Analyzer

3.0 版本對 APK Analyzer 的功能作了進一步強化。主要在於:對於使用 ProGuard 混淆過的 APK 文件,咱們可以上傳 mapping.txt 文件進行代碼還原;Dex 文件提供顯示各個包目錄的大小;等等。

其餘功能

除了上面介紹的這些變化,還有一些其餘大大小小的變動。好比 Layout Inspector 和 Layout Editor 工具在 UI 上有所調整,好比 App Links Assistant 和 Firebase App Indexing Assistant 的強化使用,這些留着你們本身去探索發現吧。也能夠訪問 Android Studio Release Notes 官網,瞭解 3.0 版本的更多發佈細節。

舊項目的適配

Android Studio 3.0 發佈的同時,Android Plugin for Gradle 3.0.0 也同時發佈。編譯速度總體都獲得了大幅提高。升級完 Android Studio 以後,舊的工程須要作出部分改變,才能經過 Gradle 的編譯。這裏根據個人一個實際項目,介紹一下須要改變的內容。固然,也許你的項目用不上這些,也可能不止這些。

distributionUrl

Plugin 3.0.0+ 須要配置 Gradle 的最小版本是 4.1,咱們能夠經過 File -> Project Structure -> Project 的方式設置 Android Plugin 的版本,或者修改 gradle.properties 文件的內容,添加 distributionUrl 屬性:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

Google's Maven repository

新版 Android Studio 工具默認使用 Google’s Maven Repository 用於下載依賴 Android Support Library,替代了 Android SDK Manager 的本地依賴方式。因此,須要在工程根目錄下的 build.gradle 文件中添加 google() 一行代碼:

allprojects {
    repositories {
        google()
    }
}

buildToolsVersion

Android Plugin For Gradle 3.0.0 默認自動添加插件所須要用到的最小版本的編譯工具。因此,咱們不須要再手動在 build.gradle 添加一行 buildToolsVersion 屬性的代碼。對於舊的項目,能夠去掉這行配置,好比:

android {
    compileSdkVersion 26
    // remote buildToolsVersion
    buildToolsVersion "25.0.2"
    ...
}

each() 和 outputFile()

Plugin 3.0.0 版本移除了一些用於編譯配置的 API,其中比較常見的就是 each() 和 outputFile(),兩個經常使用於修改輸出 Apk 文件名和路徑的方法。

在以前的文章 Android Gradle 經常使用使用場景實現方式的總結 中有提到,自定義輸出 APK 文件名能夠這樣作:

android {
    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(output.outputFile.parent, rootProject.getName()
                    + "-" + buildType.name
                    + "-" + releaseTime()
                    + "-v" + defaultConfig.versionName
                    + "-" + defaultConfig.versionCode
                    + ".apk");
        }
    }
}

可是使用 Plugin 3.0.0 時就會出現編譯報錯,咱們須要修改 each() 和 outputFile() 方法爲 all() 和 outputFileName,好比:

android {
    android.applicationVariants.all { variant ->
        variant.outputs.all { 
            outputFileName = rootProject.getName()
                    + "-" + buildType.name
                    + "-" + releaseTime()
                    + "-v" + defaultConfig.versionName
                    + "-" + defaultConfig.versionCode
                    + ".apk";
        }
    }
}

對於舊的工程,基本上即是這些配置上的適配修改。若是你還遇到了別的問題,別緊張,按照編譯錯誤提示一步步操做,也能成功經過編譯。整體來講,此次 Android Studio 3.0 和 Plugin For Gradle 3.0.0 的發佈仍是很是值得升級嘗試的,並無網上說的那麼多坑。況且,咱們做爲寫代碼的程序員,原本不就是爲了解決問題而來嘛。

相關文章
相關標籤/搜索