【问题标题】:android can't find class from external jarandroid无法从外部jar中找到类
【发布时间】:2012-01-04 02:06:49
【问题描述】:

我正在尝试创建一个简单的测试应用程序,它通过从外部 JAR 调用一些简单的功能来扩展 Android Hello World 教程应用程序。但是,当我运行该应用程序时,它无法从 JAR 中找到该类。我做错了什么?

这是 JAR 的完整源代码:

package com.mytests.pow;

public class power2 {

private double d;   

public power2()
{
    d = 0.0;
}   

public String stp2(double dd) 
{
    d = dd*dd;
    return String.format("%e", d);
}

}

这里是“Hello World ++”源代码:

package com.myLuceneTests.namespace;

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

import com.mytests.pow.*;

public class AndroidSimpleSIH_EclipseActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    power2 pp = new power2();
    String iout = pp.stp2(12.0);

    super.onCreate(savedInstanceState);
    TextView tv = new TextView(this);
    tv.setText(iout);
    setContentView(tv);

}
}

当我运行应用程序时,我会在 logcat 中得到这个:

11-22 12:24:52.697  2963  2963 E dalvikvm: Could not find class 'com.mytests.pow.power2', referenced from method com.myLuceneTests.namespace

.AndroidSimpleSIH_EclipseActivity.onCreate

然后

11-22 12:24:52.713  2963  2963 E AndroidRuntime: java.lang.NoClassDefFoundError: com.mytests.pow.power2

我做错了什么?谢谢!

顺便说一句,我的实际目标是在 Android 应用中使用真正的 JAR(而不是这个玩具)。我可能可以访问该 JAR 的代码并且可能能够重新构建它,但它是一大段 Java 代码,在重新构建它时我可能会遇到问题,因此我尝试使用预构建的 JAR。

【问题讨论】:

  • 您是否将 Jar 添加到项目的构建路径中?
  • project->properties->java build path->libraries tab->Add External JARs。这是您指的,还是我必须采取的其他步骤?

标签: android jar external


【解决方案1】:

无需构建外部 jar。尝试从构建路径中删除它并按照以下步骤操作:

  1. 在您的 Android 项目的根目录中创建一个名为 libs 的文件夹。
  2. 将 jar 添加到该文件夹​​。
  3. 右键单击 jar 并单击以添加到构建路径。
  4. 清理您的项目并重试。

【讨论】:

  • 为什么编译器会关心类名的大小写?它只是 Java 程序员为了使他们的代码更具可读性而采用的一种约定
  • @slayton 你是对的。我假设外部库遵循约定,在这种情况下 power2 不是引用该类的正确方法。
  • 改变大小写并没有改变任何东西。我现在要做的是在 Netbeans 而不是 Eclipse 中构建外部 jar。最近我注意到在 Eclipse 中使用 NB 构建的 JAR 的行为与使用 Eclipse 构建的 JAR 不同。将报告我的发现。
  • +1 因为答案嵌入在这里。您必须在项目的 libs/ 目录中包含要打包的任何 JAR,以便将它们捆绑到 APK 中。将它们添加到构建路径中只会让 Eclipse 通过编译步骤。
  • 更新:建议的解决方案不起作用。起作用的是在 NetBeans 中重建 JAR。具体来说,我在NB中创建了一个与原Power2内容相同的类项目Power2NB。然后,我构建了它的 JAR 并将其作为“外部 JAR”添加到 Eclipse 中的 Android 项目中,就像我最初为 Power2 添加 Eclipse 构建的 JAR 一样。该应用程序运行良好。这意味着 NB 生成的 JAR 的结构在某些方面“更好”。我还不知道这到底是什么意思。我会调查它,但与此同时......有什么想法吗?谢谢
【解决方案2】:

我。为您的外部类生成 Jar

二。复制到你的 Android 项目的 Libs 文件夹

三。打开Eclipse->右键单击Jar->添加到构建路径。

四。清理项目并运行应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-27
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2017-09-30
    • 2016-07-21
    • 2011-08-26
    相关资源
    最近更新 更多