java - 如何创建可由多个 Android 项目重复使用的类的 jar 文件?

标签 java android eclipse noclassdeffounderror

这是我到目前为止所遵循的步骤,但没有成功。我对 Java 项目非常陌生,所以我怀疑我可能遗漏了一些明显的东西。

我使用 Eclipse 创建了一个名为 TestSDK 的简单 Java 项目,在其中创建了一个名为 com.test.testsdk 的包,并在其中创建了以下类:

package com.test.testsdk;
public class TestClass {
    public void TestMethod() {
    }
}

此编译没有错误或警告。

然后我使用 Eclipse 和标准导出选项(导出生成的类文件和资源、压缩 JAR 的内容、生成 list 文件)将其导出为 JAR 文件 (TestSDK.jar)。我已经尝试密封和不密封 JAR,这没有区别。

然后我从向导列表中的文件->新建->项目创建一个新的 Android 应用程序项目。这在 Android 模拟器和我的测试设备上编译和运行时没有警告或错误(我收到了 hello world 消息)。

然后我添加对我的 TestSDK.jar 文件的引用(使用各种不同的方法,我将在稍后展开),将其导入主要(也是唯一的)Android Activity ,并尝试实例化我的 TestClass 并调用 TestMethod在上面,像这样:

package com.apptest.mobilesdktestapp;

import android.app.Activity;
import android.os.Bundle;

import com.test.testsdk.TestClass;

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

        TestClass test = new TestClass();
        test.TestMethod();
    }
}

这可以正常编译,没有警告或错误。但是,当尝试在模拟器或设备上运行它时,我在 LogCat 窗口中收到以下错误:

AndroidRuntime    Uncaught handler: thread main exiting due to uncaught exception
AndroidRuntime    java.lang.NoClassDefFoundError: com.test.testsdk.TestClass

在网络上搜索 NoClassDefFoundError 会得到很多关于如何导入 JAR 文件以使类路径正确的建议。因此,我尝试了以下所有导入 JAR 文件的方法:

  1. 从项目属性中 Java Build Path 的 Libraries 选项卡中“添加外部 JAR...”,然后在 Order 和 Export 选项卡中检查(或不检查,我都试过了)JAR。还尝试将 JAR 移至“订购和导出”列表的顶部,但没有任何区别。

  2. 在项目中创建一个“libs”文件夹,并在其中添加 JAR。我确认 JAR 然后也被添加到项目列表中的“Android Dependencies”中。还尝试右键单击 JAR 文件并选择“构建路径”->“添加到构建路径”,但没有任何区别。

  3. 将 JAR 移动到我的 Android 应用程序项目目录中并执行“添加 JAR...”而不是步骤 1 中的外部 JAR,以及是否导出的所有排列并将其移动到订单列表的顶部还是不是。

我随后下载了其他打包为 JAR 文件的第三方 SDK,并将它们包含在同一个 Android 应用程序项目中,并且使用上述 3 种方法中的任何一种都可以正常工作(我能够从这些方法中实例化类SDK 并在没有错误的情况下使用它们),这让我相信我在我的 TestSDK 项目和/或类中遗漏了某些东西或做错了什么,这阻止了它在 Android 应用程序项目中使用。

正如我所说,我是 Java 的新手,所以我希望它是我忽略的一些简单的东西。任何帮助或指导将不胜感激。

最佳答案

如果您使用的是R17或更高版本的Android工具和Eclipse中的ADT,则#2的第一句是正确答案;您问题中列出的所有其他内容充其量是不必要的,最坏的情况是有害的。

我建议您创建一个干净的项目,创建测试 Activity ,创建libs/ 文件夹,将JAR 复制到libs/ 文件夹,代码到JAR的API,编译,运行。如果可行,那么您的原始项目仍然存在您之前的努力遗留下来的东西,这些东西让您感到悲伤。如果它失败了,那么就会发生一些相当奇怪的事情。 JAR 本身应该没问题,否则您会遇到编译错误。

关于java - 如何创建可由多个 Android 项目重复使用的类的 jar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11319924/

相关文章:

java - 获取不兼容的类型和数组所需的错误

android - 如果我们将 android 中的 Room DB 中的列类型 TEXT NOT NULL 更改为 TEXT,如何添加迁移

javascript - 检查电话号码是否可用

eclipse - Maven 构建错误 : Failed to execute goal, 缺少一个类

java - Eclipse 在保存 java 文件后删除外部导入

Java:2008 年之后的正则表达式

java - 将 ArrayList<> 转换为 TableView 的 ObservableList<>

android - 如何在 Android 上将 8 位二进制图像数据加载到 OpenGL ES 2 纹理中

java - 从流中读取 JarEntry

java 。萨克斯解析器。如何手动中断解析?