NEXUS 5爲驅動硬件抽象層添加服務

接上面的文章,這篇是爲抽象層添加服務,同樣是羅老師的代碼。
先定義硬件訪問服務接口,如圖所示。
NEXUS 5爲驅動硬件抽象層添加服務
添加配置項。
NEXUS 5爲驅動硬件抽象層添加服務
NEXUS 5爲驅動硬件抽象層添加服務

初始化環境。

source build/envsetup.sh
export PATH=/home/haidragon/Desktop/java-7-openjdk-amd64/bin/:$PATH
lunch 

然後編譯服務接口。

mmm ./frameworks/base/

NEXUS 5爲驅動硬件抽象層添加服務
NEXUS 5爲驅動硬件抽象層添加服務
查看framework.jar
NEXUS 5爲驅動硬件抽象層添加服務
實現硬件訪問服務,這裏路徑不太一樣但是我們大概看下就知道話哪裏好。
NEXUS 5爲驅動硬件抽象層添加服務
然而把他編譯進去。

mmm ./frameworks/base/services/core/

NEXUS 5爲驅動硬件抽象層添加服務
NEXUS 5爲驅動硬件抽象層添加服務
NEXUS 5爲驅動硬件抽象層添加服務
但是最終是要打包到services.jar所有要再輸入:

mmm ./frameworks/base/services/

NEXUS 5爲驅動硬件抽象層添加服務
NEXUS 5爲驅動硬件抽象層添加服務
現在實現硬件訪問服務的JNI方法。
NEXUS 5爲驅動硬件抽象層添加服務

修改onload.cpp
NEXUS 5爲驅動硬件抽象層添加服務
修改配置
NEXUS 5爲驅動硬件抽象層添加服務
編譯:(一層層的編譯吧 有android.mk目錄的就不要偷懶)

mmm ./frameworks/base/services/core/jni/
mmm ./frameworks/base/services/core/
mmm ./frameworks/base/services/
mmm ./frameworks/base/

同樣要修改源碼前面加個A
NEXUS 5爲驅動硬件抽象層添加服務
NEXUS 5爲驅動硬件抽象層添加服務
檢查
NEXUS 5爲驅動硬件抽象層添加服務
最後是更新system.img

make snod

NEXUS 5爲驅動硬件抽象層添加服務
刷入手機就行了,但是呢沒法用,你用as開發sdk中是沒有這個服務的,有倆種辦法解決,第一種是自己寫apk在源碼下編譯,這種是直接打包進system.img的。還一種是把編譯的源碼生成sdk,寫項目用這個sdk。命令是make sdk。
這裏服務是沒有啓動的,所以最後還差一步就是把服務new出來,羅老師是用的2版本的系統我這是3版本的系統沒有那個文件,通過搜索還是有點線索。具體寫到哪裏可以自己嘗試。也可以手動啓動的,自己寫個cpp程序的,也可以壓根不寫服務,但是不符合android 編譯規範。其實主要還是沒理解源碼,應該如何添加自己慢慢看源碼吧。這裏主要爲了熟悉下整個android從上到下的過程。

find . -name "*.java" | xargs -n50 grep "ServiceManager.addService"

NEXUS 5爲驅動硬件抽象層添加服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章