Android Studio 3.0及Gradle Plugin 3.0升級過程中踩到的那些坑
前言:
2018轉眼已經過去一快小半年,墮落了很長一段時間,覺得回到家鄉小地方,沒有了追求技術的熱情。直到前段時間跟以前的同事聊的過程中發現自己已經脫離正軌了。雖然不再北上廣深了,但是技術還是得靠自己去折騰。也許有一天回過頭來看看,自己曾經那麼愛android是吧。哈哈。廢話不多扯了,直接進入今天要給大家帶來的嘮嗑。
正題:
大家都知道Android已經到android8了,開發工具也持續更新到Android Studio3.1了,gradle也更新到4.4了,也許你可能要問,我為啥要更新,用原來的2.×的版本不行麼?行,怎麼會不行呢,只是很多技術是向前看的,工具也是要跟上時代,才能達到事半功倍的效果,
1.Gradle Plugin升級到3.0.0
及以上,修改project/build.gradle
檔案:
buildscript { repositories { ... // You need to add the following repository to download the // new plugin. google() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0'//這裡知道是3.0.0以上就可以 } }
2.Gradle升級到4.1
及以上,修改project/gradle/gradle-wrapper.properties
檔案:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
3.生成APK檔名屬性outputFile
變為只讀
改完第一步後,編譯會報如下錯誤:這個是生成APK的打包檔案
Error:(88, 0) Cannot set the value of read-only property ‘outputFile’ for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=appDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
之前的Apk打包檔案類似這樣:
// 自定義匯出apk名稱
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
if (variant.buildType.name.equals('release')) {
def fileName = "mobiletianya-v${defaultConfig.versionName}-${defaultConfig.versionCode}-release.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
if (variant.buildType.name.equals('debug')) {
def fileName = "mobiletianya-v${defaultConfig.versionName}-${defaultConfig.versionCode}-debug.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
而升級後由於outputFile
屬性變為只讀,需要進行如下修改,直接對outputFileName
屬性賦值即可:
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
if (variant.buildType.name.equals('release')) {
def fileName = "mobiletianya-v${defaultConfig.versionName}-${defaultConfig.versionCode}-release.apk"
outputFileName = fileName
}
if (variant.buildType.name.equals('debug')) {
def fileName = "mobiletianya-v${defaultConfig.versionName}-${defaultConfig.versionCode}-debug.apk"
outputFileName = fileName
}
}
}
}
4.關鍵字的依賴傳遞
- api: 對應之前的
compile
關鍵字,功能一模一樣。會傳遞依賴,導致gradle編譯的時候遍歷整顆依賴樹 - implementation: 對應之前的
compile
,與api
類似,關鍵區別是不會有依賴傳遞 - compileOnly: 對應之前的
provided
,依賴僅用於編譯期不會打包進最終的apk中 - runtimeOnly: 對應之前的’apk’,與上面的
compileOnly
相反
關於implementation
與api
的區別,主要在依賴是否會傳遞上。如:A依賴B,B依賴C,若使用api
則A可以引用C,而implementation
則不能引用。
以上四點是最基本的,實際應用中一寫lib包的依賴關係主要也是圍繞這幾點來修改
註明:下面是一些遇到的小問題:
1.Aapt2異常
升級到3.0.0版本,編譯之前正常的專案後報錯Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for
上面是官方的文件介紹,我們可以看到在gradle3.0.0中AAPT2是預設開啟的,在專案的gradle.properties中新增android.enableAapt2=false,sync後就編譯通過了
這幾個是比較公用的,剩下那些是跟自己專案相關的,具體專案具體分析,後續繼續更新
相關推薦
Android Studio 3.0及Gradle Plugin 3.0升級過程中踩到的那些坑
前言: 2018轉眼已經過去一快小半年,墮落了很長一段時間,覺得回到家鄉小地方,沒有了追求技術的熱情。直到前段時間跟以前的同事聊的過程中發現自己已經脫離正軌了。雖然不再北上廣深了,但是技術還是得靠自己去折騰。也許有一天回過頭來看看,自己曾經那麼愛android是吧。哈哈。廢
Android Studio Could not GET gradle-3.2.0.pom (安卓包配置相關問題)
could 9.png too spa not pom .com sharp 安卓 安卓出現的錯誤如下 Could not GET ‘https://dl.google.com/dl/android/maven2/com/android/tools/build/gradl
Android Studio:Minimum supported Gradle version is 3.3. Current version is 3.2 問題解決
轉自:https://blog.csdn.net/jinzhengxi/article/details/70338708 今天把Android Studio再次進行了更新,從2.2.3更新到了2.3版本,開啟之前的工程一直提示讓我升級,如下圖所示: PS: 我的工程是使用Androi
Android Studio專案打包:常見錯誤3:com.android.ide.common.process.ProcessException: Failed to execute aapt
Error while generating dependencies split APK com.android.ide.common.process.ProcessException: Failed to execute aapt Caused by: java.util.NoSuchE
使用Android Studio進行簽名及使用gradle配置簽名
一、Debug模式下的簽名 執行或從IDE除錯專案時,Android的Studio會自動由Android SDK工具生成的除錯證書籤名的APK。您執行或除錯Android Studio中的專案第一次,IDE會自動在除錯金鑰庫和證書 $HOME/.android/
ANDROID STUDIO系列教程六--GRADLE多渠道打包
tor 等待 time() utf 腳本 manifest file resource 一個 由於國內Android市場眾多渠道,為了統計每個渠道的下載及其它數據統計,就需要我們針對每個渠道單獨打包,如果讓你打幾十個市場的包豈不煩死了,不過有了Gradle,這再也不是事了。
Android Studio卡在refreshing gradle project的原因和快速解決辦法
adl 當前 files 成了 span jsb text eas 遇到 這個問題遇到過很多次,網上也有很多解決辦法,但是好像都沒有發現refreshing gradle project在做什麽。 可以再試試 ./gradlew --info 看看詳細信息。 一般refre
擁抱 Android Studio 之五:Gradle 插件開發
變量 -h min gui root artifact direct 抽象 path 實踐出真知 筆者有位朋友。每次新學一門語言,都會用來寫一個貪吃蛇遊戲,以此來檢驗自己學習的成果。筆者也有相似體會。所謂紙上得來終覺淺
如何用Android Studio查看build.gradle源碼
容易 https ask 基礎 groovy shu result 支持 ref 上一篇博客裏講過 build.gradle 裏的每一行代碼基本都是在調用一個方法,既然是這樣,我們就可以用 android studio(下面簡稱as) 去查看它源碼的方法註釋說明,這樣就可以
Mac android studio 一直卡在Gradle:Build Running的解決辦法
1.找到路徑/Users/michael/.gradle/wrapper/dists/gradle-4.1-all/bzyivzo6n839fup2jbap0tjew,在此資料夾下有一個gradle版本資料夾,開啟後是一個名字很長的資料夾,例如我的/Users/michael/.gradle/wrapper/
Android Studio使用Google Flutter完整教程 【0】
轉載自:https://blog.csdn.net/gfg156196/article/details/81118368 一套程式碼 iOS、Android 兩端執行,Google Flutter 實在太強大。。 “Flutter 可幫助你更容易、更快速的開發介面美觀的移動
android studio 裝置除錯及Logcat檢視
文章轉載自:http://www.cnblogs.com/apaojun/p/4283944.html 現在android的開發工具基本上都改用android studio而慢慢棄用eclipse了,那麼android studio的除錯裝置該怎麼設定和檢視程式的Logcat呢? &n
android studio使用要點及常見錯誤
1、主專案跟他的依賴lib要放在同一個目錄才能在eclipse中export 2、匯入eclipse中匯出的專案到studio後的配置: (1)開啟工作空間目錄下的 gradle –> wrapper –> gradle-wrapper.properties 。修改一下
Android Studio 配置 JDK SDK gradle
關於配置問題。一定要找對自己檔案版本。配置路徑。不要以為拷貝過去就感覺可以用了。 一,JAVA JDK環境配置 1,終端建立環境變數配置檔案(第一次配置檔案使用) touch .bash_profile 2,開啟自定義建立的配置(bash_profile) op
Android Studio匯入新專案,gradle報 read timed out的情景之一
我使用Android Studio3.0匯入新專案時,gradle報 read timed out的情景之一: 由於專案的sdk沒有使用自己下載的jdk1.8,而是使用AndroidStudio預設的jre目錄,所以導致這個問題 。只要修改下jdk路徑就好: 但是改完後,這個問題是解決
Android Studio 使用教程(4)---gradle專案構建
Android Studio 使用教程(四)之gradle專案構建 1、gradle的概念 2、gradle配置jar包,和libs資料夾匯入jar包的區別 3、簽名打包: (1)Studio (2)命令列 (3)gradle wrap
Android Studio在啟動時gradle的問題:Download https://services.gradle.org/distributions/gradle-4.6-all.zip
Android Studio在啟動時一直在下載gradle的問題:Download https://services.gradle.org/distributions/gradle-4.6-all.zip 時如何解決? 首先在底部會出現載入的程序,如果有錯誤,在這裡
Ubuntu16.04下安裝配置Android studio,sdk,gradle——一篇文章就夠了系列
64位ubuntu16.04完美安裝配置jdk、sdk、Android studio 一、下載安裝jdk、sdk、Android studio 注意:我把JDK安裝在了/opt資料夾下面,/opt資料夾和/usr資料夾同樣都是常用做安裝軟體的資料夾,不同的是/usr是
幾個關於Android Studio的問題及解決方案
【問題一】Android Studio中在Android Virtual Device Manager中新增Android Virtual Device時,報錯:Intel HAXM is requi
Android Studio混淆模板及常用第三方混淆(看了都說好)
首先要在build.gradle中開啟混淆,也就是minifyEnabled true,我用的build.gradle具體如下所示: def releaseTime() { return new Date().format("yyyy.MM.dd", TimeZone.getTimeZ