2010年12月27日 星期一

[Android] Building Gingerbread for Nexus One

抓到Gingerbread之後本來要build一份給Nexus one的, 後來Build break後就懶得管它, 昨天稍微研究一下解法, 果然跟我想的差不多

Builde break的點在於libcameraservice, 主要是某H公司的camera driver並沒open source, 要build必須先從Nexus One取出binary來build, 但偏偏Gingerbread的libcameraservice跟camera driver的interface有變, 像是HAL_getNumberOfCameras, HAL_getCameraInfo在舊版的driver並不存在

解決的方法有兩種:

  1. 用dummy driver
  2. 加個wrapper給它

目前實驗出來的結果很...殘念..還是沒能讓它的camera可以正常使用... orz

第一個方法比較簡單, 只要改makefile: frameworks/base/services/camera/libcameraservice/Android.mk

把USE_CAMERA_STUB:=true變成always的true (就是把一些判斷都mark掉就好)

這樣build出來的就會是用camera stub

第二個方法可以參考這邊

這方法只是加個wrapper把需要的幾個function加上去, 並包裝舊的call

一樣要改frameworks/base/services/camera/libcameraservice/Android.mk, 只是多個目錄放wrapper

Cyanogenmod也是用同一招解決的, 不同的是, 它並沒多生出一個lib來放這warpper, 它是直接改在CameraService.cpp

其實是同一個方法, 由於它多生一個define : BOARD_USE_FROYO_LIBCAMERA來enable/disable這段code(畢竟Cyanogenmod不是只有for N1), 所以要在 device/htc/passion-common/BoardConfigCommon.mk 裡面加上 BOARD_USE_FROYO_LIBCAMERA := true 來把它打開

基本上, 兩種方法N1的Camera都等於廢了, 所以用哪一種都一樣