1

私はいくつかのコードでjniの例を作成しようとしていますが、logcateにエラーが表示されます

07-30 18:34:48.720: W/dalvikvm(3484): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lcom/org/HelloNDK/HelloNDK;.<clinit>
07-30 18:34:48.740: W/dalvikvm(3484): Class init failed in newInstance call (Lcom/org/HelloNDK/HelloNDK;)
07-30 18:34:48.740: D/AndroidRuntime(3484): Shutting down VM
07-30 18:34:48.760: W/dalvikvm(3484): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
07-30 18:34:48.810: E/AndroidRuntime(3484): FATAL EXCEPTION: main
07-30 18:34:48.810: E/AndroidRuntime(3484): java.lang.ExceptionInInitializerError
07-30 18:34:48.810: E/AndroidRuntime(3484):     at java.lang.Class.newInstanceImpl(Native Method)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at java.lang.Class.newInstance(Class.java:1429)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.os.Looper.loop(Looper.java:123)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at android.app.ActivityThread.main(ActivityThread.java:4627)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at java.lang.reflect.Method.invokeNative(Native Method)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at java.lang.reflect.Method.invoke(Method.java:521)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at dalvik.system.NativeStart.main(Native Method)
07-30 18:34:48.810: E/AndroidRuntime(3484): Caused by: java.lang.UnsatisfiedLinkError: Library libndkfoo not found
07-30 18:34:48.810: E/AndroidRuntime(3484):     at java.lang.Runtime.loadLibrary(Runtime.java:461)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at java.lang.System.loadLibrary(System.java:557)
07-30 18:34:48.810: E/AndroidRuntime(3484):     at com.org.HelloNDK.HelloNDK.<clinit>(HelloNDK.java:12)
07-30 18:34:48.810: E/AndroidRuntime(3484):     ... 15 more

コードは次のとおりです。

メイン アクティビティ (java ファイル)

package com.org.HelloNDK;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;

public class HelloNDK extends Activity {
    /** Called when the activity is first created. */

      static {
            System.out.println("Lib 1");
            System.loadLibrary("libndkfoo");
            System.out.println("Lib 2");
          }

      private native String invokeNativeFunction();

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

        try {

             // this is where we call the native code
            String hello = invokeNativeFunction();
            new AlertDialog.Builder(this).setMessage(hello).show();

        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("Error in On Create == >"+e.toString());
        }
    }
}

Android.mk ファイル コード

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)
LOCAL_MODULE    := ndkfoo
LOCAL_SRC_FILES := ndkfoo.c

include $(BUILD_SHARED_LIBRARY)

ndkfoo.c ファイル コード

#include <string.h>
#include <jni.h>
JNIEXPORT jstring JNICALL Java_org_pielot_hellondk_HelloNDK_sayHello(JNIEnv *env, jobject obj) 
{
     return (*env)->NewStringUTF(env, "Hello from native code!");
}

.SOファイルはで作成されます

infoware@infoware-PC /cygdrive/d/SecondWorkspace/HelloNDK
$  /cygdrive/d/android-ndk-r8b/ndk-build
Compile thumb  : ndkfoo <= ndkfoo.c
SharedLibrary  : libndkfoo.so
Install        : libndkfoo.so => libs/armeabi/libndkfoo.so

ストラクチャーのプロジェクト画面

ここに画像の説明を入力

4

1 に答える 1

1
  1. あなたの活動で:名前 private native String invokeNativeFunction();
    を変更しますprivate native String sayHello();
  2. あなたのcファイルで:名前
    JNIEXPORT jstring JNICALL Java_org_pielot_hellondk_HelloNDK_sayHello(JNIEnv *env, jobject obj)
    を変更します
    JNIEXPORT jstring JNICALL Java_com_org_hellondk_HelloNDK_sayHello(JNIEnv *env, jobject obj)
于 2012-07-30T13:07:24.813 に答える