編輯:關於Android編程
上一篇博客介紹了AS的一些常用設置方法,當工具調教妥當後,自然就要開始項目的開發啦。從零開始新建一個項目,這個簡單,不必多說,這篇博客會分享我從舊平台eclipse導入項目到AS的過程,以及遇到的一些問題並如何解決。開篇先粗略的提一些需要注意的地方。
和eclipse不同,在android 視圖下的項目目錄分為java,res和manifests。
vcDvw+a05rfF18VhcHC1xMb0tq/NvLHqoaOy6b+0udm3vc7EtbWjrL+0tb3V4sO00ru+5KO6DQo8cD48aW1nIGFsdD0="mipmap文件夾" src="/uploadfile/Collfiles/20160419/2016041909044116.png" title="\" />
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
大意是為了避免設備顯示問題,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吧。
在android視圖gradle目錄下,可以看到有多個build.gradle,其中後綴module + 項目名 的就是平時添加第三方庫時需要配置的gradle文件了,以Github上CircleImageview這個開源庫為示例,其github主頁上有這麼一段代碼:
我們唯一要做的,就是將這段代碼拷貝到項目的gradle-dependencies語句塊下
然後點擊工具欄圖標
之後gradle就會自動從遠程倉庫下載該庫所需要的jar包等依賴文件,一鍵搞定,簡直不要太爽!
然而gradle爽是爽,但是後續也會提到在導入項目時因為gradle版本不同而出現一些麻煩的地方。
上面說了如何依賴庫,但有些朋友需要開發舊項目而不是新建項目,光導入eclipse項目時報的錯都夠喝一壺了,更別提如何正確的依賴庫,所以接下來就示范一下如何正確的導入eclipse的項目。不同項目會出現的問題不盡相同,這裡權且算是拋磚引玉,給大家提供一些解決問題的思路。
首先在eclipse裡,右鍵-export,導出項目的gradle目錄
選中要導出的項目,一路next,最後一步建議force overriding一欄打勾(我理解為是已存在gradle文件,選中的話將強制重寫),導出成功後會出現提示:
請選擇以下目錄: …build.gradle,不要導入Eclipse項目本身!
別人我不知道,反正我是照著這個提示在AS裡導入目錄下的build.gradle文件,然後結果就把整個工作目錄裡的項目都給導入了(╯‵□′)╯︵┻━┻。
什麼鬼!一定是我打開的方式不對!後來在AS裡嘗試
導入時選擇項目本身,而不是build.gradle文件,這才導入成功。
但是不要高興的太早,這才只是麻煩的開始。
解決辦法:找不到相關的類,定位到代碼,發現是recyclerview的一些類報錯,於是猜測是因為依賴的問題,在項目依賴庫裡添加recyclerview庫,問題解決!
錯誤提示中可以看到是因為有多個同名的庫報錯,因為我從eclipse導出項目時就自帶了supportV7的recyclerview的庫,而我剛剛有添加了新的recyclerview庫,所以二者重復依賴了,解決辦法很簡單,去除之前的recyclerview依賴即可,問題解決!
整個報錯信息是這樣的:
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.xml
Suggestion: use tools:overrideLibrary=”android.support.v7.appcompat” to force usage
可以看到是是因為circleimageview的minSdkVersion低於appcompatV7定義的version而導致的清單文件合並出錯,提示中也告訴了我們解決方法,只要在circleimageview的清單文件中配置好即可。
這個問題也簡單,定位到相關的代碼,使用快捷鍵:ctrl+alt+O, 去除無效的導包即可。
提示信息中也標明了是在File1,File2中兩個不同的庫含有相同的文件(jar包)導出出錯,在prodect視圖下查看lib目錄,可以看到確實是有重復文件
解決問題也很簡單:刪除jar包,去除依賴即可
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裡修改配置後解決了問題,但是不知其所以然。
defaultConfig {
applicationId "com.example.newonebuy"
minSdkVersion 11
targetSdkVersion 21
multiDexEnabled true
}
其實在導入之前,看著一行又一行紅彤彤的報錯我的內心是崩潰的,但其實只要耐著性子根據提示逐個排查,遇到不懂的就谷歌,畢竟這只是些很初級的問題,總是會解決的。最近生活裡的煩心事不少,在碼代碼時漸漸能感覺到一種很奇妙的感情,在代碼的世界裡,1是1,0是0,只要你願意付出心血,錯誤總會消失,bug總會修復,而不像現實世界,很多事情人心難測,即便人心可測也本心難移,很多時候會感覺到深深的無力和無可奈何。
不多扯了,這篇先分享這些吧。下篇博客會分享一下在AS上使用github進行版本控制的一些事,還有在導入module時因為gradle版本而導致的一些問題。另外最近看到kotlin這門新興的語言似乎挺有意思,等到下個項目嘗試一下看kotlin能否高效、有效的解決一些問題,如果後面有什麼收獲,也有寫出來分享的。有一分熱發一分光,寫的文章只要有一個人看到,解決了一個人的問題,那文章就有價值。即使都沒人看,那就當做寫給自己,作為對所思所學的一個總結吧。
但行善事,莫問前程。願世界和平,願某人喜樂平安。
第十九章、組合模式 組合模式也稱為部分-整體模式,結構型設計模式之一。1.定義將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對
微信紅包是騰訊旗下產品微信於2014年1月27日推出的一款應用,功能上可以實現發紅包、查收發記錄和提現。臨近春節了,新年發紅包是我們的傳統文化,現在微信紅包
內存洩露,是Android開發者最頭疼的事。可能一處小小的內存洩露,都可能是毀於千裡之堤的蟻穴。 怎麼才能檢測內存洩露呢?網上教程非常多,不過很多都是使用Eclipse
前言 好久沒有雙休一個周末了,唉,閒話不多說了,不管任何時候都要多學習充實自己。ROM Porting的工作是很繁瑣的,涉及的知識點很多,這裡介紹一下ROM Portin