天天看點

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.2

Error :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比較容易解決,我就不貼出來,留下這份筆記!作為經驗防止以後踏入同一個坑!