Android – 匯入專案以及注意事項

本篇接續在專案的建立後,來介紹如何匯入一個已有程式碼的專案,其實在本篇中也不過就是把原本建立的 Hello World 範例移除,再將之匯入罷了XD。

不過除了匯入專案外,本篇還介紹到一些需要注意的事項,以及在匯入後可能會發生的錯誤,如

匯入專案


匯入專案可以從在專案建立說明中所提及的新增專案方式(前三點)時,選擇 Android Project from Existing Code 來增加一個已存在的專案;另外還多了一個選擇可用(第四點)。

  1. 文字工具列的 File > New > Other
  2. 專案管理視窗 滑鼠右鍵 > New > Other
  3. 圖示工具列的(NEW)

    NewAExistingProject
    新增一個已存在的專案

File > Export... 選擇 Android > Existing Android Code Into Workspace

ImportProjects
匯入專案
  • Root Directory
    點選 Browse... 選擇專案的目錄。
  • Projects
    選擇已存在的 Android 專案目錄後,這邊就會出現以專案之 package name 開頭的專案名稱。
  • Copy projects into workspace
    勾選之後,系統會將程式碼複製建立在我們的 workspace 路徑裡,而其目錄名稱會以  package name + 主 Activity name 之組合為名,以這邊為例 work space 目錄裡就會增加一個 demo.mosil.helloworld.MainActivity 。

以上資料填完之後,下一步即可將專案匯入到我們的專案列表中嘍!

至於是否要將專案加入 workspace,就完全看個人需求,以自己個人的開發經驗來說,通常都會加入,原因是,要是不小心程式改壞了,還有舊的可以比對。就算有用 source control 但總是有一份原本”好好”的專案程式碼,要追蹤起來也方便的多,不過這純是個人的感覺,是一個沒有定論或是怎麼做會比較好的答案!

 

注意事項


1. 匯入之專案要留意 Package Name 與既有專案名稱相衝

從上述得知,我們加入一個舊的程式專案時,系統會為我們加入一個以 package name + 其主activity name 為名之專案,但這邊記得加入後記得修改專案名稱,以免之後我們要再匯入一次這個專案或是剛好有一個同名專案時,系統自然不會讓我們加入。

2. Unable to resolve target ‘android-8’

匯入專案後可能常常會在 Console視窗 看到這個訊息,原因在於我們現在會將最低相容版本設定為 Android API 8,即 Android 2.2 的版本,而我們在安裝 SDK 時可能只有安裝現階段最高版本,比如說 Android API 16,當 API 16 的原生版本以及 Google API 皆有安裝時,系統會自動以 Google API 16 為專案核心,如下圖:

Google API 16
只有安裝 API 16 時,匯入專案會只用這個版本做為預設核心

不過,這個警告可以不用理他就是XD。但若是 SDK 有安裝 Android 2.2 的話,那系統就會直接為我們把核心設定成 Android 2.2,如下所示:

Android API 8
如果有安裝 API 8 時,就會以 Android API 8為核心

3. 錯誤的復原

若是我們原有的專案於建立的時候,  Build SDK 為 API 16 ,以及 Minimum Required SDK 是 API 8,在之前沒有去更動資源的狀況,且如上述有 Android API 8 的環境下匯入存在的專案時,會發生如上圖中,專案前的圖示有錯誤圖示,而在 Problems視窗 會看到下列兩個錯誤訊息:

  1. Description Resource Path Location Type error:
    Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Holo.Light.DarkActionBar’. styles.xml
  2. Description Resource Path Location Type error:
    Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Holo.Light’. styles.xml

這個狀況是因為,在建立 API 16 時,系統會為我們自動新增 values-v11 以及 values-v14 這兩個分別是 API 11 以及 API 14 的資源目錄,所以在 API 8 為核心的狀況下,系統是不認得他的。而解決方式有二:

  1. 直接刪除掉這兩個用不到的資源目錄。
  2. 更改核心:在專案名稱上點擊滑鼠右鍵,選擇 Properties 再選到左側列表的 Android 選項,可以看到如下的畫面,
Change Android Project Build Target
變更 Project Build Target

這時候,勾選 Android 4.1 或是 Google APIs (API Level 16) 的版本;接著再點擊工具列的 Project > Clean 選擇該專案,讓 R.java 重建即可。

而這個動作要注意到 Project > Build Automatically 是否有被勾選,否則,系統只會很單純地幫我們把 R.java 清掉而已。

Build Automatically
Build Automatically 在執行 Clean 之後,會再自動產生 R.java

4. The method onClick(View) of type xxx must override a superclass method

匯入時可能會發現專案名稱前的圖示會多一個紅色的叉叉,可是 Console視窗 並沒有給予什麼提示訊息,而在 Problems視窗 會看到 The method onClick(View) of type xxx must override a superclass method 這樣的錯誤訊息。

這個狀況是因為 @Override 這個標籤是在 Java 1.6 以後才可以使用的。

解決方式,請在專案名稱點擊滑鼠右鍵後,選擇 Properties 後再看到左側列表的 Java Compiler 選項,這時可以看到右側有一個項目為 Compiler compliance level 將預設的 1.5 改成 1.6 即可。

Java Compiler
變更 Java 編譯的版本

5. Android requires compiler compliance level 5.0 or 6.0. Found ‘1.x’ instead. Please use Android Tools > Fix Project Properties.

這個狀況算是上一個錯誤的延續,因為我們可能在電腦中所安裝的是 JAVA 7 以後的版本,所以在調整時,會想說那不如就直接調到最新的版本 (1.7) 吧!可是偏偏 Android 的 SDK 是在 JAVA 5 以及 6 的版本中所誕生,因此, 太舊的版本會有不能接受 @Override 標籤的問題,而太新的版本會造成 Android SDK 的編譯不接受的狀況,這時候中庸之道就很重要啦(好像又扯開了XD)。

若是要解決這個錯誤,最好是用上述之方式手動修改之,不要使用系統建議的方式去修正他,因為使用之後,系統會將編譯版本調整為 1.5 ,所以,請慎之!

 

本部落格採用創用CC 姓名標示-非商業性-禁止改作 3.0 台灣 授權條款授權,如欲轉載請記得註明「莫希爾(Mosil) 手札

Loading Facebook Comments ...

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *