1.
在frameworks/base/core/java/android/os/目录下新建ILedService.aidl文件,这个aidl文件是让安卓系统自动生成ILedService.java文件,这个java文件给app使用,来调用jni提供的ledCrtl函数,app只需要点灯或者灭灯,它不需要其他操作,所以只需要实现ledCtrl方法:
2.修改frameworks/base/Android.mk,添加" core/java/android/os/ILedService.aidl\",然后使用"mmm frameworks/base/"命令编译,在out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/os/目录下会生成ILedService.java文件。
3.新建frameworks/base/services/core/java/com/android/server/LedService.java文件:
在out/target/common/obj/JAVA_LIBRARIES/services.core_intermediates/下会生成javalib.jar文件。
4.在frameworks/base/services/java/com/android/server/SystemServer.java文件中添加LedService服务:
在out/target/product/msm8909/system/framework/下会生成services.jar文件。
package android.os;
/** {@hide} */
interface ILedService
{
int ledCtrl(int val);
}
2.修改frameworks/base/Android.mk,添加" core/java/android/os/ILedService.aidl\",然后使用"mmm frameworks/base/"命令编译,在out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/os/目录下会生成ILedService.java文件。
3.新建frameworks/base/services/core/java/com/android/server/LedService.java文件:
package com.android.server;
import android.os.ILedService;
public class LedService extends ILedService.Stub {
private static final String TAG = "LedService";
/* call native c function to access hardware */
public int ledCtrl(int val) throws android.os.RemoteException
{
return ctrl_native(val);
}
public LedService() {
init_native();
}
public static native int init_native();
public static native void deinit_native();
public static native int ctrl_native(int val);
}
编译:mmm frameworks/base/services/core/
在out/target/common/obj/JAVA_LIBRARIES/services.core_intermediates/下会生成javalib.jar文件。
4.在frameworks/base/services/java/com/android/server/SystemServer.java文件中添加LedService服务:
Slog.i(TAG, "Led Service");
ServiceManager.addService("led", new LedService());
编译:mmm frameworks/base/services/
在out/target/product/msm8909/system/framework/下会生成services.jar文件。