Ubuntu 에서 Android 를 위 한 Application Frameworks 계층 하드웨어 액세스 서비스 추가
1.Ubuntu Android HAL JNI 작성 방법 JAVA 액세스 하드웨어 서비스 인터페이스 제공글 에서 보 듯 이 하드웨어 추상 층 모듈 에 JNI 방법 호출 층 을 준비 합 니 다.
2.Android 시스템 에서 하드웨어 서 비 스 는 일반적으로 하나의 독립 된 프로 세 스 에서 실행 되 어 각종 응용 프로그램 에 서 비 스 를 제공 합 니 다.따라서 이러한 하드웨어 서 비 스 를 호출 하 는 응용 프로그램 과 이러한 하드웨어 서비스 간 의 통신 은 대 리 를 통 해 이 루어 져 야 한다.이 를 위해,우 리 는 먼저 통신 인 터 페 이 스 를 정의 해 야 한다.frameworks/base/core/java/android/os 디 렉 터 리 에 들 어가 서 IHelloService.aidl 인터페이스 정의 파일 을 추가 합 니 다.
USER-NAME@MACHINE-NAME:~/Android$ cd frameworks/base/core/java/android/os
USER-NAME@MACHINE-NAME:~/Android/frameworks/base/core/java/android/os$ vi IHelloService.aidl
IHelloService.aidl 은 IHelloService 인 터 페 이 스 를 정의 합 니 다.
package android.os;
interface IHelloService {
void setVal(int val);
int getVal();
}
IHelloService 인 터 페 이 스 는 주로 장치 와 하드웨어 레지스터 val 의 값 을 가 져 오 는 기능 을 제공 하 는데 각각 setVal 과 getVal 두 함 수 를 통 해 이 루어 진다.3.frameworks/base 디 렉 터 리 로 돌아 가 Android.mk 파일 을 열 고 LOCAL 을 수정 합 니 다.SRC_FILES 변수의 값,IHelloService.aidl 원본 파일 추가:
## READ ME: ########################################################
##
## When updating this list of aidl files, consider if that aidl is
## part of the SDK API. If it is, also add it to the list below that
## is preprocessed and distributed with the SDK. This list should
## not contain any aidl files for parcelables, but the one below should
## if you intend for 3rd parties to be able to send those objects
## across process boundaries.
##
## READ ME: ########################################################
LOCAL_SRC_FILES += /
....................................................................
core/java/android/os/IVibratorService.aidl /
core/java/android/os/IHelloService.aidl /
core/java/android/service/urlrenderer/IUrlRendererService.aidl /
.....................................................................
4.IHelloService.aidl 인 터 페 이 스 를 컴 파일 합 니 다:USER-NAME@MACHINE-NAME:~/Android$ mmm frameworks/base
이렇게 하면 IHello Service.aidl 에 따라 해당 하 는 IHello Service.Stub 인 터 페 이 스 를 생 성 합 니 다.
5.frameworks/base/services/java/com/android/server 디 렉 터 리 에 들 어가 HelloService.java 파일 을 추가 합 니 다.
package com.android.server;
import android.content.Context;
import android.os.IHelloService;
import android.util.Slog;
public class HelloService extends IHelloService.Stub {
private static final String TAG = "HelloService";
HelloService() {
init_native();
}
public void setVal(int val) {
setVal_native(val);
}
public int getVal() {
return getVal_native();
}
private static native boolean init_native();
private static native void setVal_native(int val);
private static native int getVal_native();
};
HelloService 는 주로 JNI 호출 방법 initnative、setVal_native 와 getVal네 이 티 브(4567915 참조)는 하드웨어 서 비 스 를 제공 합 니 다.6.같은 디 렉 터 리 의 SystemServer.자바 파일 을 수정 하고 ServerThread:run 함수 에 HelloService 를 불 러 오 는 코드 를 추가 합 니 다.
@Override
public void run() {
....................................................................................
try {
Slog.i(TAG, "DiskStats Service");
ServiceManager.addService("diskstats", new DiskStatsService(context));
} catch (Throwable e) {
Slog.e(TAG, "Failure starting DiskStats Service", e);
}
try {
Slog.i(TAG, "Hello Service");
ServiceManager.addService("hello", new HelloService());
} catch (Throwable e) {
Slog.e(TAG, "Failure starting Hello Service", e);
}
......................................................................................
}
7.HelloService 를 컴 파일 하고 system.img 을 다시 포장 합 니 다.USER-NAME@MACHINE-NAME:~/Android$ mmm frameworks/base/services/java
USER-NAME@MACHINE-NAME:~/Android$ make snod
이렇게 해서 다시 포장 한 system.img 시스템 미 러 파일 은 Application Frameworks 층 에 사용자 정의 하드웨어 서비스 HelloService 를 포함 하고 시스템 이 시 작 될 때 HelloService 를 자동 으로 불 러 옵 니 다.이 때 응용 프로그램 은 자바 인 터 페 이 스 를 통 해 Hello 하드웨어 서 비 스 를 방문 할 수 있 습 니 다.다음 글 에서 하드웨어 에 접근 하기 위해 자바 프로그램 을 만 드 는 방법 을 설명 할 것 입 니 다.기대 하 십시오.
이상 은 바로 Android Application Frameworks 층 이 하드웨어 액세스 서비스 실현 방법 을 추가 하고 관련 지식 을 계속 보충 하 는 것 입 니 다.여러분 의 지원 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PowerShell 기반 Ubuntu 시스템 사용 상세 정보본고는 주로 Ubuntu 16.04 LTS에 PowerShell을 설치하고 사용하는 방법을 소개한다.PowerShell Core는 마이크로소프트가 내놓은 크로스 플랫폼(Windows, Linux, macOS) 자동화...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.