2012-04-14 46 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