【问题标题】:intentservice native function not found未找到意图服务本机功能
【发布时间】:2013-10-22 08:52:52
【问题描述】:

我有一个在 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)

谢谢

【问题讨论】:

  • 我的愚蠢错误。当我在另一个类中使用 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 的类名跨度>
  • 这意味着将其发布在“答案”框中;这是一个“评论”框。请务必接受您自己的答案。这样一来,浏览问题列表的人就会看到该问题的答案已被接受,而不会来查看它。
  • 感谢您的建议。我是新来的:)

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


【解决方案1】:

我的愚蠢错误。当我在另一个类中使用 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 的类名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多