android - 如何在 NetBeans 的 Android 项目中使用外部 jar?

标签 android netbeans jar

我需要创建一个 Android 库,我可以将其作为 jar 包含在任何 Android 应用程序中。我使用 NetBeans 6.8、nandroid 插件和 Android SDK。

到目前为止我采取的步骤是:

1) 创建库项目,其中包含 android.jar 以访问 Android 类(该库使用 android.util.Log 和其他 Android 类)。

2) 将库编译为 jar。

3) 将库的jar 添加到Android 应用程序中(右键单击项目节点下的Libraries 并添加jar)。

4) 将 添加到 Android list 中。(错误且不必要)

步骤 3 至少允许我在应用程序的源代码中引用库的类,但这些类似乎并没有在编译时实际包含在内。当我运行该应用程序时,我在日志中收到以下错误。

I/dalvikvm(  349): Could not find method mylibrarypackage.MyClass.myMethod, referenced from method myapplicationpackage.HomeActivity.onCreate
W/dalvikvm(  349): VFY: unable to resolve static method 985: Lmylibrarypackage/MyClass;.myMethod ()V
D/dalvikvm(  349): VFY: replacing opcode 0x71 at 0x000a
D/dalvikvm(  349): Making a copy of Lmyapplicationpackage/HomeActivity;.onCreate code (160 bytes)
D/AndroidRuntime(  349): Shutting down VM
W/dalvikvm(  349): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime(  349): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(  349): java.lang.NoClassDefFoundError: mylibrarypackage.MyClass
E/AndroidRuntime(  349):    at myapplicationpackage.HomeActivity.onCreate(HomeActivity.java:58)
E/AndroidRuntime(  349):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(  349):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
E/AndroidRuntime(  349):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
E/AndroidRuntime(  349):    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime(  349):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
E/AndroidRuntime(  349):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  349):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  349):    at android.app.ActivityThread.main(ActivityThread.java:4310)
E/AndroidRuntime(  349):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  349):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  349):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(  349):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(  349):    at dalvik.system.NativeStart.main(Native Method)

我是否必须将库添加到其他地方的构建路径?我错过了什么吗?

最佳答案

看来我解决了这个问题。

我不知道在阅读如何使用 nandroid 插件时是否遗漏了一个步骤,但是生成的 build-impl.xml 似乎不包含我在创建 APK 时使用 NetBeans 添加的任何库。

这是有罪的 ant 脚本:

<target depends="init,compile,-pre-pre-jar,-pre-jar" name="-dex">
    <exec executable="${dx}" failonerror="true">
        <arg value="--dex"/>
        <arg value="--output=${basedir}/${intermediate.dex}"/>
        <arg value="--positions=lines"/>
        <arg path="${build.classes.dir}"/>
    </exec>
</target>

如果我添加最后一个参数,库就包含在内,我的问题中提到的错误就会消失:

<arg path="${external.libs.dir}"/>

external.libs.dir 指向包含库的 jar 的目录。

感谢 Christopher 让我查看了 Android 命令行工具生成的 build.xml(在使用 nandroid 插件在 NetBeans 中创建 Android 项目时生成的脚本非常不同)。


附录:因为我说的是 NetBeans,另一种方法是覆盖项目 build.xml 中的 -pre-jar 目标,而不是对 build-impl 进行上述更改.xml。这是通过将以下内容添加到 build.xml 来完成的:

<target name="-pre-jar">
  <copy todir="${build.classes.dir}">
    <fileset dir="${external.libs.dir}" />
  </copy>
</target>

这样,库的 jar 与构建的类一起出现,并自动包含在内。

关于android - 如何在 NetBeans 的 Android 项目中使用外部 jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2057804/

相关文章:

Android:如何在 AlertDialog 中获得带有图像的复选框列表

java - 代码执行结果出现乱序

android - 无法在我的项目中包含 AndroidHttpTransport

java - 使用 Gradle 的 JAR 中的 META-INF/服务

java - 将 Netbeans 平台与 JavaFX 2 结合使用?

android - 转换为 Dalvik 格式失败,错误 1

android - 更改系统后退按钮方向

c# - 如何在 MonoGame 中租用纹理?

android - onReceiveAd 问题,无法识别的类

Java Netbeans 覆盖 JPanel 中的 paint() 方法