Android快速入门(三)、添加framework系统调用

简述aidl的用途

  1. aidl(Android interface definition language)用于进程间的通信。

aidl作用就是来弥补这个缺陷,实现方法在不同项目的共享。
增加Frameworks代码

首先我们需设计好暴露给APP端的API接口,这里我们采用aidl的机制实现
frameworks/base/core/java/android/os/IFMService.aidl

package android.os;  

interface IFMService {  
    int getADC();
    int getFreq();
    void setFreq(int freq);
    void searchNextorPreFreq(int enable);
    void setNextorPreFreq(int enable);
    void enableMute(int enable);
    int getIsMute();
    void startAutoSearch();
}  

回到frameworks/base目录,编写编译规则,生成Stub接口文件
frameworks/base/Android.mk

LOCAL_SRC_FILES += \中添加:

core/java/android/os/IFMService.aidl \

需要先编译生成java文件:mmm frameworks/base

frameworks/base/core/java/android/os/IHQFMService.aidl:3 interface IFMService should be declared in a file called android/os/IFMService.aidl.

AIDL规定,文件名必须和interface XXX名字相同,否则会报上面错误。

frameworks/base/services/java/com/android/server/FMService.java
这个文件中,我们把函数调用传递到了JNI

package com.android.server;  
import android.content.Context;  
import android.os.IFMService;  
import android.util.Slog; 

2步:实现AIDL文件生成的JAVA接口Stub


public class FMService extends IFMService.Stub { 
private static final String TAG = "LedService";
    public int getADC(){

        return getADC_native();
    }

    public int getFreq(){
        return getFreq_native();
    }

    public void setFreq(int freq){

        setFreq_native(freq);
        return ;
    }

    public LedService() {
        native_ledOpen();
    }

    private static native int getADC_native();
    private static native int getFreq_native();  
    private static native void setFreq_native(int freq);

最后在Frameworks中我们需要启动我们的FMservice
进入frameworks/base/services/java/com/android/server目录,在SystemServer.java文件中添加

 Slog.i(TAG, "FM Service");

 ServiceManager.addService("fm5767", new FMService());

1.6.编译service(若修改了service的实现方法可模块编译service模块)

    进入frameworks/base/services/java,使用命令mm进行编译,在out目录下的system/frameworks下生成services.jar,使用adb直接cp到板子上重启即可生效

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/81542824