2011-12-27 12 views
11

Incluí un archivo jar en mi proyecto de Android como se explica en How can I use external JARs in an Android project?. Con los dos métodos descritos por MannyNS y Vinayak B. en esta publicación, aparece el error "No se pudo encontrar la clase" test.libraryCalc.Calc ", que es la clase proporcionada por la biblioteca. El código siguiente ilustra el problema:Android, clase no encontrada en el archivo jar importado

Ejemplo clase proporciona a través de biblioteca: Calc.java

package test.libraryCalc; 

public class Calc { 
    public int add(int a, int b){ 
     return a + b; 
    } 
} 

LibraryTestActivity.java

package test.library; 

import test.libraryCalc.Calc; 
import android.app.Activity; 
import android.os.Bundle; 

public class LibraryTestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Calc calc = new Calc(); 
     int c = calc.add(3, 4); 
    } 
} 

I exporta el archivo JAR que contiene Calc.java a LibraryTest \ libs \ calc.jar

enter image description here

y ha añadido una referencia a él mediante el "Añadir JAR ..." botón en la Java Build Path de LibraryTest

enter image description here La biblioteca se muestra en las bibliotecas de referencia en LibraryTest

enter image description here

LibraryTest no tiene problemas de construcción, pero cuando se ejecuta en el emulador se muestra en la siguiente LogCat:

12-27 14:01:33.965: E/dalvikvm(747): Could not find class 'test.libraryCalc.Calc',    referenced from method test.library.LibraryTestActivity.onCreate 
12-27 14:01:33.965: W/dalvikvm(747): VFY: unable to resolve new-instance 13 (Ltest/libraryCalc/Calc;) in Ltest/library/LibraryTestActivity; 
12-27 14:01:33.995: D/dalvikvm(747): VFY: replacing opcode 0x22 at 0x0008 
12-27 14:01:33.995: D/dalvikvm(747): VFY: dead code 0x000a-0013 in Ltest/library/LibraryTestActivity;.onCreate (Landroid/os/Bundle;)V 
12-27 14:01:34.065: D/AndroidRuntime(747): Shutting down VM 
12-27 14:01:34.065: W/dalvikvm(747): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
12-27 14:01:34.075: E/AndroidRuntime(747): FATAL EXCEPTION: main 
12-27 14:01:34.075: E/AndroidRuntime(747): java.lang.NoClassDefFoundError: test.libraryCalc.Calc 
12-27 14:01:34.075: E/AndroidRuntime(747): at  test.library.LibraryTestActivity.onCreate(LibraryTestActivity.java:14) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.os.Looper.loop(Looper.java:123) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-27 14:01:34.075: E/AndroidRuntime(747): at java.lang.reflect.Method.invokeNative(Native Method) 
12-27 14:01:34.075: E/AndroidRuntime(747): at java.lang.reflect.Method.invoke(Method.java:521) 
12-27 14:01:34.075: E/AndroidRuntime(747): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-27 14:01:34.075: E/AndroidRuntime(747): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-27 14:01:34.075: E/AndroidRuntime(747): at dalvik.system.NativeStart.main(Native Method) 
12-27 14:06:34.170: I/Process(747): Sending signal. PID: 747 SIG: 9 

lo que hay que hacer para conseguir este trabajo ? Gracias por todas las sugerencias.

+0

Si cree que las imágenes son útiles y aún no tiene permiso, siéntase libre de cargarlas a un mediador de imágenes externo simple y agregar los enlaces en su lugar. Por lo general, un usuario con permisos de edición e imagen se detendrá e insertará si cree que son apropiados. Editar: Ok, vota por más de 10. Ahora puede publicarlos por su cuenta. :) –

+0

También asegúrese de que el archivo jar que está agregando haya sido compilado con Java 6 o anterior. Android no es compatible con Java 7 a partir de esta publicación (julio de 2012) –

Respuesta

9

Creo que el problema es que intentas agregar el jar que contiene el código de Android. No puedes hacer esto. Para incluir el código de Android debes crear una biblioteca de Android. Simplemente cree un proyecto de Android y en la sección de Android de propiedades del proyecto establezca que este es un proyecto de biblioteca. Después de eso, podrá agregar esta biblioteca a sus proyectos. Para obtener más información sobre las bibliotecas de Android, puede leer here.

Actualización: He intentado su código ahora. Funciona en mi caso. La única diferencia que he hecho es durante la exportación de Jar. He marcado Exportar archivos y recursos de origen Java. Espero que esto te ayudará. ¡Intentalo!

+0

Gracias, Yury por su respuesta. ¿Por qué crees que hay un código de Android en el contenedor? Creé el proyecto usando el asistente "Proyecto Java" en Eclipse. – Lorenz

+1

Porque LibraryTestActivity extiende la actividad) – Yury

+0

OK, veo dónde creé cierta confusión. LibraryTest es la aplicación principal que usa la clase Calc de la biblioteca LibraryCalc. – Lorenz

Cuestiones relacionadas