2012-04-14 40 views
0

我剛剛開始在Android開發,並使用NetBeans與NBAndroid和SDK 17共享Java庫與Android應用

我想使用相同的Java源代碼在我的Java和Android應用程序。

http://developer.android.com/guide/developing/projects/projects-eclipse.html說如何在Eclipse中做到這一點(雖然它粗略的.JAR連接的東西),但我似乎無法讓它在NB中工作。

基於該鏈接,我的理解是Android應用程序的正確設置是一個Android應用程序項目,它引用一個Android庫項目,該項目又引用由Java庫項目生成的.JAR庫。然後我可以有一個Java應用程序項目引用相同的Java庫項目。

所以,我設置了這個項目結構......我有一個AndroidApp項目,它是com.ex包中的基本HelloAndroid活動。該項目在Libraries文件夾中包含一個AndroidLib庫項目。我也有一個LibClass.java文件,它定義了一個簡單的LibClass類,它有一個函數getText(),它只返回一個要顯示的字符串。 AndroidApp中的MainActivity調用這個來獲取要輸出的字符串。

當我把LibClass.java直接放到AndroidLib項目中時,一切都很好。

但我想要做的就是與Java共享源代碼。

因此,我想將LibClass.java移動到JavaLib庫中,該庫的.JAR文件包含在AndroidLib項目中。但是,當我嘗試這樣做時,MainActivity類中出現錯誤,抱怨找不到LibClass。查看Projects窗口,我可以在AndroidLib項目的Libraries文件夾中的JavaLib.jar的com.ex包中看到LibClass.class。並且AndroidLib在AndroidApp項目的Libraries文件夾中可見,但它不顯示任何包或其他內容。

所以我覺得我只是離開這項工作的一步。我是否需要對AndroidManifest文件中的某個或某些文件進行操作?或者用build.xml文件做些什麼?或者我完全在錯誤的軌道上?

如果有人能爲此發佈一個指導方針,我將非常感激。

回答

0

如果我理解你的情況正確,你正在嘗試爲你的android和java應用程序使用一個自定義java庫。

對於這種情況,您可以先構建java庫。不要將java庫jar添加爲android庫,而是直接將jar放入android項目的libs文件夾中,並將其添加到android項目的構建路徑中。

如果您使用ANT腳本構建java庫jar,則可以考慮將源文件也作爲jar的一部分添加。這將幫助您在開發android部件時獲得代碼幫助。但是這部分純粹是可選的。

+0

我對ANT腳本一無所知,但瞭解它們位於Netbeans後面的某處。如果我把JAR庫直接放到Android項目中,它會編譯成OK,但不會運行。我懷疑這是因爲JAR在某種程度上取決於JDK平臺而不是Android平臺。除了將其作爲Android項目創建之外,似乎沒有辦法將Android平臺添加到項目中。 – user998303 2012-04-15 21:25:18

0

問題是Android中的Java平臺與JDK平臺不同。

尤其是,.JAR庫不能引用Android平臺中未包含的任何內容。你不能引用的一個例子是java.awt。*(除了你可以有java.awt.fonts)。

JDK字符串和Android字符串之間也有區別 - Android沒有實現isEmpty()方法。

+0

這個字符串「問題」是因爲你針對的是舊版本的android,isEmpty()是在Android Api 9,薑餅和JDK 6中引入的。當針對這些舊版本認爲你使用的是jdk 5 – brunodles 2015-04-05 01:47:53

0

我在嘗試類似的東西;我已經有了使用Eclipse構建的Java EE項目,並且我正在嘗試利用Android項目中的一些代碼。這應該給我一個共享的代碼庫,而不是一堆令人困惑的SVN外部代碼,這是我以前不得不忍受的。

與其創建JAR文件我發現使用平臺的源代碼和構建工作效果最好(當然,它一直在工作,但我現在遇到了問題)。所以,我在做什麼是:

c:\MySvnFolderStructure\MyJavaProjectFolder\src\  (and then all the source under that) 
c:\MySvnFolderStructure\MyJavaProjectFolder\android\ (and all the Eclipse Android project gubbins) 
c:\MySvnFolderStructure\MyJavaProjectFolder\jee\  (and all the Eclipse JEE project gubbins) 

而Android和Java EE項目並沒有自己的src的文件夾,它們都鏈接到src文件夾中的父文件夾。這意味着每個Java實現都從源代碼構建自己的字節碼版本,並使用自己的外部庫(例如Apache HTTP)。

當然,他們不能像awt那樣共享東西(如另一篇文章中提到的那樣),但是有很多東西可以交叉使用,特別是如果它是正在使用的核心Java類。

此外,編寫JUnit測試也有點棘手,因爲此時需要重複測試代碼,因爲Android需要額外的工具,但我正在努力。您也可以在Eclipse中查看this post about relative paths,這意味着可以將文件夾簽出到不同機器的不同位置(就像我們都使用版本控制簽出一樣)並仍然共享。

+0

是的,這就是我想要做的。我誤解了Java鏈接/加載JAR的方式。沒有特別的原因,我認爲Java鏈接/加載像C.未解析的引用不會阻止執行,只要他們沒有解除引用。所以我可以導入awt。*,但只要我沒有使用awt。* Android版本中的對象都可以。這個假設結果是非常錯誤的。感謝您的有用答案。 – user998303 2012-05-07 02:01:37