Android 添加JNI文件到源码中
来源:互联网 发布:上海圣剑网络 徐轶群 编辑:程序博客网 时间:2024/06/06 15:36
1:添加cpp文件到\frameworks\base\core\jni
对应目录下的Android.mk中添加编译目标
LOCAL_SRC_FILES:= \ 标签下
LOCAL_SHARED_LIBRARIES := \ 标签下
对应目录下的AndroidRuntime.cpp文件中注册cpp文件
如extern int register_android_hardware_SerialPort(JNIEnv *env);
REG_JNI(register_android_hardware_SerialPort),
cpp文件中要添加注册函数,不然java的本地调用找不到
namespace android
{
........
static JNINativeMethod method_table[] = {
{"native_open", "(Ljava/io/FileDescriptor;I)V",
(void *)android_hardware_SerialPort_open},
{"native_close", "()V", (void *)android_hardware_SerialPort_close},
{"native_read_array", "([BI)I",
(void *)android_hardware_SerialPort_read_array},
{"native_read_direct", "(Ljava/nio/ByteBuffer;I)I",
(void *)android_hardware_SerialPort_read_direct},
{"native_write_array", "([BI)V",
(void *)android_hardware_SerialPort_write_array},
{"native_write_direct", "(Ljava/nio/ByteBuffer;I)V",
(void *)android_hardware_SerialPort_write_direct},
{"native_send_break", "()V", (void *)android_hardware_SerialPort_send_break},
};
int register_android_hardware_SerialPort(JNIEnv *env)
{
jclass clazz = env->FindClass("android/hardware/SerialPort");
if (clazz == NULL) {
ALOGE("Can't find android/hardware/SerialPort");
return -1;
}
field_context = env->GetFieldID(clazz, "mNativeContext", "I");
if (field_context == NULL) {
ALOGE("Can't find SerialPort.mNativeContext");
return -1;
}
return AndroidRuntime::registerNativeMethods(env, "android/hardware/SerialPort",
method_table, NELEM(method_table));
}
}
2:或者添加cpp文件到\frameworks\base\services\jni
对应目录下的Android.mk中添加编译目标
LOCAL_SRC_FILES:= \ 标签下
LOCAL_SHARED_LIBRARIES := \ 标签下
对应目录下onload.cpp文件中注册cpp文件
此目录下的JNI文件主要是用来注册系统服务时使用的的如上一张讲到的需要调用本地方法时使用。
如:int register_android_server_SerialService(JNIEnv* env);
register_android_server_SerialService(env);
cpp文件中要添加注册函数,不然java的本地调用找不到
namespace android
{
........
static JNINativeMethod method_table[] = {
{ "native_open", "(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;",
(void*)android_server_SerialService_open },
};
int register_android_server_SerialService(JNIEnv *env)
{
jclass clazz = env->FindClass("com/android/server/SerialService");
if (clazz == NULL) {
ALOGE("Can't find com/android/server/SerialService");
return -1;
}
clazz = env->FindClass("android/os/ParcelFileDescriptor");
LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V");
LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL,
"Unable to find constructor for android.os.ParcelFileDescriptor");
return jniRegisterNativeMethods(env, "com/android/server/SerialService",
method_table, NELEM(method_table));
}
}
- Android 添加JNI文件到源码中
- Android 添加JNI文件到源码流程
- android 添加应用到android源码中
- android 添加应用到android源码中
- android 添加应用到android源码中
- android 添加应用到android源码中
- 在android源码中添加库模块&&jni实例二
- 添加Android源码到Eclipse中
- Android Studio Gradle项目中添加JNI so文件
- Android JNI以及打包so文件到apk中
- Android 源码中新增JNI
- [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
- [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
- [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
- [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
- 添加资源到android源码中-修改framework层
- 添加资源到android源码中-修改framework层
- 添加资源到android源码中-修改framework层
- 线性复杂度循环右移数组
- mysql不允许被其它电脑访问解决办法
- 认真写点博客
- Nim游戏博弈(收集完全版)
- 设计模式---->单一职责原则
- Android 添加JNI文件到源码中
- virsh命令调用流程(2)
- 快速幂取模(二分思想)
- Python函数参数传递以及变量作用域
- USB 主机在请求HID 设备的配置描述符时,设备首先返回的描述符为:
- 为 Ubuntu 上的 PHP 安装 APC,提升应用速度
- virsh命令调用流程(3)
- php函数
- 图片拖出边框删除