Android Studio3.0更新之路(遇坑必入)

24K純帥豆發表於2017-11-01

序言:作為這個世界上走在最前沿的生物“猿”,怎麼能對新事物一無所知呢,10月26日,隨著Android 8.1 Oreo的預覽版釋出,Android Studio3.0正式版也釋出了,作為Android開發的猿們我們應該早就知道谷歌在今年5月的開發者大會上就說了要支援Kotlin語言,所以這次更新一個比較大的點就在於支援Kotlin語言了,下面就跟著LZ的腳步來探索一下AS3.0吧

相信很多人很早就體驗過谷歌爸爸放出來的體驗版本了,雖然說正式版已經出了,但是很多人也不敢輕易貿然的更新,因為怕會掉進坑裡出不來(真是一隻膽小的猿,鑑定完畢)

安裝

如果你從Android Studio內部點選更新的話,會跳轉到Android的官網,沒有梯子的同學可以去這個網站下載更新:

Android Studio3.0正式版
Android Studio3.0正式版

安裝過程中遇到的問題

1、Gradle Sync failed:
Gradle sync failed: Cause: com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;
Consult IDE log for more details (Help | Show Log) (8s 123ms)複製程式碼

其實一開始不是這個錯,最開始是一個redownload的一個錯,後來LZ把2.3版本的給刪了,快取給清除了,然後就變成這個錯了。既然有錯,那就解決唄,順手百度了一個,下面看看stackoverflow的解決方案


這個方法確實也適用於我,把ButterKnife降級之後就OK了。如果有其他更好的解決方法,歡迎私信我,有償給發紅包。“一個問題的解決是為了更好的迎接下一個問題的出現”——魯迅

解決方案1:把專案中依賴的ButterKnife降級到8.4.0

解決方案2:把gradle plugin版本降低至2.3.3 重新編譯下就可以了(這裡感謝吊兒郎當小黑青年

解決方案3:將app.gradle中的apply plugin: 'com.jakewharton.butterknife'刪掉即可。

解決方案3的詳解請看

2、Unable to resolve dependency for:

第一眼看這個錯的時候我以為我setting.gradle中沒有依賴appCommon,看完之後明明確實依賴了,而且這是一個老專案,在AS2.3版本的時候很正常,然後我就知道這又是一個坑,無奈的又去上了一把Internet,然後試過網上說的在buildTypes中加入preview節點,然而並沒有什麼卵用,查了半天還是沒有找到解決的方法,後來看著這段報錯資訊的時候,我看到了signingConfigs,我想到gradle中好像有這麼個節點,抱著試一試的態度我刪了那個節點,然後,臥槽臥槽臥槽,可以成功編譯了,這是不是有一種躺著過坑的趕腳。如果有其他更好的解決方法,歡迎私信我,有償給發紅包

解決方案:把專案中的signingConfigs節點刪除掉就好了,如果你擔心多渠道打包的事情,那麼就用打包工具吧。

以下是群裡的朋友遇到的一些問題:

3、app:transformDexArchiveWithExterLibsDexMergeForDebug

解決方案:將電腦中的.gradle目錄刪除掉(清除掉gradle快取)重新build。

參考stackoverflow

解決方案詳解在這裡

4、gradle打包,自定義apk名稱程式碼報錯(Cannot set the value of read-only property 'outputFile' )
Error:(56, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
<a href="openFile:D:\eclipseCode\ipay-android\xinlebao\build.gradle">Open File</a>複製程式碼

解決方案:修改檔名程式碼請這樣寫

android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "xinlebao_${defaultConfig.versionName}_${releaseTime()}.apk"
                }
            }複製程式碼
5、AAPT2 編譯報錯 AAPT2 error
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details複製程式碼

解決方案:在gradle.properties中關閉APPT2 編譯

android.enableAapt2=false複製程式碼
注:如果是eclipse轉到as上的專案,可能沒有gradle.properties檔案,請在專案根目錄中手動建立
6、apt外掛問題(Error:Cannot choose between the following configurations of project :mylibrary:)
Error:Cannot choose between the following configurations of project :mylibrary:

- debugApiElements
- debugRuntimeElements
- releaseApiElements
- releaseRuntimeElements
  All of them match the consumer attributes:複製程式碼

解決方案:如下

//1.在project的build.gradle中刪除
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
//2.在module的build.gradle中刪除
apply plugin: 'android-apt'
//3.將module的build.gradle檔案中的dependency
apt  'com.jakewharton:butterknife-compiler:8.1.0'
//改為
annotationProcessor  'com.jakewharton:butterknife-compiler:8.1.0'複製程式碼
7、All flavors must now belong to a named flavor dimension. Learn more at :

解決方案:在你的app.gradle中的defaultConfig節點下加入flavorDimensions "versionCode"這句就好了。

8、Error:Could not resolve all dependencies for configuration

':app:prodDebugCompileClasspath'.

自AS3.0開始,就提供了自動匹配variant的機制,所以在依賴的時候不需要指定variant配置,比如:

  dependencies {
    debugCompile project(path: ':Module1', configuration: 'debug')
    releaseCompile project(path: ':Module1', configuration: 'release')
  }複製程式碼

這樣設定就會報如下的錯:

解決方案:直接依賴就好了:

api project(': Module1')複製程式碼
9、Error:(130, 0) Gradle DSL method not found: 'apt()'

解決方法:如果你的專案中使用了apt,那麼請換成annotationPorcessor,在AS3.0中,apt被替換成了annotationPorcessor。在這裡給大家一個小建議,無論gradle是什麼版本,請大家都要把apt換成annotationPorcessor,因為官方現在不維護apt了。

好了,以上就是最近更新3.0所遇到的一些問題,如果你還遇到其他的問題,歡迎私信我。

Android Studio 3.0

1、.gradle檔案

哇塞,問題解決之後就想著趕緊建立一個新的專案來看看有啥變化,首先一個變化比較大的是.gradle檔案:

我們可以看到,谷歌爸爸把buildToolsVersion構建工具的版本給“幹掉了”,在以前的版本中,buildToolsVersion也會給專案的構建帶來很多錯,現在谷歌爸爸把它給“幹掉了”;還有就是下面的依賴換成了implementation,那麼它和compile有什麼區別呢?彆著急,喝杯茶聽我細細道來:

compile和api

api完全等同於compile,二者沒有區別。我們大家都知道,隨著Android版本的更新,有很多過時的類和方法,compile亦是如此,我們可以把compile理解成api的過去式。

api和implementation

這兩個是AS3.0版本中新增的指令,下面用一張圖來說明一啊兩者的區別:

圖片參考
圖片參考

有想詳細瞭解的同學,請參考官方的

2、支援Kotlin

還在初學Kotlin語言的同學有福了,AS3.0支援將Java程式碼直接轉成Kotlin程式碼,下面我們通過一段VCR來認識一下這個功能:

在java檔案中,選中你要轉換的程式碼,然後在頂部選擇Code——>Convert Java File to Kotlin File進行轉換就好了,轉換之後,這就是一個Kotlin檔案了。

3、logcat欄

在AS上幾個版本中,在Logcat還是Android Monitor的時候,裡面有很多東西,網路啊,記憶體啊,CPU啊什麼的,AS3.0中,谷歌將其分開了,Logcat就單獨放出來了,之前那個看網路,記憶體,CPU的單獨拎出來了,一個叫Android Profiler的東西:

是不是很帥,據說這玩意兒還自帶抓包功能哦(這是LZ最喜歡的一個功能)。只不過預設是關閉的,我們要手動把它開起來。進入Run——>Edit Configurations,然後把下面這個鉤上就好了:

需要注意的是,你專案中的API版本得是API26以下,而且你的手機版本得是Android5.0以上才能使用抓包功能。開啟之後,我們來抓個包試試吧:

在手機上發起一次網路請求,NETWORK那一欄會發生明顯的變化,我們選擇那個區域進行抓包,可以看到請求了一個介面MainServlet(如果該區域下會請求多個介面,則會一一列出來),然後我們點選MainServlet,就會出現後臺傳過來的Json,Header之類的資訊,怎麼樣,是不是很屌,以後再也不用再麻煩測試幫你抓包了,也不用再裝什麼其他軟體了。CPUMEMORY也一樣,都具有記錄當前頁面的資料,你也可以根據它所記錄的資料進行相應的分析。這兩個就不展示了,有興趣的同學可以更新之後自己玩玩。最後需要注意的是開啟這個之後會降低應用程式的構建速度,因此只有在你要開始對應用程式進行概要分析時,再啟用它。

4、檔案管理器

AS3.0中,檔案管理器工具允許和你的AS連線的手機無縫互動,你可以在AS3.0上檢視,複製並刪除裝置上的檔案。當檢查由應用程式建立的檔案或是要講檔案傳輸到裝置時,非常有用:

data/data/app_name/
包含儲存在內部儲存上的應用程式的資料檔案
sdcard/
包含儲存在外部使用者儲存上的使用者檔案 (圖片等)複製程式碼

5、支援Java8

同樣,喜歡寫lambda的同學也有福利了,這次AS的改版支援了Java8,可以直接將Java程式碼格式成lambda格式的,但是你得給你的專案設定成支援Java8,右鍵你的module,選擇open Module Settings,進去之後按照如下設定就可以了:

這樣你就能使用lambda表示式了,系統會自動提醒你哪裡可以轉換成lambda表示式,是不是好智慧:

參考

blog.csdn.net/soslinken/a…

blog.csdn.net/niubitianpi…

www.jianshu.com/p/9af06314e…

公眾號:Android技術經驗分享,期待你的加入......

公眾號:Android技術經驗分享
公眾號:Android技術經驗分享

相關文章