欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Ubuntu中為Android實現(xiàn)Application Frameworks層增加硬件訪問服務(wù)

 更新時間:2016年08月04日 15:48:55   作者:羅升陽  
本文主要介紹Android實現(xiàn) Application Frameworks層增加硬件訪問服務(wù),這里對實現(xiàn)增加硬件訪問服務(wù)的功能做出了詳細的工作流程,并提供示例代碼,有需要的小伙伴參考下

       在數(shù)字科技日新月異的今天,軟件和硬件的完美結(jié)合,造就了智能移動設(shè)備的流行。今天大家對iOS和Android系統(tǒng)的趨之若鶩,一定程度上是由于這兩個系統(tǒng)上有著豐富多彩的各種應(yīng)用軟件。因此,軟件和硬件的關(guān)系,在一定程度上可以說,硬件是為軟件服務(wù)的。硬件工程師研發(fā)出一款硬件設(shè)備,自然少了軟件工程師為其編寫驅(qū)動程序;而驅(qū)動程序的最終目的,是為了使得最上層的應(yīng)用程序能夠使用這些硬件提供的服務(wù)來為用戶提供軟件功能。對Android系統(tǒng)上的應(yīng)用軟件來說,就是要在系統(tǒng)的Application Frameworks層為其提供硬件服務(wù)。在前面的幾篇文章中,我們著重介紹了Linux內(nèi)核層、硬件抽象層和運行時庫層提供的自定義硬件服務(wù)接口,這些接口都是通過C或者C++語言來實現(xiàn)的。在這一篇文章中,我們將介紹如何在Android系統(tǒng)的Application Frameworks層提供Java接口的硬件服務(wù)。

  一. 參照在Ubuntu Android HAL編寫JNI方法提供JAVA訪問硬件服務(wù)接口一文所示,為硬件抽象層模塊準備好JNI方法調(diào)用層。

  二. 在Android系統(tǒng)中,硬件服務(wù)一般是運行在一個獨立的進程中為各種應(yīng)用程序提供服務(wù)。因此,調(diào)用這些硬件服務(wù)的應(yīng)用程序與這些硬件服務(wù)之間的通信需要通過代理來進行。為此,我們要先定義好通信接口。進入到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接口主要提供了設(shè)備和獲取硬件寄存器val的值的功能,分別通過setVal和getVal兩個函數(shù)來實現(xiàn)。

三.返回到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 /

 .....................................................................

  四. 編譯IHelloService.aidl接口:

    USER-NAME@MACHINE-NAME:~/Android$ mmm frameworks/base

   這樣,就會根據(jù)IHelloService.aidl生成相應(yīng)的IHelloService.Stub接口。

   五.進入到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主要是通過調(diào)用JNI方法init_native、setVal_native和getVal_native(見在Ubuntu Android HAL編寫JNI方法提供JAVA訪問硬件服務(wù)接口一文)來提供硬件服務(wù)。

     六. 修改同目錄的SystemServer.java文件,在ServerThread::run函數(shù)中增加加載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);

 }

 ......................................................................................

 } 

   七. 編譯HelloService和重新打包system.img:

     USER-NAME@MACHINE-NAME:~/Android$ mmm frameworks/base/services/java

     USER-NAME@MACHINE-NAME:~/Android$ make snod

     這樣,重新打包后的system.img系統(tǒng)鏡像文件就在Application Frameworks層中包含了我們自定義的硬件服務(wù)HelloService了,并且會在系統(tǒng)啟動的時候,自動加載HelloService。這時,應(yīng)用程序就可以通過Java接口來訪問Hello硬件服務(wù)了。我們將在下一篇文章中描述如何編寫一個Java應(yīng)用程序來調(diào)用這個HelloService接口來訪問硬件,敬請期待。

 以上就是Android Application Frameworks層增加硬件訪問服務(wù)實現(xiàn)方法,后續(xù)繼續(xù)補充相關(guān)知識,謝謝大家的支持!

相關(guān)文章

  • Android Studio卡很久(loading)的問題解決辦法

    Android Studio卡很久(loading)的問題解決辦法

    這篇文章主要介紹了Android Studio卡很久(loading很久)的問題的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android 混合動畫詳解及實現(xiàn)代碼

    Android 混合動畫詳解及實現(xiàn)代碼

    這篇文章主要介紹了Android 混合動畫詳解及實現(xiàn)代碼的相關(guān)資料,簡單的一種動畫(如旋轉(zhuǎn)、縮放、漸變、位移等)有時候并不能滿足我們項目的要求,這時候就需要運用到混合動畫,需要的朋友可以參考下
    2016-11-11
  • Android編程設(shè)置提醒事件的方法

    Android編程設(shè)置提醒事件的方法

    這篇文章主要介紹了Android編程設(shè)置提醒事件的方法,涉及Android操作service及定時器的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • Android獲取手機聯(lián)系人的方法

    Android獲取手機聯(lián)系人的方法

    這篇文章主要介紹了Android 獲取系統(tǒng)聯(lián)系人信息的實例的相關(guān)資料,希望通過本文大家能實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • Android基于CountDownTimer實現(xiàn)倒計時功能

    Android基于CountDownTimer實現(xiàn)倒計時功能

    這篇文章主要介紹了Android基于CountDownTimer實現(xiàn)倒計時功能,簡單分析了基于CountDownTimer類實現(xiàn)倒計時功能的技巧,需要的朋友可以參考下
    2015-12-12
  • 關(guān)于Gradle下載失敗問題的快速解決方法

    關(guān)于Gradle下載失敗問題的快速解決方法

    這篇文章主要給大家分享了關(guān)于Gradle下載失敗問題的快速解決方法,文中介紹了兩種解決方法,分別是使用已存在的gradle版本和手動下載gradle,文中介紹的非常詳細,需要的朋友們下面來一起看看吧。
    2017-05-05
  • android Retrofit2網(wǎng)絡(luò)請求封裝介紹

    android Retrofit2網(wǎng)絡(luò)請求封裝介紹

    大家好,本篇文章主要講的是android Retrofit2網(wǎng)絡(luò)請求封裝介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android TV listview及焦點處理

    Android TV listview及焦點處理

    這篇文章主要介紹了Android TV listview及焦點處理的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Android自定義標尺滑動選擇值效果

    Android自定義標尺滑動選擇值效果

    這篇文章主要為大家詳細介紹了Android自定義標尺滑動選擇值效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Android開發(fā)之簡單文件管理器實現(xiàn)方法

    Android開發(fā)之簡單文件管理器實現(xiàn)方法

    這篇文章主要介紹了Android開發(fā)之簡單文件管理器實現(xiàn)方法,簡單實現(xiàn)了Android的文件目錄查看,文件重命名,打開,刪除等功能,需要的朋友可以參考下
    2016-01-01

最新評論