Android 从上到下写一个例子 本地服务
Posted we1less
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 从上到下写一个例子 本地服务相关的知识,希望对你有一定的参考价值。
本文继上一篇文章继续写代码https://blog.csdn.net/we1less/article/details/118825911
此时需要一个本地服务首先将jni文件写好
路径frameworks/base/services/core/jni/com_android_server_GodvService.cpp
#define LOG_TAG "godv"
#include "jni.h"
#include <nativehelper/JNIHelp.h>
#include "android_runtime/AndroidRuntime.h"
#include <utils/misc.h>
#include <utils/Log.h>
#include <hardware/vibrator.h>
#include <inttypes.h>
#include <stdio.h>
namespace android
{
//没用到的形参可以省略
static jint godv_open(JNIEnv*, jobject) {
ALOGE("godv_open");
return 0;
}
static jint godv_ioctl(JNIEnv*, jobject, jint which, jint status) {
ALOGE("godv_ioctl which == %d , status == %d ", which, status);
return 0;
}
static const JNINativeMethod method_table[] = {
{ "godv_open", "()I", (void*)godv_open },
{ "godv_ioctl", "(II)I", (void*)godv_ioctl }
};
int register_android_server_GodvService(JNIEnv *env)
{
return jniRegisterNativeMethods(env, "com/android/server/GodvService",
method_table, NELEM(method_table));
}
};
接下来在frameworks/base/services/core/jni/onload.cpp文件中将本地服务注册
extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
{
JNIEnv* env = NULL;
jint result = -1;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
ALOGE("GetEnv failed!");
return result;
}
ALOG_ASSERT(env, "Could not retrieve the env!");
...
register_android_server_GodvService(env);
register_android_hardware_display_DisplayViewport(env);
return JNI_VERSION_1_4;
}
修改mk文件
LOCAL_SRC_FILES += \\
...
$(LOCAL_REL_DIR)/com_android_server_GodvService.cpp \\
$(LOCAL_REL_DIR)/onload.cpp
编译 make -j16 ANDROID_COMPILE_WITH_JACK=false
编译成功后运行app得到log证明本地服务已经成功
09-06 23:33:35.163 3033 3176 D godv : GodvService::gov_ioctl
09-06 23:33:35.163 3033 3176 E godv : godv_ioctl which == 0 , status == 1
以上是关于Android 从上到下写一个例子 本地服务的主要内容,如果未能解决你的问题,请参考以下文章