Question

J'essaie d'utiliser le package PocketSphinx pour mon application et j'ai besoin de renommer le démo Nom à quelque chose d'utile (par exemple com.myname.foo)

J'ai passé des heures à comprendre, mais je ne peux tout simplement pas le faire fonctionner.

Le problème est que le projet s'exécute bien si je laisse le nom du package et fonctionne sans aucun problème (en dehors des accidents aléatoires), mais quand je le renomment, j'obtiens l'erreur

FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: new_Config__SWIG_0

J'ai déjà essayé de modifier la commande SWIG, mais cela n'a pas fonctionné non plus.

Des idées?

Je n'ai changé que la déclaration du nom du package du manifeste et le dossier du package de l'activité normale.

Était-ce utile?

La solution 2

Sooo, j'ai trouvé le problème; Je passe 20 heures.

static {
    System.loadLibrary("pocketsphinx_jni");
}

à la classe d'activité. Je ne peux pas croire que je n'ai pas vu cela, mais merci pour toutes les réponses! +1 pour tout le monde qui m'aide:

Autres conseils

Vous devez changer du côté C / C ++, il existe deux façons possibles en fonction de la façon dont votre JNI est implémenté.

A. Le nom de la fonction contient le chemin de classe complet

    JNIEXPORT jlong JNICALL Java_"package with underscore instead of .""classer""method"(JNIEnv *env, jclass class,...

par exemple

    JNIEXPORT jlong JNICALL Java_com_android_mms_transaction_NativeSms_send(JNIEnv *env, jclass class,...

MOTH MOTHE SOUTER EN CLASSE Nativesms dans Package Com.Android.mms.transaction

B. Il y a une chaîne fournie à Dalvik / Javavm avec le ClassPath. Recherchez un peu comme ceci:



    static int registerMethods(JNIEnv* env) {
    static const char* const kClassName =
        "com/example/android/platform_library/PlatformLibrary";
    jclass clazz;

    /* look up the class */
    clazz = env->FindClass(kClassName);
    if (clazz == NULL) {
        LOGE("Can't find class %s\n", kClassName);
        return -1;
    }

    /* register all the methods */
    if (env->RegisterNatives(clazz, gMethods,
            sizeof(gMethods) / sizeof(gMethods[0])) != JNI_OK)
    {
        LOGE("Failed registering methods for %s\n", kClassName);
        return -1;
    }
    ...

Edit 2011-12-07 clarifié le premier exemple

Si vous avez un problème de commande de lien, il est très probable que vous ayez oublié de modifier les propriétés de lancement de SOB. Le fichier est

.ExternalToolBuilders / swig.launch

Ces propriétés ont plusieurs endroits pour mentionner le package edu.cmu.sphinx.

Si vous avez changé quelque chose, il est recommandé de décrire les changements plus précisément. Très probablement, vous avez juste oublié quelque chose. Par exemple, vous pouvez emballer le code modifié entier en archive et le télécharger quelque part.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top