本文原文链接:https://xuesong.blog.csdn.net/article/details/80933999?spm=1001.2014.3001.5502
1、JNI 和 HAL
(com_android_server_ledservice.cpp)
注册JNI本地方法
|加载
hal_led.c : open,read,write
3、修改SystemServer.java:加载C库
在其main方法里面:
public static void main(String[] args){ new SystemServer().run(); } run(){ System.loadLibrary("android_servers");//对应onload.cpp文件 }
run方法中:
JNI文件:注册本地方法com_android_server_LedService.cpp供LedService.java使用
有哪些本地方法
static const JNINativeMethod methods[] = { {"native_ledOpen","()I",(void *)ledOpen}, {"native_ledClose","()V",(void *)ledClose}, {"native_ledCtrl","(II)I",(void *)ledCtrl}, }
注册本地方法:
int register_android_server_LedService(JNIEnv *env) { //给LedService 类注册 return //注册本地方法。 jniRegisterNativeMethods(env,"com/android/server/LedService",methods,NELEM(methods)); }
onload.cpp:被调用
extern "C" jint JNI_On_Load() { register_android_server_LedService(env); }
对于复杂的操作可修改HAl,然后将生成的.so文件放到系统中。
startOtherServices:
这就是个类
调用一些NATive方法:
告诉系统是谁:










