4

我正在尝试为 java 项目生成 jar 文件,然后在 android 项目中引用该 jar 文件。作为测试,我创建了一个仅包含以下类的简单 java 项目

package test;
public class Test {
public static void hello(){
    System.out.println();
}
public static void main(String[] args){
    hello();
}

}

我将此项目导出为 Eclipse 下的可执行 Jar 文件。然后我将此 jar 文件复制到一个 android 项目的“libs”文件夹中,因此 jar 文件出现在私有库中,我选中了“订购和导出”选项卡下的私有库框。我通过将以下语句添加到android 项目的主要活动的onCreate()来引用 jar 文件

  Test.hello(); //reference the jar file

但是,当我运行 Android 项目时,我得到了

java.lang.NoClassDefFoundError: test.Test

错误。完整的错误跟踪跟踪如下

 10-17 23:14:52.976: E/AndroidRuntime(16725): FATAL EXCEPTION: main
 10-17 23:14:52.976: E/AndroidRuntime(16725): java.lang.NoClassDefFoundError: test.Test
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at      
  com.skyhookwireless.samples.wpsapitest.WpsApiTest.onCreate(WpsApiTest.java:71)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at    
  android.app.Activity.performCreate(Activity.java:4470)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at 
 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at 
 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at 
 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at 
 android.app.ActivityThread.access$600(ActivityThread.java:128)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at 
 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at 
 android.os.Handler.dispatchMessage(Handler.java:99)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at 
  android.os.Looper.loop(Looper.java:137)
  10-17 23:14:52.976: E/AndroidRuntime(16725):  at     
   android.app.ActivityThread.main(ActivityThread.java:4517)
    10-17 23:14:52.976: E/AndroidRuntime(16725):    at  
    java.lang.reflect.Method.invokeNative(Native Method)
   10-17 23:14:52.976: E/AndroidRuntime(16725):     at 
  java.lang.reflect.Method.invoke(Method.java:511)
  10-17 23:14:52.976: E/AndroidRuntime(16725):  at          
  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
  10-17 23:14:52.976: E/AndroidRuntime(16725):  at  
  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
 10-17 23:14:52.976: E/AndroidRuntime(16725):   at    
    dalvik.system.NativeStart.main(Native Method)

附件是订单和导出选项卡的屏幕截图以及每个库中包含的 jar。每个库中包含的罐子订单和导出选项卡

有谁知道我该如何纠正这个?

我已经阅读了本网站上有关 NoClassDefFoundError 的几篇文章(例如this ),并尝试了评论或答案中列出的解决方案。但是在这个简单的场景中没有人能解决我的问题。

4

4 回答 4

0

为什么不将 Java 项目导入 Android 工作区,然后将其用作 Android 项目中的库?这应该可以解决您的问题。

于 2013-10-18T03:39:08.107 回答
0

我觉得您的项目和测试类的主要活动是由单独的类加载器加载的。看看这个,找出你可能错过的地方。

http://javareferencegv.blogspot.com/2013/10/debugging-javalangnoclassdeffounderror.html

于 2013-10-18T03:07:44.777 回答
0

您可以按照以下步骤进行操作,这是用于从 android 库项目中制作 jar

$ cd your_project_path
$ android update project -p .
$ ant jar
于 2013-10-18T03:11:03.107 回答
0

我认为 Dalvik VM 不可能运行 Java 字节码。而且你的 Java JAR 不包含任何 .dex 文件,它里面的类也不会被发现。

有关 DEX 格式的信息,请参阅此答案

您可以将 Java JAR 转换为 Android JAR。或者将您的 Java 源代码添加到您的 Android 项目中,甚至引用与您的 Java 项目相同的源文件...

于 2017-02-01T21:30:10.840 回答