淺談Android Studio3.0更新之路(遇坑必入)
序言:作為這個(gè)世界上走在最前沿的生物“猿”,怎么能對(duì)新事物一無(wú)所知呢,10月26日,隨著Android 8.1 Oreo的預(yù)覽版發(fā)布,Android Studio3.0正式版也發(fā)布了,作為Android開(kāi)發(fā)的猿們我們應(yīng)該早就知道谷歌在今年5月的開(kāi)發(fā)者大會(huì)上就說(shuō)了要支持Kotlin語(yǔ)言,所以這次更新一個(gè)比較大的點(diǎn)就在于支持Kotlin語(yǔ)言了,下面就跟著LZ的腳步來(lái)探索一下AS3.0吧
相信很多人很早就體驗(yàn)過(guò)谷歌爸爸放出來(lái)的體驗(yàn)版本了,雖然說(shuō)正式版已經(jīng)出了,但是很多人也不敢輕易貿(mào)然的更新,因?yàn)榕聲?huì)掉進(jìn)坑里出不來(lái)(真是一只膽小的猿,鑒定完畢)
安裝
如果你從Android Studio內(nèi)部點(diǎn)擊更新的話,會(huì)跳轉(zhuǎn)到Android的官網(wǎng),沒(méi)有梯子的同學(xué)可以去這個(gè)網(wǎng)站下載更新:
Android Studio3.0正式版安裝過(guò)程中遇到的問(wèn)題
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)
其實(shí)一開(kāi)始不是這個(gè)錯(cuò),最開(kāi)始是一個(gè)redownload的一個(gè)錯(cuò),后來(lái)LZ把2.3版本的給刪了,緩存給清除了,然后就變成這個(gè)錯(cuò)了。既然有錯(cuò),那就解決唄,順手百度了一個(gè),下面看看stackoverflow的解決方案
這個(gè)方法確實(shí)也適用于我,把ButterKnife降級(jí)之后就OK了。如果有其他更好的解決方法,歡迎私信我,有償給發(fā)紅包?!耙粋€(gè)問(wèn)題的解決是為了更好的迎接下一個(gè)問(wèn)題的出現(xiàn)”——魯迅
解決方案1:把項(xiàng)目中依賴(lài)的ButterKnife降級(jí)到8.4.0
解決方案2:把gradle plugin版本降低至2.3.3 重新編譯下就可以了(這里感謝吊兒郎當(dāng)小黑青年)
2、Unable to resolve dependency for:
第一眼看這個(gè)錯(cuò)的時(shí)候我以為我setting.gradle中沒(méi)有依賴(lài)appCommon,看完之后明明確實(shí)依賴(lài)了,而且這是一個(gè)老項(xiàng)目,在AS2.3版本的時(shí)候很正常,然后我就知道這又是一個(gè)坑,無(wú)奈的又去上了一把Internet,然后試過(guò)網(wǎng)上說(shuō)的在buildTypes中加入preview節(jié)點(diǎn),然而并沒(méi)有什么卵用,查了半天還是沒(méi)有找到解決的方法,后來(lái)看著這段報(bào)錯(cuò)信息的時(shí)候,我看到了signingConfigs,我想到gradle中好像有這么個(gè)節(jié)點(diǎn),抱著試一試的態(tài)度我刪了那個(gè)節(jié)點(diǎn),然后,臥槽臥槽臥槽,可以成功編譯了,這是不是有一種躺著過(guò)坑的趕腳。如果有其他更好的解決方法,歡迎私信我,有償給發(fā)紅包
解決方案:把項(xiàng)目中的signingConfigs節(jié)點(diǎn)刪除掉就好了,如果你擔(dān)心多渠道打包的事情,那么就用打包工具吧。
以下是群里的朋友遇到的一些問(wèn)題:
3、app:transformDexArchiveWithExterLibsDexMergeForDebug
解決方案:將電腦中的.gradle目錄刪除掉(清除掉gradle緩存)重新build。
4、gradle打包,自定義apk名稱(chēng)代碼報(bào)錯(cuò)(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" rel="external nofollow" >Open File</a>
解決方案:修改文件名代碼請(qǐng)這樣寫(xiě)
android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "xinlebao_${defaultConfig.versionName}_${releaseTime()}.apk" } }
解決方案:在gradle.properties中關(guān)閉APPT2 編譯
5、AAPT2 編譯報(bào)錯(cuò) AAPT2 error
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
解決方案:在gradle.properties中關(guān)閉APPT2 編譯
android.enableAapt2=false
注:如果是eclipse轉(zhuǎn)到as上的項(xiàng)目,可能沒(méi)有g(shù)radle.properties文件,請(qǐng)?jiān)陧?xiàng)目根目錄中手動(dòng)創(chuàng)建
6、apt插件問(wèn)題(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'
好了,以上就是最近更新3.0所遇到的一些問(wèn)題。
Android Studio 3.0
1、.gradle文件
哇塞,問(wèn)題解決之后就想著趕緊創(chuàng)建一個(gè)新的項(xiàng)目來(lái)看看有啥變化,首先一個(gè)變化比較大的是.gradle文件:
我們可以看到,谷歌爸爸把buildToolsVersion構(gòu)建工具的版本給“干掉了”,在以前的版本中,buildToolsVersion也會(huì)給項(xiàng)目的構(gòu)建帶來(lái)很多錯(cuò),現(xiàn)在谷歌爸爸把它給“干掉了”;還有就是下面的依賴(lài)換成了implementation,那么它和compile有什么區(qū)別呢?別著急,喝杯茶聽(tīng)我細(xì)細(xì)道來(lái):
compile和api
api完全等同于compile,二者沒(méi)有區(qū)別。我們大家都知道,隨著Android版本的更新,有很多過(guò)時(shí)的類(lèi)和方法,compile亦是如此,我們可以把compile理解成api的過(guò)去式。
api和implementation
這兩個(gè)是AS3.0版本中新增的指令,下面用一張圖來(lái)說(shuō)明一啊兩者的區(qū)別:
圖片參考
有想詳細(xì)了解的同學(xué),請(qǐng)參考官方的
2、支持Kotlin
還在初學(xué)Kotlin語(yǔ)言的同學(xué)有福了,AS3.0支持將Java代碼直接轉(zhuǎn)成Kotlin代碼,下面我們通過(guò)一段VCR來(lái)認(rèn)識(shí)一下這個(gè)功能:
在java文件中,選中你要轉(zhuǎn)換的代碼,然后在頂部選擇Code——>Convert Java File to Kotlin File進(jìn)行轉(zhuǎn)換就好了,轉(zhuǎn)換之后,這就是一個(gè)Kotlin文件了。
3、logcat欄
在AS上幾個(gè)版本中,在Logcat還是Android Monitor的時(shí)候,里面有很多東西,網(wǎng)絡(luò)啊,內(nèi)存啊,CPU啊什么的,AS3.0中,谷歌將其分開(kāi)了,Logcat就單獨(dú)放出來(lái)了,之前那個(gè)看網(wǎng)絡(luò),內(nèi)存,CPU的單獨(dú)拎出來(lái)了,一個(gè)叫Android Profiler的東西:
是不是很帥,據(jù)說(shuō)這玩意兒還自帶抓包功能哦(這是LZ最喜歡的一個(gè)功能)。只不過(guò)默認(rèn)是關(guān)閉的,我們要手動(dòng)把它開(kāi)起來(lái)。進(jìn)入Run——>Edit Configurations,然后把下面這個(gè)鉤上就好了:
需要注意的是,你項(xiàng)目中的API版本得是API26以下,而且你的手機(jī)版本得是Android5.0以上才能使用抓包功能。開(kāi)啟之后,我們來(lái)抓個(gè)包試試吧:
在手機(jī)上發(fā)起一次網(wǎng)絡(luò)請(qǐng)求,NETWORK那一欄會(huì)發(fā)生明顯的變化,我們選擇那個(gè)區(qū)域進(jìn)行抓包,可以看到請(qǐng)求了一個(gè)接口MainServlet(如果該區(qū)域下會(huì)請(qǐng)求多個(gè)接口,則會(huì)一一列出來(lái)),然后我們點(diǎn)擊MainServlet,就會(huì)出現(xiàn)后臺(tái)傳過(guò)來(lái)的Json,Header之類(lèi)的信息,怎么樣,是不是很屌,以后再也不用再麻煩測(cè)試幫你抓包了,也不用再裝什么其他軟件了。CPU和MEMORY也一樣,都具有記錄當(dāng)前頁(yè)面的數(shù)據(jù),你也可以根據(jù)它所記錄的數(shù)據(jù)進(jìn)行相應(yīng)的分析。這兩個(gè)就不展示了,有興趣的同學(xué)可以更新之后自己玩玩。最后需要注意的是開(kāi)啟這個(gè)之后會(huì)降低應(yīng)用程序的構(gòu)建速度,因此只有在你要開(kāi)始對(duì)應(yīng)用程序進(jìn)行概要分析時(shí),再啟用它。
4、文件管理器
AS3.0中,文件管理器工具允許和你的AS連接的手機(jī)無(wú)縫交互,你可以在AS3.0上查看,復(fù)制并刪除設(shè)備上的文件。當(dāng)檢查由應(yīng)用程序創(chuàng)建的文件或是要講文件傳輸?shù)皆O(shè)備時(shí),非常有用:
data/data/app_name/ 包含存儲(chǔ)在內(nèi)部存儲(chǔ)上的應(yīng)用程序的數(shù)據(jù)文件 sdcard/ 包含存儲(chǔ)在外部用戶存儲(chǔ)上的用戶文件 (圖片等)
5、支持Java8
同樣,喜歡寫(xiě)lambda的同學(xué)也有福利了,這次AS的改版支持了Java8,可以直接將Java代碼格式成lambda格式的,但是你得給你的項(xiàng)目設(shè)置成支持Java8,右鍵你的module,選擇open Module Settings,進(jìn)去之后按照如下設(shè)置就可以了:
這樣你就能使用lambda表達(dá)式了,系統(tǒng)會(huì)自動(dòng)提醒你哪里可以轉(zhuǎn)換成lambda表達(dá)式,是不是好智能:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Android SDCard存儲(chǔ)的問(wèn)題
本篇文章小編為大家介紹,關(guān)于Android SDCard存儲(chǔ)的問(wèn)題。需要的朋友參考下2013-04-04Android 手動(dòng)獲取判斷處理權(quán)限
本篇文章主要介紹了Android手動(dòng)獲取判斷處理權(quán)限的方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05ViewPager頂部導(dǎo)航欄聯(lián)動(dòng)效果(標(biāo)題欄條目多)
這篇文章主要介紹了ViewPager頂部導(dǎo)航欄聯(lián)動(dòng)效果,代碼簡(jiǎn)單易懂,感興趣的朋友參考下吧2016-08-08Android入門(mén)之RelativeLayout、FrameLayout用法分析
這篇文章主要介紹了Android入門(mén)之RelativeLayout、FrameLayout用法分析,需要的朋友可以參考下2014-08-08Android開(kāi)發(fā)Kotlin語(yǔ)言協(xié)程中的并發(fā)問(wèn)題和互斥鎖
Android開(kāi)發(fā)Kotlin語(yǔ)言提供了多種機(jī)制來(lái)處理并發(fā)和同步,其中包括高層次和低層次的工具,對(duì)于常規(guī)的并發(fā)任務(wù),可以利用 Kotlin 協(xié)程提供的結(jié)構(gòu)化并發(fā)方式,而對(duì)于需要更低層次的鎖定機(jī)制,可以使用Mutex(互斥鎖)來(lái)實(shí)現(xiàn)對(duì)共享資源的線程安全訪問(wèn)2024-06-06Android?Flutter實(shí)現(xiàn)自由落體彈跳動(dòng)畫(huà)效果
粒子運(yùn)動(dòng)是將對(duì)象按照一定物理公式進(jìn)行的自定義軌跡運(yùn)動(dòng),與普通動(dòng)畫(huà)不同的是,它沒(méi)有強(qiáng)制性的動(dòng)畫(huà)開(kāi)始到結(jié)束的時(shí)間概念。本文將利用Flutter實(shí)現(xiàn)自由落體彈跳動(dòng)畫(huà)效果,感興趣的小伙伴可以學(xué)習(xí)一下2022-10-10安裝時(shí)加入外部數(shù)據(jù)庫(kù)示例(android外部數(shù)據(jù)庫(kù))
這篇文章主要介紹了android打包安裝時(shí)加入外部數(shù)據(jù)庫(kù)的示例,需要的朋友可以參考下2014-03-03Android入門(mén)之BroadCast模擬實(shí)現(xiàn)異地登錄事件發(fā)生后的主動(dòng)退出
隨著對(duì)BroadCast的越來(lái)越深入,我們今天要實(shí)現(xiàn)一個(gè)稍微復(fù)雜一點(diǎn)的BroadCast。即只允許一個(gè)設(shè)備登錄一個(gè)帳號(hào)時(shí),APP會(huì)彈一個(gè)對(duì)話框如:您的賬號(hào)在別處登錄,請(qǐng)重新登陸!感興趣的可以了解一下2022-12-12Android自定義Dialog實(shí)現(xiàn)文字動(dòng)態(tài)加載效果
這篇文章主要為大家詳細(xì)介紹了Android自定義Dialog實(shí)現(xiàn)文字動(dòng)態(tài)加載效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08