【发布时间】:2013-12-03 05:40:51
【问题描述】:
我使用 JNI 编写了一个小型 C 程序,我想从 NFC 系统应用程序内部调用它,特别是 NfcDispatcher.java 类。到目前为止,我已经完成了以下操作:
在 /AOSP/packages/apps/Nfc/ 中创建了一个 /jni 目录,我在其中编写了以下 JNI 代码。 nfc/jni/ dir 有 2 个文件,即 mycustomlib.c 和 Android.mk,分别如下
mycustomlib.c 在 /AOSP/packages/apps/Nfc/jni/mycustomlib.c
#include <string.h>
#include <jni.h>
jstring Java_com_android_nfc_NfcDispatcher_gettagkey( JNIEnv* env, jobject thiz, jstring tagKey )
{
// do something
return tagKey;
}
Android.mk 位于 /AOSP/packages/apps/Nfc/jni/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mycustomlib
LOCAL_SRC_FILES := mycustomlib.c
include $(BUILD_SHARED_LIBRARY)
我从 NfcDispatcher.java 文件中调用本机方法“gettagkey”,如下所示。
NfcDispatcher.java 位于 /AOSP/packages/apps/Nfc/src/com/android/nfc/NfcDispatcher.java
public class NfcDispatcher {
..
..
public static native String gettagkey(String tagKey);
..
static class DispatchInfo {
..
}
public boolean dispatchTag(Tag tag) {
..
..
Log.d(TAG, "NFC Key Tag from C code : " + gettagkey(sb.toString()));
..
}
..
static {
System.loadLibrary("mycustomlib");
}
}
然后我们使用 ndk-build -C path_to_c_code 编译 C 代码 然后我们做了一个“make -j32”来编译NFC系统应用程序中更改的代码 然后我们将新的 system.img 刷入 Nexus 7 设备。操作系统正常启动,但出现以下错误:
W/dalvikvm( 767): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/android/nfc/NfcDispatcher;
E/AndroidRuntime( 767): at com.android.nfc.NfcDispatcher.<clinit>(NfcDispatcher.java:571)
E/AndroidRuntime( 767): at com.android.nfc.NfcService.<init>(NfcService.java:390)
E/AndroidRuntime( 767): at com.android.nfc.NfcApplication.onCreate(NfcApplication.java:43)
我已阅读所有相关问题,但我仍然不确定发生了什么。有没有人有任何线索?谢谢!
【问题讨论】:
标签: android android-ndk java-native-interface android-source