2016-02-10 1 views
1

Je développe une application Android qui traite le discours et j'ai un projet de base de discours (dépendance pour le projet Android) prêt sur JAVA alors j'ai compilé le projet JAVA en éclipse dans le compilateur JAVA 7 et exporté ce projet java en tant que jarre exécutable. J'ai mis ce pot dans le dossier libs de mon projet de studio android et en faisant un clic droit sur AS Une bibliothèque, j'ai eu un message de succès. Mais lorsque je tente exécuter le projet Android, il me donne l'erreur en disant:FATAL EXCEPTION: principal java.lang.NoClassDefFoundError: externe library.jar.class Android studio

FATAL EXCEPTION: main Process: in.automator.automator, PID: 4242 
java.lang.NoClassDefFoundError: jar_filename.Storage.class_in_jar_file 

mais cette classe est là dans le fichier jar, la seule chose douteuse est le fichier de classe mentionné ressemble à quelque chose comme ça

import javax.sound.sampled.AudioFileFormat; 
import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioFormat.Encoding; 
import marf.util.InvalidSampleFormatException; 

public class MARFAudioFileFormat extends AudioFileFormat { 
.... 

... 

.... 

} 

Il fait référence à javax.sound.sampled, donc cela pourrait causer le problème.

J'ai essayé de rechercher sur le google pour le problème mais n'ai pas eu la solution qui peut résoudre le problème. J'ai tout essayé. J'utilise JRE 7 dans le studio android et l'exportation projet java dans le compilateur & lui-même.

Comment résoudre cette erreur? Merci d'avance.

Répondre

0

Vous avez raison, le problème réside dans le fait que la bibliothèque dont vous essayez de dépendre, dépend à son tour de la hiérarchie des packages javax. Android ne fournit pas javax, donc ces classes n'existent pas à l'exécution (même si elles existent dans le JDK de votre ordinateur, donc votre compilateur ne se plaint pas - c'est fondamentalement le même que de ne pas avoir installé une DLL sur votre PC a besoin).

Le NoClassDefFoundError est lancé sur la classe qui référence en premier lieu les dépendances de classe non valides, ce qui est probablement source de confusion. Cette classe peut en effet exister réellement dans votre jar, mais elle nécessite des classes qui n'existent pas pour compléter sa définition - donc en effet, votre classe n'est pas entièrement définie. La seule façon de contourner cela est de trouver un moyen de faire ce que vous voulez, sans l'espace de noms javax. J'ai entendu parler de quelques tentatives de port javax.* dans Android, mais ils ne finissent jamais bien - beaucoup de classes javax finissent par se résumer à des appels natifs, qui n'existeront pas non plus sur Android.

+0

Ohh j'avais raison. Mais en fait, je veux écrire du code pour le traitement des fichiers wav dans ce fichier jar externe, puis l'importer dans Android pour le traitement ultérieur d'un autre ensemble de données. Donc j'espérais trouver une solution différente de celle que vous avez fournie. De toute façon merci pour répondre mon pote :) – Prafull