找不到intentservice本机函数

时间:2013-10-22 08:52:52

标签: android android-ndk java-native-interface

我有一个在android ndk中编译的简单本机函数。我在IntentActivity中调用函数时很好,但是当我使用IntentService时,它无法调用该函数。这是我的代码:

public class PlayerService extends IntentService {
    public PlayerService() {
        super("myservice");
    }

@Override
    protected void onHandleIntent(Intent workIntent) {
        createEngine();
    }

public static native void createEngine();
static {
        System.loadLibrary("native-audio-jni");
    }
}

我得到的错误;

10-22 09:46:01.709: E/AndroidRuntime(5445): FATAL EXCEPTION: IntentService[myservice]
10-22 09:46:01.709: E/AndroidRuntime(5445): java.lang.UnsatisfiedLinkError: Native method not found: com.xxxxxx.playerdemo.PlayerService.createEngine:()V
10-22 09:46:01.709: E/AndroidRuntime(5445):     at com.ngochoang.playerdemo.PlayerService.createEngine(Native Method)
10-22 09:46:01.709: E/AndroidRuntime(5445):     at com.ngochoang.playerdemo.PlayerService.onHandleIntent(PlayerService.java:21)
10-22 09:46:01.709: E/AndroidRuntime(5445):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
10-22 09:46:01.709: E/AndroidRuntime(5445):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-22 09:46:01.709: E/AndroidRuntime(5445):     at android.os.Looper.loop(Looper.java:137)
10-22 09:46:01.709: E/AndroidRuntime(5445):     at android.os.HandlerThread.run(HandlerThread.java:60)

由于

1 个答案:

答案 0 :(得分:2)

我犯了愚蠢的错误。当我在另一个类中使用ndk函数时,我必须更改C文件中的函数名。

我通过改变C中的函数来修复

void Java_com_ngochoang_playerdemo_OldClassName_createEngine(JNIEnv* env, jobject clazz) 

void Java_com_ngochoang_playerdemo_PlayerService_createEngine(JNIEnv* env, jobject clazz) 

其中OldClassName是Activity类名,而PlayerService是我用于IntentService的类名