1

アプリに pocketphinx パッケージを使用しようとしていますが、デモ パッケージの名前を便利な名前に変更する必要があります (例: com.myname.foo)。

私は理解するのに何時間も費やしましたが、それを機能させることができません。

問題は、パッケージ名をそのままにして問題なく動作する場合 (ランダムなクラッシュは別として)、プロジェクトが正常に動作することですが、名前を変更するとエラーが発生することです。

FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: new_Config__SWIG_0

すでに Swig コマンドを変更しようとしましたが、うまくいきませんでした。

何か案は?

マニフェストのパッケージ名の宣言と、通常のアクティビティのパッケージ フォルダーを変更しただけです。

4

3 に答える 3

6

JNI の実装方法に応じて、2 つの可能な方法があるため、c/c++ 側を変更する必要があります。

A. 関数名には完全なクラスパスが含まれています

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

例えば

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

パッケージ com.android.mms.transaction のクラス NativeSms の match メソッド send

B. クラスパスとともに dalvik/javaVM に返される文字列があります。次のようなものを探します。



    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;
    }
    ...

編集 2011-12-07 最初の例を明確化

于 2011-12-07T14:14:24.930 に答える
2

Sooo, I found the problem; I spend 20 ****ing hours just to find out, that I actually forgot to add

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

to the Activity class. I can't believe I didn't see that, but thanks for all the answers! +1 for everyone helping me :]

于 2011-12-08T12:51:43.107 に答える
1

リンク コマンドに問題がある場合は、SWIG 起動プロパティを変更するのを忘れている可能性があります。ファイルは

.externalToolBuilders/SWIG.launch

これらのプロパティには、edu.cmu.sphinx パッケージについて言及する場所がいくつかあります。

何かを変更した場合は、変更をより正確に説明することをお勧めします。ほとんどの場合、小さなことを忘れているだけです。たとえば、変更されたコード全体をアーカイブにパックして、どこかにアップロードできます。

于 2011-12-07T22:15:13.553 に答える