2011-11-22 12 views
12

Estoy tratando de crear una aplicación de prueba simple que amplíe básicamente la aplicación de tutorial Hello World de Android invocando algunas funciones simples de un JAR externo. Sin embargo, cuando ejecuto la aplicación, no puede encontrar la clase del JAR. ¿Qué estoy haciendo mal?Android no puede encontrar la clase desde el jar externo

Aquí es toda fuente del 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); 
} 

} 

y aquí está la fuente de "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); 

} 
} 

Cuando ejecuto la aplicación, me sale esto en 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

y luego

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

¿Qué estoy haciendo mal? ¡Gracias!

Por cierto, mi objetivo real es utilizar un JAR real (en lugar de este juguete) en una aplicación de Android. Puede que tenga acceso al código para ese JAR y pueda reconstruirlo, pero es una gran parte del código Java y es probable que encuentre problemas al reconstruirlo, así que estoy tratando de usar el JAR preconstruido.

+0

¿Agregó el Jar a la ruta de compilación para su proyecto? – slayton

+0

Slayton, esto es lo que hice: –

+0

project-> properties-> java build path-> libraries tab-> Add External JARs. ¿Es esto a lo que se refiere, o hay otro paso que debo dar? –

Respuesta

21

No es necesario construir el contenedor externo. Intente eliminarlo de su ruta de compilación y siga estos pasos:

  1. Cree una carpeta en la raíz de su proyecto de Android llamada libs.
  2. Agregue el jar a esa carpeta.
  3. Haga clic con el botón derecho en el contenedor y haga clic para agregarlo a la ruta de compilación.
  4. Limpie su proyecto y vuelva a intentarlo.
+0

¿Por qué el compilador se preocuparía por la capitalización de los nombres de las clases? Es simplemente una convención que los programadores de Java han adoptado para hacer que su código sea más legible – slayton

+0

@slayton Tienes razón. Supongo que la lib externa sigue la convención, en cuyo caso power2 no es la forma correcta de referenciar esa clase. – LuxuryMode

+0

El cambio de estuche no cambió nada. Lo que intento hacer ahora es construir el contenedor externo en Netbeans en lugar de Eclipse. Recientemente noté que el uso de JAR construidos con NB en Eclipse se comporta de forma diferente con los creados por Eclipse. Reportará sobre lo que encuentre. –

1

i. Generar jar para sus clases externas

ii. Copiar a la carpeta Libs de su Proyecto Android

iii. Abra Eclipse-> Haga clic derecho en Jar-> Agregar a compilación.

iv. Limpiar proyecto y ejecutar aplicación.

Cuestiones relacionadas