1. 程式人生 > >Android studio升級3.0.1遇到的坑及Android Studio 3.0 新功能解析和舊專案適配

Android studio升級3.0.1遇到的坑及Android Studio 3.0 新功能解析和舊專案適配

近日將Android studio升級到3.0.1,Gradle升級到了4.1,升級好之後發現遇到了不少問題,具體如下:

一、APK打包批量修改APK名稱匯出功能報錯

Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated

output.outputFile變成了只讀屬性,不能再往裡面寫東西了,以下是3.0之前的配置:

applicationVariants.all { variant ->    //批量修改Apk名字    variant.outputs.each { output ->
        def outputFile = output.outputFile        if (outputFile != null && outputFile.name.endsWith('.apk') && 'release'.equals(variant.buildType.name)) {
def fileName = "release_v${defaultConfig.versionName}_${realTime()}.apk"
output.outputFile = new File(releaseFile.parent, fileName)
        }    }}

現在不能為修改賦值了,

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def releaseFile = output.outputFile;
        if (releaseFile.name.endsWith('release.apk')) {
             //獲取簽名的名字 variant.signingConfig.name
            /*def fileName = "release_v${defaultConfig.versionName}_${realTime()}.apk"
output.outputFile = new File(releaseFile.parent, fileName)*/ outputFileName = "release_v${defaultConfig.versionName}_${realTime()}.apk" } } }

二、Android Studio 3.0 butterknife:7.0.1配置的問題

Error:Execution failed for task ‘:app:javaPreCompileDebug'.Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration. - butterknife-7.0.1.jar (com.jakewharton:butterknife:7.0.1)Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior. Note that this option is deprecated and will be removed in the future. 解決辦法:在專案的project 的build.gredle 檔案中的dependencies標籤下刪除。classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8';在module的build.gredle 檔案中刪除apply plugin: 'android-apt';在module的build.gredle 檔案中的dependencies標籤中刪除apt 'com.jakewharton:butterknife-compiler:8.4.0',加上 annotationProcessor ‘com.jakewharton:butterknife:7.0.1'即可解決。三、、、、Android Studio 3.0 新功能解析和舊專案適配Android Studio升級後可能會遇到一些問題,需要對舊的工程做一些配置上的調整而已。下面文章就來介紹新版開發工具給我們帶來哪些實用的改變,並以實際操作經驗告訴大家,舊工程的配置需要如何做相容修改。

3.0 帶來的改變

Kotlin Support

在 Android Studio 3.0 之前,使用 Kotlin 語言開發安卓應用,需要額外配置 Kotlin 外掛。而新版本內建預設支援 Kotlin 語言,來減少我們在配置上的工作。

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

備註:關於快捷鍵的使用,你可以使用 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 Profiler

過去我們使用的 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 的釋出還是非常值得升級嘗試的。

相關推薦

Android studio升級3.0.1遇到的Android Studio 3.0 功能解析專案

近日將Android studio升級到3.0.1,Gradle升級到了4.1,升級好之後發現遇到了不少問題,具體如下:一、APK打包批量修改APK名稱匯出功能報錯Cannot set the value of read-only property 'outputFile'

Android Studio 3.0 功能解析專案

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

Mac 升級pip 9.0.1到10.0.1記錄

首先你要pip安裝某一個工具的時候遇到下面類似的錯誤 Traceback (most recent call last): File "/Users/finaris/PycharmProjects/test/test/test.py", line 14

Android Studio 3.2.1找不到Android Device Monitor

 再這彙總一下這段時間使用android monitor新遇到的問題,特彙總對應問題解決辦法如下: 1、確保JDK和Android studio位數相同,比如JDK使用的是64位,studio也要是64位,否則會報錯; 2、直接在命令視窗中執行monitor時提示 'lib\monitor-location'

Android 8.0 的部分對應解決方法

channel 資料 兼容 androi adb install 只需要 方法 tps 雖然 Android 9.0 都已經面世了,本篇文章寫的有點遲了。 但是遲到好過不到,因此基於此這邊還是記錄一下項目中遇到的 Android 8.0 的坑及對應解決方法。 每次系統

升級.Net Core 1.x App .Net Standard 1.x Library 到2.0

從網上找到的一些.net core 例子,發現都是1.x的了。現在已更新2.0,但是光在專案裡邊選擇SDK 2.0並不能完美解決上圖:這就尷尬了。只能手動改了這樣就可以編譯成功了。至於程式碼裡邊的一些不相容性,需要一點點按手冊來改了

編譯FFmpeg4.0.1並移植到Android app中使用(最詳細的FFmpeg-Android編譯教程)

1.搭建編譯環境 1.安裝ubuntu14.04,安裝完成後執行以下命令 apt-get update apt-get install yasm apt-get install pkg-config 2.下載ndk 我用的是ndk r14b,附上下載地址:https://dl

webpack4.0.1,持續補充

       webpack4在2月底正式釋出後,原來的很多做法不能使用,下面把使用webpack4.0.1過程中,出現的問題,一一記錄,也歡迎大家補充,謝謝!團結就是力量,眾人拾柴火焰高,加油!1、不再支援node.js4.X2、不能用webpack命令直接打包指定的檔案,

把M位的2^M種不同的0-1串按圓排列劃分(3)終結

接上篇 對迴圈的解析原理就是把n分解成n個數相加的種類。 對迴圈的解析如下(以M=6為例): 上篇的楊輝三角數是:1,6,15,20,15,6,1 對應的1的個數是0,1,2,3,4,5,6 由於0和1的對稱性,只需分析1的個數是0,1,2,3的情況。 0個1,自然只有一個

request.getRemoteAddr() 獲取的值為0:0:0:0:0:0:0:1的原因解決辦法

測試 127.0.0.1 文件 在服務器 臺電 屬於 sts javaweb項目 服務器和客戶端 問題: 在近期開發的javaweb項目中,需要記錄登錄時的電腦ip地址和主機名,通過request.getRemoteAddr()和request.getRemoteHost(

webpack4.0.1安裝問題解決方法

style onf 出了 main 但是 sep 提示 js文件 har 2月底的時候,webpack4正式發布了,但是當我們安裝之後,使用下面的語句來打包的時候,發現打包失敗了 webpack ./src/main.js ./dist/bundle.js 並且給出了下

【附有安裝包連線】mysql 8.0的一些包括採用PHP 7.0 連線時報錯Unexpected server respose while doing caching_sha2 auth: 109

連結:https://pan.baidu.com/s/1cMzgEKXb9Cpkjbz9APOhiw 提取碼:ld0x 【mysql 8.0】 注: 此版本使用caching_sha2_password的身份驗證機制。在以往的版本中採用的是mysql_native_passwo

thymeleaf-extras-db 0.0.1釋出,select標籤載入資料的姿勢

在寫thymeleaf頁面的時候,我為了偷懶,不想為每個select下拉列表框都寫一個介面,於是這個懶人jar誕生了。該jar的核心功能是直接通過thymeleaf頁面的自定義標籤的屬性,直接執行sql並初始化select資料。 專案地址: github gitee 簡介 thymeleaf-extra

VB 生成0~1的隨機小數(不包含01),再用VB,感慨萬千

今天迫於無奈,接手一個已經離職快兩年的前同事的程式碼(VB6.0),增加一個生成0~1之間隨機數的功能。 VB中的寫法:Rnd() 為了美觀,還要格式化: xxx = Format(Rnd(), "0.000") 無意中看到了MS公司的產品生命週期列表,VB6的如下: 也就

伺服器常用陳列raid0,raid1,raid5,raid10(0+1)詳解區別

raid0 就是把多個(最少2個)硬碟合併成1個邏輯盤使用,資料讀寫時對各硬碟同時操作,不同硬碟寫入不同資料,速度快。  raid1就是同時對2個硬碟讀寫(同樣的資料)。強調資料的安全性。比較浪費。 raid5也是把多個(最少3個)硬碟合併成1個邏輯盤使用,資料讀寫時會建

redis4.0.1主從配置Sentinel配置自動Failover

一、單機版 1、前提條件 yum install gcc-c++  2、安裝redis wget http://download.redis.io/releases/redis-4.0.1.tar.gz tar -xf redis-4.0.1.tar.gz cd red

C語言網——【求[X,Y]內被除31並且被除5餘3的整數的

題目描述輸入兩個正整數X,Y,求出[X,Y]內被除3餘1並且被除5餘3的整數的和輸入輸入兩個正整數X,Y輸出求所有滿足條件的數的和樣例輸入200 800 樣例輸出20020嗯。。水題,找到第一個符合除3餘1且除5餘3的數後就可以直接用等差數列和算了,因為下一個符合條件的數就是

Extjs5.0(1):簡單暴力地窺視Extjs5.0的真容

雖然Extjs5.1 beta版已經出來了,但是我們這裡還是使用5.0版本,因為用5.1建立的專案,會有”beta”水印,非常不爽。 廢話不多說,開始簡單暴力的窺視Extjs5.0的真容。 隨便在硬碟上找一個地方,建立資料夾,這裡命名為”test”吧。開啟test資料夾,新

VC6.0改變按鈕顏色文字顏色(3)

以下為詳細的完成方式: 參加一個新類,類實:CMyButton,基類:CButton。 正在標頭檔案 MyButton.h 中參加以下變質和函式界說: private:intm_Style;//按鈕外形(0-一般,1-以後,2-按下,3-鎖訂)BOOLb_InRec

Android Studio功能解析,你真的瞭解Instant Run嗎?

轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/51271369 本篇文章首發於我的微信公眾號,由於網上講解Android Studio中Instant Run功能的文章實在是太少了,為了讓更多