Android studio 匯入另外一個專案作為依賴包問題集錦!!!
本篇文章主要用來記錄匯入專案作為依賴的問題集錦!!
昨天導師給了個任務,就是把AS的一個專案匯入到另外一個專案中作為library,跟之前把github上的開源專案匯入到工程中作為依賴是一樣的,由於之前只匯入過jar包 沒有匯入過一個專案,因此我就開搜了,結果因為搜的姿勢不對一直不行,百度搜索第一個eoe論壇的辦法也不管用,下面貼出我成功匯入的方法:
1.啟動AndroidStudio後,開啟你需要接收Library的專案。比如有兩個專案,專案A,和Library專案B,那麼開啟專案A。
2.在下拉選單中依次找到New— —Import Module,點選開啟專案匯入視窗。注意匯入的是Module而不是Project,如果是Project的話AndroidStudio會自動開啟一個新的視窗編輯,那樣的話就是不Library了。
3.在開啟的視窗中點選右側的"..."瀏覽視窗,在資料夾視窗中找到你要匯入的Library專案的位置,選擇後點擊底部的OK按鈕匯入。
4.匯入視窗中顯示了該Module(專案)的詳細資訊,點選Finish完成匯入。需要注意的是匯入到AndoridStudio專案中的Library也必須是AndroidStudio專案,不能是Eclipse專案,如果是Eclipse專案的話,需要選擇匯出AndroidStudio專案。
5.在專案首頁中選擇Project標籤,可以看到專案的檔案結構圖中多出了我們剛才匯入的專案。Library的匯入就完成了。
接下來是一些配置,把該library匯入到主專案中
1.點選頂部左上角的File選單,在出現的下拉選單中找到Project Structure,點選進入。
2.在視窗左側選擇原始的專案後,點選右側的Dependencies(依賴項)。可以看到專案當前引用的jar包等資訊。
3.點選右側的“+”新增按鈕,在下拉選單中找到Module Dependency(專案依賴),點選開啟專案選擇視窗。
4.選擇前面步驟中匯入的Library專案後,點選OK按鈕匯入到原始專案中。
5.原始專案的依賴項中就出現了匯入的Libray專案,這時在專案中就能正確引用Library專案中的內容了,點選底部的OK按鈕完成新增。
你以為這樣就完成了嗎?真是太天真了,這只是第一步,接下來會有無數的bug在等著你,下面就是本篇文章的正題了,bug集錦!!
Bug No.1
Error: AndroidStudio TransformException : Error:Execution failed for task':app:transformClassesWithDexForDebug'
解決方案:
在你的主專案的build.gradle檔案中,增加加粗的那一行
android {
compileSdkVersion ..
buildToolsVersion '...'
defaultConfig {
...
targetSdkVersion ..
multiDexEnabled true // this line will solve this problem
}
}
Bug No.2Error :unspecified on project app resolves to an APK archive which is not supported
解決方案:
在我們作為library的專案裡,他的頭部是apply plugin: 'com.android.application'
這句話告訴了Gradle將我們要作為library的專案編譯稱為application,也就是apk,這就是問題的所在;
方法就是,將上面該句改為:apply plugin: 'com.android.library' 後,別急 還有問題,Gradle將其編譯稱為一個Library,也就是庫,執行之後,會出現
Error :Libraryprojects cannot set applicationId. applicationId is set to 'package_name' indefault config.
那是因為一個庫不允許設定applicationId,需要將builde.gradle — android — defaultConfig中的applicationId刪除。
Bug No.3
Error:Error:Executionfailed for task ':greencar:processDebugManifest'.> Manifest merger failed withmultipleerrors, see logs。
原因:AS的Gradle外掛預設會啟用Manifest Merger Tool,若Library專案中也定義了與主專案相同的屬性(例如預設生成的android:icon和android:theme),則此時會合並失敗,並報上面的錯誤。
解決方案:
在manifest根標籤上加入xmlns:tools="http://schemas.android.com/tools",並在Manifest.xml的application標籤下新增tools:replace="name,icon, label,heme"
以及在主專案的 manifest檔案中,重複寫了 call_phone的許可權,網上也有人是某個activity下多寫了一句intent-filter,裡面沒有內容,將這些重複的空的刪掉就好,並將作為lib的minisdk與主專案同步(修改library飛build.gradle檔案中最小sdk,或者降低主專案的sdk)
Bug No.4
error:在作為library的專案中報錯:需要常量表達式
解決方案:
在一般的Android專案中,R類的常量都是用final定義的,但ADT 14之後,如果在library 專案中,它會沒有final關鍵字,而我們在作為library的專案中使用了switch ,在switch語句的case中,如果使用 R.id.xxx 則會提示有問題,不允許非常量在case語句中。
Google提供的一個方法就是把它轉化為if-else語句
以上就是我遇到的幾大bug,印象最深刻的四個,還有其他小bug比較容易解決,我就不貼出來,留下這份筆記!作為經驗防止以後踏入同一個坑!