0

C で簡単な Android ndk アプリを実行しようとしていますが、stringFromJNI() 関数で UnsatisfiedLink エラーが発生します。

どんな助けでも大歓迎です。私は C にかなり堪能ですが、私の Java は少し錆びています。私はネーミングに関してウェブから多くのヒントを試してきましたが、今のところうまくいきません. ここに私のファイルがあります:

こんにちは-jni.c:

#include <string.h>
#include <jni.h>


jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

これを ndk-build でコンパイルすると、すべてうまくいきます。プロジェクト ディレクトリにある libnative.so が提供されます。残りはEclipseを使用します。

NdkFooActivity.java :

package com.narola.Testndk;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class NdkFooActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ndk_foo);

        Log.i("comes at point","hay...");
        Log.d("value is : ",""+stringFromJNI());
    }

    public native String  stringFromJNI();
    public native String  unimplementedStringFromJNI();

    static {
        System.loadLibrary("hello-jni");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_ndk_foo, menu);
        return true;
    }
}

提案をありがとうございます。数時間検索してきました。

4

1 に答える 1

3

問題はhello-jni.cファイルにあります。cファイルにメソッドシグネチャがありJava_com_example_hellojni_HelloJni_stringFromJNI、アクティビティにパッケージ名がありcom.narola.Testndkます。

メソッドシグネチャの形式はJava_packagename_activityname_methodname(パッケージ名(。)ドット内はアンダースコアに置き換えられます)のようになります。あなたの場合は次のようにしてみてくださいJava_com_narola_Testndk_NdkFooActivity_stringFromJNI

于 2012-09-19T06:04:09.477 に答える