1

我正在尝试在 Android 中创建一个库项目并在其他项目中使用该库。

我创建了一个简单的库项目,其中一个布局显示了一些文本。检查它是否设置为“是图书馆”,然后继续。

我将在“bin”目录中创建的 Jar 文件复制到新项目的“assets”文件夹中(也尝试了“libs”方法,结果相同)。

我已经检查了“属性-> java 构建路径-> 订单和导出”,它就在那里并被选中。

在应用程序中,我试图从库中启动一个活动,使用:

    Button btnLoad = (Button)findViewById(R.id.btnLoadLibrary);
    btnLoad.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, LibraryActivity.class);
            startActivityForResult(intent, 0);
        }
    });

导入库后:

import com.example.superlibrary.LibraryActivity;

这里没有错误。

然后,当我启动应用程序并按下按钮时,我得到:

05-01 20:24:07.030: E/AndroidRuntime(19011): FATAL EXCEPTION: main
05-01 20:24:07.030: E/AndroidRuntime(19011): java.lang.NoClassDefFoundError: com.example.superlibrary.R$layout
05-01 20:24:07.030: E/AndroidRuntime(19011):    at com.example.superlibrary.LibraryActivity.onCreate(LibraryActivity.java:12)
05-01 20:24:07.030: E/AndroidRuntime(19011):    at android.app.Activity.performCreate(Activity.java:5206)
05-01 20:24:07.030: E/AndroidRuntime(19011):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)

为了确保,我已经检查了应用程序的清单文件,并且在那里:

    <activity
        android:name="com.example.superlibrary.LibraryActivity"
        android:label="LibraryActivity" >
    </activity>

所以它被认可和包括在内......

任何想法为什么会发生此错误?(java.lang.NoClassDefFoundError)

谢谢!

4

3 回答 3

1

Eclipse 对添加外部库非常挑剔,我曾经做过的唯一方法是将库复制并粘贴到项目的 lib 文件夹中,然后打开 Eclipse 并在新项目中右键单击项目资源管理器中的项目并左键单击在刷新。话虽如此,请确保该库同时出现在 libs 文件夹和 Android Dependencies 文件夹中,如下面的屏幕截图所示。

在此处输入图像描述

于 2013-05-01T17:45:22.493 回答
0

http://developer.android.com/tools/projects/index.html

根据文档

但是,库项目与标准 Android 应用程序项目的不同之处在于,您不能将其直接编译为自己的 .apk 并在 Android 设备上运行。同样,您不能将库项目导出到自包含的 JAR 文件,就像对真正的库所做的那样。相反,您必须通过在依赖应用程序中引用库并构建该应用程序来间接编译库。

当您构建依赖于库项目的应用程序时,SDK 工具会将库编译为临时 JAR 文件并在主项目中使用,然后使用结果生成 .apk。

您不能将库项目导出到 JAR 文件

库不能作为二进制文件(例如 JAR 文件)分发。这将在 SDK 工具的未来版本中添加。

您需要在您的 android 项目中引用一个库项目。

检查以下链接。

http://developer.android.com/tools/projects/projects-eclipse.html

于 2013-05-01T17:38:45.867 回答
0

绝对可以在 android 项目中包含一个 jar 并从中启动一个活动。以下链接深入讨论了如何创建库项目以及如何详细引用库项目

http://developer.android.com/tools/projects/projects-eclipse.html#ReferenceLibraryProject

以下代码可让您从 jar 启动活动

final Intent it = new Intent(android.content.Intent.ACTION_VIEW);
it.setClassName(getApplicationContext(), "<complete path of the Activity class>");
startActivity(it);
于 2014-03-28T05:10:00.250 回答