android studio 新手入門(mén)教程(二)項(xiàng)目的導(dǎo)入教程圖解
上篇文章介紹了AS的一些常用設(shè)置方法,當(dāng)工具調(diào)教妥當(dāng)后,自然就要開(kāi)始項(xiàng)目的開(kāi)發(fā)啦。從零開(kāi)始新建一個(gè)項(xiàng)目,這個(gè)簡(jiǎn)單,不必多說(shuō),這篇博客會(huì)分享我從舊平臺(tái)eclipse導(dǎo)入項(xiàng)目到AS的過(guò)程,以及遇到的一些問(wèn)題并如何解決。開(kāi)篇先粗略的提一些需要注意的地方。 ##結(jié)構(gòu)目錄 和eclipse不同,在android 視圖下的項(xiàng)目目錄分為java,res和manifests。
- manifests目錄存放清單文件,不必多說(shuō)。
- java目錄會(huì)默認(rèn)生成三個(gè)文件夾,其中test為在本機(jī)執(zhí)行單元測(cè)試代碼的目錄, androidTest為在Android設(shè)備上執(zhí)行單元測(cè)試代碼的目錄,第一個(gè)不帶后綴的目錄就是存放我們代碼的目錄。
- res目錄存放資源文件,包括圖片資源文件、layout布局等,這個(gè)和eclispe類(lèi)似,但有個(gè)新東西:mipmap目錄,進(jìn)入會(huì)看到里面存放著app的啟動(dòng)圖標(biāo)。
查看官方文檔,看到這么一句:
To avoid these display issues, apps should use the mipmap/ resource folders for launcher icons. The Android system preserves these resources regardless of density stripping, and ensures that launcher apps can pick icons with the best resolution for display. 出處:http://developer.android.com/tools/projects/index.html#mipmap
大意是為了避免設(shè)備顯示問(wèn)題,app應(yīng)該使用mipmap目錄存放應(yīng)用圖標(biāo)。所以app的啟動(dòng)圖標(biāo)應(yīng)該放置在mipmap文件夾中,至于其他的用處還不是很清楚,之前也遇到過(guò)導(dǎo)入eclipse項(xiàng)目時(shí).9圖片報(bào)錯(cuò),網(wǎng)絡(luò)上有人說(shuō).9圖應(yīng)該放在mipmap里,但是我把.9圖片放到mipmap目錄后仍然不能解決我的問(wèn)題,最后因?yàn)轫?xiàng)目里.9圖不多,使用AS的工具重繪后解決了問(wèn)題。 ##庫(kù)依賴(lài) eclipse里添加 存在本地的第三方庫(kù) 的方式:
將第三方庫(kù)導(dǎo)入workspace- 右鍵項(xiàng)目-android-add Library
AS里添加庫(kù)的方式:
導(dǎo)入第三方庫(kù)工程到project,第三方庫(kù)作為一個(gè)新的module存在于project中- File-project structure,選擇項(xiàng)目,添加庫(kù)
通過(guò)對(duì)比可以發(fā)現(xiàn),AS里的project就相當(dāng)于eclipse里的workspace的概念,module相當(dāng)于eclipse里獨(dú)立的項(xiàng)目。也可以發(fā)現(xiàn),其實(shí)二者在依賴(lài)存在于本地的第三方庫(kù)的操作上是類(lèi)似的,添加jar包的操作也是一樣,只要把jar包復(fù)制到lib目錄下(切換到Project Files視圖下會(huì)看到Lib目錄),然后同樣操作project structure,選擇file dependency后選擇依賴(lài)lib庫(kù)下剛添加進(jìn)的jar包即可。
但是如果是添加線上開(kāi)源庫(kù)的話,二者的差距就體現(xiàn)出來(lái)了,以往在github上看到優(yōu)秀的開(kāi)源庫(kù),想要應(yīng)用到自己的項(xiàng)目中,就得先把項(xiàng)目下載下來(lái),然后再添加依賴(lài),雖然操作不繁瑣,但是我漸漸發(fā)現(xiàn)github上越來(lái)越多的開(kāi)發(fā)者都轉(zhuǎn)向AS,不再單獨(dú)提供eclipse上使用的版本。這個(gè)不贅述,因?yàn)橄朕D(zhuǎn)平臺(tái),能看到這篇博客的朋友,肯定或多或少都有些同感。總之一句話: google大法好 。退eclipse保平安,趕緊轉(zhuǎn)AS吧。 ##初識(shí)gradle 在android視圖gradle目錄下,可以看到有多個(gè)build.gradle,其中 后綴module + 項(xiàng)目名 的就是平時(shí)添加第三方庫(kù)時(shí)需要配置的gradle文件了,以Github上CircleImageview這個(gè)開(kāi)源庫(kù)為示例,其github主頁(yè)上有這么一段代碼:
我們唯一要做的,就是將這段代碼拷貝到項(xiàng)目的gradle-dependencies語(yǔ)句塊下
然后點(diǎn)擊工具欄圖標(biāo)
之后gradle就會(huì)自動(dòng)從遠(yuǎn)程倉(cāng)庫(kù)下載該庫(kù)所需要的jar包等依賴(lài)文件,一鍵搞定,簡(jiǎn)直不要太爽!
然而gradle爽是爽,但是后續(xù)也會(huì)提到在導(dǎo)入項(xiàng)目時(shí)因?yàn)間radle版本不同而出現(xiàn)一些麻煩的地方。 ##導(dǎo)入Eclipse項(xiàng)目 上面說(shuō)了如何依賴(lài)庫(kù),但有些朋友需要開(kāi)發(fā)舊項(xiàng)目而不是新建項(xiàng)目,光導(dǎo)入eclipse項(xiàng)目時(shí)報(bào)的錯(cuò)都?jí)蚝纫粔亓耍鼊e提如何正確的依賴(lài)庫(kù),所以接下來(lái)就示范一下如何正確的導(dǎo)入eclipse的項(xiàng)目。不同項(xiàng)目會(huì)出現(xiàn)的問(wèn)題不盡相同,這里權(quán)且算是拋磚引玉,給大家提供一些解決問(wèn)題的思路。 首先在eclipse里,右鍵-export,導(dǎo)出項(xiàng)目的gradle目錄
選中要導(dǎo)出的項(xiàng)目,一路next,最后一步建議force overriding一欄打勾(我理解為是已存在gradle文件,選中的話將強(qiáng)制重寫(xiě)),導(dǎo)出成功后會(huì)出現(xiàn)提示:
請(qǐng)選擇以下目錄: ...build.gradle,不要導(dǎo)入Eclipse項(xiàng)目本身!
別人我不知道,反正我是照著這個(gè)提示在AS里導(dǎo)入目錄下的build.gradle文件,然后結(jié)果就把整個(gè)工作目錄里的項(xiàng)目都給導(dǎo)入了(╯‵□′)╯︵┻━┻。什么鬼!一定是我打開(kāi)的方式不對(duì)!后來(lái)在AS里嘗試
導(dǎo)入時(shí)選擇項(xiàng)目本身,而不是build.gradle文件,這才導(dǎo)入成功。但是不要高興的太早,這才只是麻煩的開(kāi)始。 ###問(wèn)題1 找不到類(lèi)
解決辦法:找不到相關(guān)的類(lèi),定位到代碼,發(fā)現(xiàn)是recyclerview的一些類(lèi)報(bào)錯(cuò),于是猜測(cè)是因?yàn)橐蕾?lài)的問(wèn)題,在項(xiàng)目依賴(lài)庫(kù)里添加recyclerview庫(kù),問(wèn)題解決!
###問(wèn)題2 庫(kù)重復(fù)依賴(lài)
錯(cuò)誤提示中可以看到是因?yàn)橛卸鄠€(gè)同名的庫(kù)報(bào)錯(cuò),因?yàn)槲覐膃clipse導(dǎo)出項(xiàng)目時(shí)就自帶了supportV7的recyclerview的庫(kù),而我剛剛有添加了新的recyclerview庫(kù),所以二者重復(fù)依賴(lài)了,解決辦法很簡(jiǎn)單,去除之前的recyclerview依賴(lài)即可,問(wèn)題解決! ###問(wèn)題3 清單文件合并出錯(cuò) Manifest merger failed
整個(gè)報(bào)錯(cuò)信息是這樣的:
java.lang.RuntimeException: Manifest merger failed : uses-sdk:minSdkVersion 1 cannot be smaller than version 7 declared in library [com.android.support:appcompat-v7:23.2.1] D:\studioCode\NewOneBuy\lib_CircleImageView\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.2.1\AndroidManifest.xmlSuggestion: use tools:overrideLibrary="android.support.v7.appcompat" to force usage
可以看到是是因?yàn)閏ircleimageview的minSdkVersion低于appcompatV7定義的version而導(dǎo)致的清單文件合并出錯(cuò),提示中也告訴了我們解決方法,只要在circleimageview的清單文件中配置好即可。
###問(wèn)題4 程序包不存在
這個(gè)問(wèn)題也簡(jiǎn)單,定位到相關(guān)的代碼,使用快捷鍵:ctrl+alt+O, 去除無(wú)效的導(dǎo)包即可。 ###問(wèn)題5 重復(fù)文件(jar包) Duplicate files
提示信息中也標(biāo)明了是在File1,F(xiàn)ile2中兩個(gè)不同的庫(kù)含有相同的文件(jar包)導(dǎo)出出錯(cuò),在prodect視圖下查看lib目錄,可以看到確實(shí)是有重復(fù)文件
解決問(wèn)題也很簡(jiǎn)單:刪除jar包,去除依賴(lài)即可
###問(wèn)題6 finished with non-zero exit value 2
What went wrong:Execution failed for task ':newOneBuy:transformClassesWithDexForDebug'.> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files (x86)\Java\jdk1.8.0_60\bin\java.exe'' finished with non-zero exit value 2
這個(gè)沒(méi)看懂錯(cuò)誤原因,但是最后通過(guò)在項(xiàng)目的module的build.gradle里添加配置multiDexEnabled true后解決了問(wèn)題,但是不知其所以然。
defaultConfig { applicationId "com.example.newonebuy" minSdkVersion 11 targetSdkVersion 21 multiDexEnabled true }
問(wèn)題7 SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable
出現(xiàn)該問(wèn)題的原因是在環(huán)境變量未正常配置,右鍵我的電腦 -> 屬性 -> 高級(jí)設(shè)置 -> 環(huán)境變量
- 添加 ANDROID_HOME,值為 sdk 的安裝目錄
- 在 Path 變量的值后面添加
%ANDROID_HOME%/tools;%ANDROID_HOME%/platform-tools;
- 重啟 Android Studio
問(wèn)題8 提示 BuildToolsVersion 或 Gradle Version 錯(cuò)誤
這是因?yàn)楸镜氐?BuildTools 版本和 Gradle 版本與你正在導(dǎo)入的項(xiàng)目的版本不一致導(dǎo)致的問(wèn)題。關(guān)于如何解決這個(gè)問(wèn)題在下一篇 eclipse再見(jiàn),android studio 新手入門(mén)教程(三)Github(.ignore忽略規(guī)則)的使用 里有講到,請(qǐng)移步觀看。
在導(dǎo)入之前,看著一行又一行紅彤彤的報(bào)錯(cuò)我的內(nèi)心是崩潰的,但其實(shí)只要耐著性子根據(jù)提示逐個(gè)排查,遇到不懂的就谷歌,畢竟這都是些很初級(jí)的問(wèn)題,總是會(huì)解決的。最近生活里的煩心事不少,在碼代碼時(shí)漸漸能感受到一種很奇妙的感情。在代碼的世界里,1是1,0是0,只要你愿意付出心血,錯(cuò)誤總會(huì)消失,bug總會(huì)修復(fù)。不像現(xiàn)實(shí)世界,很多事情人心難測(cè),即便人心可測(cè)本心也難移,很多時(shí)候會(huì)感覺(jué)到深深的無(wú)力和無(wú)可奈何。
不多扯了,這篇先分享這些吧。下篇博客會(huì)分享一下在AS上使用github進(jìn)行版本控制的一些事,還有在導(dǎo)入module時(shí)因?yàn)間radle版本而導(dǎo)致的一些問(wèn)題。
另外最近看到kotlin這門(mén)新興的語(yǔ)言似乎挺有意思,等到下個(gè)項(xiàng)目嘗試一下看kotlin能否高效、有效的解決一些問(wèn)題,如果后面有什么收獲,也有寫(xiě)出來(lái)分享的。
總結(jié)
以上所述是小編給大家介紹的android studio 新手入門(mén)教程(二)項(xiàng)目的導(dǎo)入教程圖解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android 中解決Viewpage調(diào)用notifyDataSetChanged()時(shí)界面無(wú)刷新的問(wèn)題
這篇文章主要介紹了Android 中解決Viewpage調(diào)用notifyDataSetChanged()時(shí)界面無(wú)刷新的問(wèn)題的相關(guān)資料,這里提供相應(yīng)的解決辦法,需要的朋友可以參考下2017-08-08Android popupWindow彈出窗體實(shí)現(xiàn)方法分析
這篇文章主要介紹了Android popupWindow彈出窗體實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了Android彈出窗體的布局及popupwindow屬性設(shè)置、事件監(jiān)聽(tīng)相關(guān)操作技巧,需要的朋友可以參考下2017-07-07Android開(kāi)發(fā)AsmClassVisitorFactory使用詳解
這篇文章主要為大家介紹了Android開(kāi)發(fā)AsmClassVisitorFactory使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Android指紋識(shí)別認(rèn)識(shí)和基本使用詳解
這篇文章主要為大家詳細(xì)介紹了Android指紋識(shí)別認(rèn)識(shí)和基本的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android ListView的OnItemClickListener詳解
這篇文章主要介紹了Android ListView的OnItemClickListener詳解的相關(guān)資料,涉及到OnItemClickListener的position和id參數(shù)做詳細(xì)的解釋的知識(shí)點(diǎn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-07-07Android Native fdsan檢測(cè)工具介紹
這篇文章主要為大家介紹了Android Native fdsan檢測(cè)工具介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Android開(kāi)發(fā)之ListView實(shí)現(xiàn)Item局部刷新
對(duì)于ListView數(shù)據(jù)的刷新大家都知道,改變Adapter的數(shù)據(jù)源,然后調(diào)用Adapter的notifyDateSetChanged()方法即可。通過(guò)本篇文章給大家詳細(xì)介紹Android開(kāi)發(fā)之ListView實(shí)現(xiàn)Item局部刷新,感興趣的朋友一起學(xué)習(xí)吧2015-10-10Android隱藏標(biāo)題欄及解決啟動(dòng)閃過(guò)標(biāo)題的實(shí)例詳解
這篇文章主要介紹了Android隱藏標(biāo)題欄及解決啟動(dòng)閃過(guò)標(biāo)題的實(shí)例詳解的相關(guān)資料,這里提供兩種方法幫助大家解決這種問(wèn)題,需要的朋友可以參考下2017-09-09