Android 从上到下写一个例子 本地服务(二)

代码 代码 1340 人阅读 | 0 人回复

<
本文继上一篇文章持续写代码https://blog.csdn.net/we1less/article/details/118825911
此时需求一个当地效劳起首将jni文件写好
途径frameworks/base/services/core/jni/com_android_server_GodvService.cpp
  1. #define LOG_TAG "godv"
  2. #include "jni.h"
  3. #include <nativehelper/JNIHelp.h>
  4. #include "android_runtime/AndroidRuntime.h"
  5. #include <utils/misc.h>
  6. #include <utils/Log.h>
  7. #include <hardware/vibrator.h>
  8. #include <inttypes.h>
  9. #include <stdio.h>
  10. namespace android
  11. {
  12. //出用到的形参能够省略
  13. static jint godv_open(JNIEnv*, jobject) {
  14.     ALOGE("godv_open");
  15.     return 0;
  16. }
  17. static jint godv_ioctl(JNIEnv*, jobject, jint which, jint status) {
  18.     ALOGE("godv_ioctl which == %d , status == %d ", which, status);
  19.     return 0;
  20. }
  21. static const JNINativeMethod method_table[] = {
  22.     { "godv_open", "()I", (void*)godv_open },
  23.     { "godv_ioctl", "(II)I", (void*)godv_ioctl }
  24. };
  25. int register_android_server_GodvService(JNIEnv *env)
  26. {
  27.     return jniRegisterNativeMethods(env, "com/android/server/GodvService",
  28.             method_table, NELEM(method_table));
  29. }
  30. };
复造代码

接下去正在frameworks/base/services/core/jni/onload.cpp文件中将当地效劳注册
  1. extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
  2. {
  3.     JNIEnv* env = NULL;
  4.     jint result = -1;
  5.     if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
  6.         ALOGE("GetEnv failed!");
  7.         return result;
  8.     }
  9.     ALOG_ASSERT(env, "Could not retrieve the env!");
  10.     ...
  11.     register_android_server_GodvService(env);
  12.     register_android_hardware_display_DisplayViewport(env);
  13.     return JNI_VERSION_1_4;
  14. }
复造代码

修正mk文件
  1. LOCAL_SRC_FILES += \
  2.     ...
  3.     $(LOCAL_REL_DIR)/com_android_server_GodvService.cpp \
  4.     $(LOCAL_REL_DIR)/onload.cpp
复造代码

编译 make -j16 ANDROID_COMPILE_WITH_JACK=false
编译胜利后运转app获得log证实当地效劳曾经胜利
  1. 09-06 23:33:35.163  3033  3176 D godv    : GodvService::gov_ioctl
  2. 09-06 23:33:35.163  3033  3176 E godv    : godv_ioctl which == 0 , status == 1
复造代码


免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则