Android,从导入的 jar 文件中找不到类

标签 android import jar

我在我的 Android 项目中包含了一个 jar 文件,如 How can I use external JARs in an Android project? 中所述.使用 MannyNS 和 Vinayak B. 在这篇文章中描述的这两种方法,我得到错误“找不到类 'test.libraryCalc.Calc”,这是库提供的类。下面的代码说明了这个问题:

通过库提供的示例类:Calc.java

package test.libraryCalc;

public class Calc {
    public int add(int a, int b){
        return a + b;
    }
}

图书馆测试 Activity .java

package test.library;

import test.libraryCalc.Calc;
import android.app.Activity;
import android.os.Bundle;

public class LibraryTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Calc calc = new Calc();
        int c = calc.add(3, 4);
    }
}

我把包含Calc.java的jar文件导出到LibraryTest\libs\calc.jar

enter image description here

并使用 LibraryTest 的 Java 构建路径中的“添加 JAR...”按钮添加对它的引用

enter image description here 该库显示在 LibraryTest 中的引用库中

enter image description here

LibraryTest 没有构建问题,但在模拟器上运行时,LogCat 中显示以下内容:

12-27 14:01:33.965: E/dalvikvm(747): Could not find class 'test.libraryCalc.Calc',               referenced from method test.library.LibraryTestActivity.onCreate
12-27 14:01:33.965: W/dalvikvm(747): VFY: unable to resolve new-instance 13   (Ltest/libraryCalc/Calc;) in Ltest/library/LibraryTestActivity;
12-27 14:01:33.995: D/dalvikvm(747): VFY: replacing opcode 0x22 at 0x0008
12-27 14:01:33.995: D/dalvikvm(747): VFY: dead code 0x000a-0013 in Ltest/library/LibraryTestActivity;.onCreate (Landroid/os/Bundle;)V
12-27 14:01:34.065: D/AndroidRuntime(747): Shutting down VM
12-27 14:01:34.065: W/dalvikvm(747): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-27 14:01:34.075: E/AndroidRuntime(747): FATAL EXCEPTION: main
12-27 14:01:34.075: E/AndroidRuntime(747): java.lang.NoClassDefFoundError: test.libraryCalc.Calc
12-27 14:01:34.075: E/AndroidRuntime(747):  at     test.library.LibraryTestActivity.onCreate(LibraryTestActivity.java:14)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.os.Looper.loop(Looper.java:123)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.main(ActivityThread.java:4627)
12-27 14:01:34.075: E/AndroidRuntime(747):  at java.lang.reflect.Method.invokeNative(Native Method)
12-27 14:01:34.075: E/AndroidRuntime(747):  at java.lang.reflect.Method.invoke(Method.java:521)
12-27 14:01:34.075: E/AndroidRuntime(747):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-27 14:01:34.075: E/AndroidRuntime(747):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-27 14:01:34.075: E/AndroidRuntime(747):  at dalvik.system.NativeStart.main(Native Method)
12-27 14:06:34.170: I/Process(747): Sending signal. PID: 747 SIG: 9

需要做什么才能让它发挥作用?感谢所有建议。

最佳答案

我认为问题在于您尝试添加包含 Android 代码的 jar。你不能做这个。要包含 Android 代码,您应该创建 Android 库。只需创建一个 Android 项目,然后在项目属性 Android 部分设置这是库项目。之后,您就可以将此库添加到您的项目中。有关 Android 库的更多信息,您可以阅读 here .

更新:我已经试过你的代码了。它适用于我的情况。我所做的唯一区别是在导出 Jar 期间我检查了导出 Java 源文件和资源。希望这会帮助你。试试吧!

关于Android,从导入的 jar 文件中找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8645442/

相关文章:

java - 如何清除 Java 缓存中的特定文件?

java - 我在哪里可以下载 org.apache.http 包的 jar?

eclipse - 将复杂的 Ant 脚本转换为一组 Eclipse 项目的合理方法是什么?

android - 如何将Jgit添加到你的Android项目中?

r - 将包含德语变音符号的 CSV 文件导入 R

reactjs - 尝试导入错误: 'reactstrap' does not contain a default export (imported as 'Table' )

导入时出现 MySQL 语法错误

android - 有没有办法在不覆盖 build.xml 的情况下生成 ant 文件 local.properties?

java - Android java 如何连接到具有不同网络/IP 地址的服务器

java - 将数据推送到设备的最佳方式是什么?