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的隨機小數(不包含0和1),再用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]內被除3餘1並且被除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功能的文章實在是太少了,為了讓更多