2013-10-12 4 views
0

прежде всего извините за мой плохой английский. Я просто буду читать в своем родном приложении. Я сделал этот урок: mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step /.Android NDK unsatisfiedlinkerror

Eclipse не приносит код ошибки или что-то еще, но когда я запускаю приложение на телефоне, то получаю сообщение об ошибке «приложение неожиданно ушло».

В журнале я получаю следующее сообщение об ошибке:

10-12 15:14:34.400: D/mytag(1435): vor LiberyLoad 
10-12 15:14:34.400: D/dalvikvm(1435): Trying to load lib /data/data/com.example.nativeappc/lib/libndkfoo.so 0x4051d5e0 
10-12 15:14:34.405: D/dalvikvm(1435): Added shared lib /data/data/com.example.nativeappc/lib/libndkfoo.so 0x4051d5e0 
10-12 15:14:34.405: D/dalvikvm(1435): No JNI_OnLoad found in /data/data/com.example.nativeappc/lib/libndkfoo.so 0x4051d5e0, skipping init 
10-12 15:14:34.405: D/mytag(1435): nach LiberyLoad 
10-12 15:14:34.485: D/dalvikvm(1435): GC_EXTERNAL_ALLOC freed 45K, 50% free 2709K/5379K, external 0K/0K, paused 67ms 
10-12 15:14:34.505: W/dalvikvm(1435): No implementation found for native Lcom/example/nativeappc/MainActivity;.invokeNativeFunction()Ljava/lang/String; 
10-12 15:14:34.505: D/AndroidRuntime(1435): Shutting down VM 
10-12 15:14:34.505: W/dalvikvm(1435): threadid=1: thread exiting with uncaught exception (group=0x4001e578) 
10-12 15:14:34.505: E/AndroidRuntime(1435): FATAL EXCEPTION: main 
10-12 15:14:34.505: E/AndroidRuntime(1435): java.lang.UnsatisfiedLinkError: invokeNativeFunction 
10-12 15:14:34.505: E/AndroidRuntime(1435): at com.example.nativeappc.MainActivity.invokeNativeFunction(Native Method) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at com.example.nativeappc.MainActivity.onCreate(MainActivity.java:35) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.os.Looper.loop(Looper.java:130) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at android.app.ActivityThread.main(ActivityThread.java:3691) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at java.lang.reflect.Method.invokeNative(Native Method) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at java.lang.reflect.Method.invoke(Method.java:507) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
10-12 15:14:34.505: E/AndroidRuntime(1435): at dalvik.system.NativeStart.main(Native Method) 

Мои файлы кода выглядеть следующим образом:

MainActivity:

package com.example.nativeappc; 

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

public class MainActivity extends Activity 
{ 
    static 
    { 
     Log.d("mytag", "vor LiberyLoad"); 
     System.loadLibrary("ndkfoo"); 
     Log.d("mytag", "nach LiberyLoad"); 
    } 

    private native String invokeNativeFunction(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // this is where we call the native code 
     String hello = invokeNativeFunction(); 
     Log.d("mytag", "vor ALERT"); 
     new AlertDialog.Builder(this).setMessage(hello).show(); 
     Log.d("mytag", "nach ALERT"); 
    } 
} 

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 com_example_nativeapp_c_mainactivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) 
{ 
    return (*env)->NewStringUTF(env, "Hello from native code!"); 
} 

Файл .so также генерируется. Я уже googled последние два дня, но не пришел к решению. Надеюсь, вы можете мне помочь.

ответ

3
com_example_nativeapp_c_mainactivity_invokeNativeFunction 

должен быть

com_example_nativeappc_MainActivity_invokeNativeFunction 

В качестве альтернативы, используйте явную регистрацию.

И если вы еще этого не сделали, обязательно прочтите страницу JNI Tips.

Смежные вопросы