eclipse再見,android studio 新手入門教程(二)項目的導入

上一篇博客介紹了AS的一些常用設置方法,當工具調教妥當后,自然就要開始項目的開發啦。從零開始新建一個項目,這個簡單,不必多說,這篇博客會分享我從舊平臺eclipse導入項目到AS的過程,以及遇到的一些問題并如何解決。開篇先粗略的提一些需要注意的地方。

結構目錄

和eclipse不同,在android 視圖下的項目目錄分為java,res和manifests。


測試
  • manifests目錄存放清單文件,不必多說。
  • java目錄會默認生成三個文件夾,其中test為在本機執行單元測試代碼的目錄, androidTest為在Android設備上執行單元測試代碼的目錄,第一個不帶后綴的目錄就是存放我們代碼的目錄。
  • res目錄存放資源文件,包括圖片資源文件、layout布局等,這個和eclispe類似,但有個新東西:mipmap目錄,進入會看到里面存放著app的啟動圖標。查看官方文檔,看到這么一句:


    mipmap文件夾

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

大意是為了避免設備顯示問題,app應該使用mipmap目錄存放應用圖標。所以app的啟動圖標應該放置在mipmap文件夾中,至于其他的用處還不是很清楚,之前也遇到過導入eclipse項目時.9圖片報錯,網絡上有人說.9圖應該放在mipmap里,但是我把.9圖片放到mipmap目錄后仍然不能解決我的問題,最后因為項目里.9圖不多,使用AS的工具重繪后解決了問題。

庫依賴

eclipse里添加存在本地的第三方庫的方式:

  • 將第三方庫導入workspace- 右鍵項目-android-add Library

AS里添加庫的方式:

  • 導入第三方庫工程到project,第三方庫作為一個新的module存在于project中- File-project structure,選擇項目,添加庫


    這里寫圖片描述

    這里寫圖片描述

    通過對比可以發現,AS里的project就相當于eclipse里的workspace的概念,module相當于eclipse里獨立的項目。也可以發現,其實二者在依賴存在于本地的第三方庫的操作上是類似的,添加jar包的操作也是一樣,只要把jar包復制到lib目錄下(切換到Project Files視圖下會看到Lib目錄),然后同樣操作project structure,選擇file dependency后選擇依賴lib庫下剛添加進的jar包即可。

但是如果是添加線上開源庫的話,二者的差距就體現出來了,以往在github上看到優秀的開源庫,想要應用到自己的項目中,就得先把項目下載下來,然后再添加依賴,雖然操作不繁瑣,但是我漸漸發現github上越來越多的開發者都轉向AS,不再單獨提供eclipse上使用的版本。這個不贅述,因為想轉平臺,能看到這篇博客的朋友,肯定或多或少都有些同感。總之一句話:google大法好。退eclipse保平安,趕緊轉AS吧。

初識gradle

在android視圖gradle目錄下,可以看到有多個build.gradle,其中后綴module + 項目名 的就是平時添加第三方庫時需要配置的gradle文件了,以Github上CircleImageview這個開源庫為示例,其github主頁上有這么一段代碼:

github上的導入gradle教程

我們唯一要做的,就是將這段代碼拷貝到項目的gradle-dependencies語句塊下
gradle

然后點擊工具欄圖標
Sync Now

之后gradle就會自動從遠程倉庫下載該庫所需要的jar包等依賴文件,一鍵搞定,簡直不要太爽!

然而gradle爽是爽,但是后續也會提到在導入項目時因為gradle版本不同而出現一些麻煩的地方。

導入Eclipse項目

上面說了如何依賴庫,但有些朋友需要開發舊項目而不是新建項目,光導入eclipse項目時報的錯都夠喝一壺了,更別提如何正確的依賴庫,所以接下來就示范一下如何正確的導入eclipse的項目。不同項目會出現的問題不盡相同,這里權且算是拋磚引玉,給大家提供一些解決問題的思路。
首先在eclipse里,右鍵-export,導出項目的gradle目錄


導出gradle

選中要導出的項目,一路next,最后一步建議force overriding一欄打勾(我理解為是已存在gradle文件,選中的話將強制重寫),導出成功后會出現提示:


導出成功提示

請選擇以下目錄: ...build.gradle,不要導入Eclipse項目本身!

別人我不知道,反正我是照著這個提示在AS里導入目錄下的build.gradle文件,然后結果就把整個工作目錄里的項目都給導入了(╯‵□′)╯︵┻━┻。什么鬼!一定是我打開的方式不對!后來在AS里嘗試


導入1

導入2

導入時選擇項目本身,而不是build.gradle文件,這才導入成功。但是不要高興的太早,這才只是麻煩的開始。

問題1 找不到類

問題1

解決辦法:找不到相關的類,定位到代碼,發現是recyclerview的一些類報錯,于是猜測是因為依賴的問題,在項目依賴庫里添加recyclerview庫,問題解決!


添加recyclerview庫

問題2 庫重復依賴

庫重復依賴

錯誤提示中可以看到是因為有多個同名的庫報錯,因為我從eclipse導出項目時就自帶了supportV7的recyclerview的庫,而我剛剛有添加了新的recyclerview庫,所以二者重復依賴了,解決辦法很簡單,去除之前的recyclerview依賴即可,問題解決!

問題3 清單文件合并出錯 Manifest merger failed

清單文件合并出錯

整個報錯信息是這樣的:

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

可以看到是是因為circleimageview的minSdkVersion低于appcompatV7定義的version而導致的清單文件合并出錯,提示中也告訴了我們解決方法,只要在circleimageview的清單文件中配置好即可。


清單文件配置

問題4 程序包不存在

程序包不存在

這個問題也簡單,定位到相關的代碼,使用快捷鍵:ctrl+alt+O, 去除無效的導包即可。

問題5 重復文件(jar包) Duplicate files

重復jar包

提示信息中也標明了是在File1,File2中兩個不同的庫含有相同的文件(jar包)導出出錯,在prodect視圖下查看lib目錄,可以看到確實是有重復文件


重復文件

解決問題也很簡單:刪除jar包,去除依賴即可


去除依賴

問題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

這個沒看懂錯誤原因,但是最后通過在項目的module的build.gradle里添加配置multiDexEnabled true后解決了問題,但是不知其所以然。

defaultConfig {
  applicationId "com.example.newonebuy" 
  minSdkVersion 11 
  targetSdkVersion 21 
  multiDexEnabled true
}

問題7 SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable

出現該問題的原因是在環境變量未正常配置,右鍵我的電腦 -> 屬性 -> 高級設置 -> 環境變量

  1. 添加 ANDROID_HOME,值為 sdk 的安裝目錄
  2. 在 Path 變量的值后面添加%ANDROID_HOME%/tools;%ANDROID_HOME%/platform-tools;
  3. 重啟 Android Studio

問題8 提示 BuildToolsVersion 或 Gradle Version 錯誤

這是因為本地的 BuildTools 版本和 Gradle 版本與你正在導入的項目的版本不一致導致的問題。關于如何解決這個問題在下一篇 eclipse再見,android studio 新手入門教程(三)Github(.ignore忽略規則)的使用 里有講到,請移步觀看。

在導入之前,看著一行又一行紅彤彤的報錯我的內心是崩潰的,但其實只要耐著性子根據提示逐個排查,遇到不懂的就谷歌,畢竟這都是些很初級的問題,總是會解決的。最近生活里的煩心事不少,在碼代碼時漸漸能感受到一種很奇妙的感情。在代碼的世界里,1是1,0是0,只要你愿意付出心血,錯誤總會消失,bug總會修復。不像現實世界,很多事情人心難測,即便人心可測本心也難移,很多時候會感覺到深深的無力和無可奈何。

不多扯了,這篇先分享這些吧。下篇博客會分享一下在AS上使用github進行版本控制的一些事,還有在導入module時因為gradle版本而導致的一些問題。

另外最近看到kotlin這門新興的語言似乎挺有意思,等到下個項目嘗試一下看kotlin能否高效、有效的解決一些問題,如果后面有什么收獲,也有寫出來分享的。

有一分熱發一分光,寫的文章只要有一個人看到,解決了一個人的問題,那文章就有價值。即使都沒人看,那就當做寫給自己,作為對所思所學的一個總結吧。

但行善事,莫問前程。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容