2011-11-22 33 views
12

我正在尝试创建一个简单的测试应用程序,该应用程序通过调用外部JAR的一些简单功能基本上扩展了Android Hello World教程应用程序。但是,当我运行该应用程序时,它无法从JAR中找到该类。我究竟做错了什么?android无法从外部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。

+0

您是否将Jar添加到项目的构建路径中? – slayton

+0

Slayton,这是我所做的: –

+0

project-> properties-> java build path-> libraries tab->添加外部JAR。这是你所指的,还是我需要做的另一个步骤? –

回答

21

有没有必要建立外部的罐子。尝试从您的构建路径中移除,并按照下列步骤操作:

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

为什么编译器会关心类名的大写?它只是一个约定,Java程序员已经采用它来使代码更具可读性 – slayton

+0

@slayton你是对的。我假定外部库遵循惯例,在这种情况下,power2不是引用该类的正确方法。 – LuxuryMode

+0

更衣箱并没有改变任何东西。我现在想要做的是在Netbeans而不是Eclipse中构建外部jar。最近我注意到在Eclipse中使用NB构建的JAR在使用Eclipse构建的JAR时表现出不同的形式。将报告我发现的内容。 –

1

i。为您的外部课程生成Jar

ii。复制到Android项目的Libs文件夹中

iii。打开Eclipse->右键点击Jar-> Add To Build Path。

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