標籤:android des blog class code java
在過去的2個月裡,基本定製並評估完了項目所需要的基本需求,圍繞著全志A31和Android4.2.2來實現。最近由於需要,在修改他的Camera的架構中,需要應用程式給HAL透傳一個參數來控制底層影像處理演算法的實現,即需要提供一個合理的API供APP的開發使用。
起初想到的,最簡單有效方法就是重新定製SDK,但不斷遇到的問題,使得最終切換了部分的思路,但核心沒有發生變化。
Android系統的架構層次分明,在複雜的架構中往往理解以後會變得十分的簡單,現在看來,過去2個多月的時間基本把Camera架構和SurfaceFlinger這兩者有了基本的深入理解,無論是控制流程還是資料流,基本都可以定位到源碼的位置,也對最低層的HAL進行了演算法的添加,同時最核心的是完成了對A31 Resize模組的合理調度。
方案1:
1.在Camera.java中添加一個新的API函數,供APP開發。
2.進行API的更新:make update-api;
3.對源碼進行SDK編譯,產生新的android.jar。替換sdk,供eclipse下的APP開發
4. 手動安裝編譯後的APK。
問題:android4.2.2源碼製作SDK會有一個天然的Bug,解決方案如下:
cd frameworks/basegit revert 5f9922d7c3bce158e4c7a58929d4075e7c91e32e
但鑒於源碼倉庫不是自己同步所得,故無法進行git操作。目前也不知道這個是否可以徹底解決這個bug的所在。
方案2:
1.在Camera.java中添加一個新的API函數,供APP開發。
2. 進行make update-api的更新。
3.添加帶有新的API到APP,並加入到/package/apps/下,只保留/res,/src, AndroidManifest.xml檔案,添加如下的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 := A31Camera LOCAL_PROGUARD_ENABLED := full include $(BUILD_PACKAGE)
4.修改/build/target/product下面的sdk.mk函數
如下添加一行代碼,使得自己的APP作為系統預設的APP應用:
PRODUCT_PACKAGES := Calculator DeskClock Email2 Exchange2 FusedLocation Gallery Music Mms OpenWnn libWnnEngDic libWnnJpnDic libwnndict Phone PinyinIME Protips SoftKeyboard SystemUI Launcher2 Development DevelopmentSettings DrmProvider Fallback Settings SdkSetup CustomLocale sqlite3 InputDevices LatinIME CertInstaller LiveWallpapersPicker ApiDemos GestureBuilder CubeLiveWallpapers QuickSearchBox WidgetPreview monkeyrunner guavalib jsr305lib jython jsilver librs_jni ConnectivityTest GpsLocationTest CalendarProvider Calendar SmokeTest SmokeTestApp rild LegacyCamera A31Camera
5.make -j8 產生新的system.img。也完成了新的系統APP的定製。
以上兩種方案,前者可以加快app的開發,後者可以完成app直接定製到系統。在本項目中,後者的使用也帶來了一定的便利性。
自己定製系統的好處在於,無處不在的源碼不會讓你的開發以及想法不能繼續下去,當然你也不能違反規定進行胡亂的修改。一路走來,還是能發現閱讀代碼帶來的好處的:能加快代碼的再設計,以及業務流添加位置的定位以及最佳化等。