接上面的文章,這篇是爲抽象層添加服務,同樣是羅老師的代碼。
先定義硬件訪問服務接口,如圖所示。
添加配置項。
初始化環境。
source build/envsetup.sh
export PATH=/home/haidragon/Desktop/java-7-openjdk-amd64/bin/:$PATH
lunch
然後編譯服務接口。
mmm ./frameworks/base/
查看framework.jar
實現硬件訪問服務,這裏路徑不太一樣但是我們大概看下就知道話哪裏好。
然而把他編譯進去。
mmm ./frameworks/base/services/core/
但是最終是要打包到services.jar所有要再輸入:
mmm ./frameworks/base/services/
現在實現硬件訪問服務的JNI方法。
修改onload.cpp
修改配置
編譯:(一層層的編譯吧 有android.mk目錄的就不要偷懶)
mmm ./frameworks/base/services/core/jni/
mmm ./frameworks/base/services/core/
mmm ./frameworks/base/services/
mmm ./frameworks/base/
同樣要修改源碼前面加個A
檢查
最後是更新system.img
make snod
刷入手機就行了,但是呢沒法用,你用as開發sdk中是沒有這個服務的,有倆種辦法解決,第一種是自己寫apk在源碼下編譯,這種是直接打包進system.img的。還一種是把編譯的源碼生成sdk,寫項目用這個sdk。命令是make sdk。
這裏服務是沒有啓動的,所以最後還差一步就是把服務new出來,羅老師是用的2版本的系統我這是3版本的系統沒有那個文件,通過搜索還是有點線索。具體寫到哪裏可以自己嘗試。也可以手動啓動的,自己寫個cpp程序的,也可以壓根不寫服務,但是不符合android 編譯規範。其實主要還是沒理解源碼,應該如何添加自己慢慢看源碼吧。這裏主要爲了熟悉下整個android從上到下的過程。
find . -name "*.java" | xargs -n50 grep "ServiceManager.addService"