2012-03-10 98 views
12

我使用Eclipse開發Android遊戲。 我在Android項目中開發了UI。如何在Android項目中包含Java項目?

另一方面,我在一個普通的Java項目中開發了AI,因爲我希望能夠在沒有Android模擬器的所有約束條件下進行測試(我沒有找到任何其他方式來運行代碼使用我的Windows JVM)。

現在我想要'加入'這兩個項目(可獨立工作),即使用UI中的AI Java類。

這是我曾嘗試:

在我的Android項目屬性>項目參考,我選中的Java項目。 這允許我在沒有錯誤的情況下構建Android項目(實例化AI對象)。

但它在運行時失敗,此錯誤:

Could not find class 'my.package.AI', referenced from method my.otherpackage.UI.onStart 

什麼是正確的方式包括AI Java項目到我的Android項目?

(注:我還是希望能夠開發和測試的AI作爲一個普通的Java應用程序,所以我想用罐子或複製所有的源到Android項目不適合我的需要)

編輯:

我希望,新的ADT V17可以解決這個問題,但事實並非如此。我已經試過幾乎提供所有的選項,包括在我的Android項目一期工程:

  • 添加或鏈接源文件夾
  • 添加項目(Java構建路徑>項目選項卡)
  • 添加類文件夾或庫(Java構建路徑>庫選項卡)
  • 滴答所有以前導入projets /庫,出口

允許編譯和運行沒有錯誤的唯一方法是將Java項目的JAR添加到Android項目構建路徑。

回答

-1

不要將其添加到項目引用區域,而是進入Android窗格(在項目屬性中),向下滾動到底部,並將其添加到Libraries下。

這有時會起作用,但有時會產生奇怪的Eclipse問題(不知道爲什麼),在這種情況下將jar直接複製到項目中似乎效果最佳。

+0

試過這個,但因爲它不是*一個Android庫項目,所以我不能將它添加到您提到的庫區域。 – 2012-03-10 19:00:03

+0

啊,我明白了。這看起來像它可能會幫助http://geekswithblogs.net/cyberycon/archive/2011/05/17/using-external-libraries-with-android.aspx – 2012-03-10 19:11:42

10

項目參考文獻只是將相關項目源代碼(您的AI項目)添加爲軟(可能較弱是一個更準確的詞)引用,您的AI項目不會添加到您的Android項目構建路徑中。所以當Eclipse構建你的應用程序時,實際的ai.jar不會被導出到最終的apk中。

您應該添加AI項目到Android項目的構建路徑:

  1. 在您的Android項目,選擇構建路徑右擊 - 配置構建路徑,在項目選項卡(必填項目的構建路徑),加你的AI項目在這裏。
  2. 然後在Order和Export選項卡(Build class path order和導出的條目)中,勾選您新添加的AI項目出現在列表中。

第2步可能是可選的,這應該添加AI項目作爲Android項目的參考,並在Eclipse構建您的Android項目時將ai.jar導出到final.apk。從ADT 17.0.0

更新:

的Android開發團隊剛剛發佈的SDK R17與ADT 17.0.0,聲稱現在妥善處理這個用例:

Eclipse specific changes

The dynamic classpath container called 「Library Projects」 has been renamed to 「Android Dependencies」 as it now contains more than just Library Projects.

The container will now also be populated with Java-only projects that are referenced by Library Projects. If those Java projects also reference other Java projects and/or jar files they will be added automatically (jar files referenced through user libraries are supported as well).

Important: this only happens if the references are set to be exported in the referencing project. Note that this is not the default when adding a project or jar file to a project build path. Library Projects (and the content of their libs/*.jar files) is always exported. This change only impacts Java-only projects and their own jar files.

Again, duplicates (both projects and jar files) are detected and removed.

this link

+0

當使用你的方法時,我仍然得到ClassNotFound異常。我發現的唯一方法就是允許無誤地運行應用程序,就是添加AI。jar的手動到構建路徑(只有這樣我看到apk的大小顯着增加,這意味着AI類導出在apk中) – 2012-03-11 09:58:27

+0

@Sebastien,你可能是正確的,Eclipse ADT插件有一個非常僵化的生命週期,顯然它doesn不支持自動構建除Android庫項目之外的任何依賴項目,然後將生成的lib.jar自動添加到構建路徑中。唯一的方法是將外部lib.jar明確添加到項目的構建路徑中。我知道像Maven這樣的構建工具更加靈活,並且提供了Android構建生命週期的強大配置。 – yorkw 2012-03-11 21:03:47

+0

@Sebastien,不願意看看r17的發佈。 – yorkw 2012-03-22 22:14:21

3

編輯:經過多次測試,閱讀並找到我的解決方案。問題在於(截至撰寫本文時),您無法引用Android項目中的其他項目,儘管它對於普通的Java應用程序項目可以正常工作。

解決方法,我(的Windows使用NTFS文件系統):
在提示符(管理員權限)使使用mklink /D命令指向你的源項目文件夾符號文件夾鏈接,並根據需要在Eclipse中刷新。 顯而易見的限制是你不能在源項目和目標項目中使用相同的包名稱,然後在公共項目中存在libs問題。

例如:

cd \java\workspace\AndroidProject\src\your\package 
mklink /D common c:\java\workspace\CommonProject\src\your\package\common 

澄清:可以參考從Android項目另一個項目,使其編譯,但是當你運行,從包含項目所引用的類不放在apk classes.dex(通過dex反編譯器驗證)。

0

在Windows 7 64bit上使用ADT 21.0.0 64位。我嘗試添加項目來構建路徑。在訂單和出口中打勾,按順序玩。我讀了official solution,該解決方案的detailed explanation,導出爲JAR,添加到庫。沒有工作,而來源沒有錯誤。請閱讀該解決方案不適用於所有人的評論。

已經厭倦了它,並嘗試了一個簡單但有點複雜的解決方案:將Java項目的源代碼鏈接到Android項目。那就是訣竅。希望這也能幫助他人。