天天看點

在Ubuntu上為Android系統内置Java應用程式測試Application Frameworks層的硬體服務

   我們在android系統增加硬體服務的目的是為了讓應用層的app能夠通過java接口來通路硬體服務。那麼, app如何通過java接口來通路application frameworks層提供的硬體服務呢?在這一篇文章中,我們将在android系統的應用層增加一個内置的應用程式,這個内置的應用程式通過servicemanager接口擷取指定的服務,然後通過這個服務來獲得硬體服務。

        一. 參照在ubuntu上為android系統的application frameworks層增加硬體通路服務一文,在application frameworks層定義好自己的硬體服務helloservice,并提供ihelloservice接口提供通路服務。

       二. 為了友善開發,我們可以在ide環境下使用android sdk來開發android應用程式。開發完成後,再把程式源代碼移植到android源代碼工程目錄中。使用eclipse的android插件adt建立android工程很友善,這裡不述,可以參考網上其它資料。工程名稱為hello,下面主例出主要檔案:

    主程式是src/shy/luo/hello/hello.java:

程式通過servicemanager.getservice("hello")來獲得helloservice,接着通過ihelloservice.stub.asinterface函數轉換為ihelloservice接口。其中,服務名字“hello”是系統啟動時加載helloservice時指定的,而ihelloservice接口定義在android.os.ihelloservice中,具體可以參考在ubuntu上為android系統的application

frameworks層增加硬體通路服務一文。這個程式提供了簡單的讀定自定義硬體有寄存器val的值的功能,通過ihelloservice.getval和ihelloservice.setval兩個接口實作。

界面布局檔案res/layout/main.xml和字元串檔案res/values/strings.xml及程式描述檔案androidmanifest.xml參考下面連結。

http://blog.csdn.net/yzhang8703/article/details/7163409

三. 将hello目錄拷貝至packages/experimental目錄,新增android.mk檔案:

    user-name@machine-name:~/android/packages/experimental$ vi android.mk

android.mk的檔案内容如下:

local_path:= $(call my-dir)

include $(clear_vars)

local_module_tags := optional

local_src_files := $(call all-subdir-java-files)

local_package_name := hello

include $(build_package)

四. 編譯:

user-name@machine-name:~/android$ mmm packages/experimental/hello

編譯成功後,便可以在out/target/product/generic/system/app目錄下看到hello.apk檔案了。

    五. 重新打包系統鏡像檔案system.img:

user-name@machine-name:~/android$ make snod

    重新打包後的system.img檔案就内置了hello.apk檔案了。

六. 運作android模拟器:

user-name@machine-name:~/android$ emulator -kernel kernel/common/arch/arm/boot/zimage &

在Ubuntu上為Android系統内置Java應用程式測試Application Frameworks層的硬體服務

打開hello應用程式:

在Ubuntu上為Android系統内置Java應用程式測試Application Frameworks層的硬體服務

點選read按鈕,可以從helloservice中讀取硬體寄存器val的值;點選clear按鈕,可以清空文本框的值;在文本框中輸入一個數值,再點選write按鈕,便可以将這個值寫入到硬體寄存器val中去,可以再次點選read按鈕來驗證是否正确寫入了值。

至此,我們就完整地學習了在android的linux核心空間新增硬體驅動程式、在android的硬體抽象層新增硬體接口、在android的application frameworks層提供硬體服務以及在android的應用層調用硬體服務的整個過程了,希望能為讀者進入android系統提供入門幫助。重新學習整個過程,請參考android硬體抽象層(hal)概要介紹和學習計劃。