android源碼移植
1. 請教關於android移植的問題
一、概述
移植的工作一般的主要不外乎做以下這些事情:
A、有的現成好的直接選配
這個工作主要是熟悉該源碼的編譯系統,就是源碼自動化編譯是怎麼組織的。Linux環境下不外乎是Makefile及腳本。所以得熟悉這兩個方面的知識。
B、有的不好的代碼修改好後選配
這個工作不僅僅是要熟悉編譯系統,還要熟悉別人的代碼結構。一般牛X的軟體架構也牛X,所以主要是學習牛X的人設計的代碼結構,所謂的框架。框架懂了,再熟悉裡面的細節,就可以改了。
C、添加新代碼並選配
這個工作同樣要熟悉編譯系統及源碼結構。這個時候對框架可能不能僅僅限於知道,而且要深刻理解,按照牛人的思路來設計代碼。
所以Android的移植就可以簡單的說成有以下方面的工作:
A、熟悉android的編譯系統
主要是.mk文件的規則,這個官網及源碼中有文檔說明(development/Ndk/Docs/android-mk.txt),得好好研究清楚。
就源碼中的腳本,譬如:build/envsetup.sh
B、熟悉android的源碼目錄結構
system:根文件系統相關的一些代碼
packages:android的一些APP的源碼
frameworks:framework層代碼,不改動android源碼的話,主要就是app層調用hal層代碼的介面實現的源碼
hardware:hal層代碼
devices和vendor:廠商定製代碼
build:編譯系統的一些mk文件
out:是編譯輸出目錄
主要的一些目錄就是上面了,對於初學的話,差不多就足夠了。當然所有的都熟悉是最好了。
C、三個層次的代碼
要向android添加代碼的話,一般主要熟悉三個層次的代碼就差不多了。
APP<--->framework<--->HAL
APP:應用程序層次,主要是java代碼,通過跨平台的java編寫的代碼來完成需求邏輯對系統提出功能性要求,讓系統去完成相應的動作。
framework:cpp代碼,主要是提供給java調用的介面,這些介面通常是去調用到hal層的代碼。
HAL:登記一組供framework回調的函數,來完成一定的功能。
2. 如何把一個C++的源程序移植到Android上
用NDK編譯成so,並寫jni介面以便給java調用。
如果用NDK編譯?
1、到android開發網下載NDK開發包,裡面有document
2、把opencv用NDK的方法編譯可以通過以下的思路:
(1)第一種方法:看看opencv官方的編譯文檔,是否已經支持NDK的編譯腳本或選項,如果有,直接按官方說明進行
(2)第二種方法:使用交叉編譯的方法,即NDK文檔里介紹的使用make-standalone-toolchain.sh的方法,這種方法很適合使用autoconf(即./configure)的項目
(3)第三種方法:根據NDK文檔所說,自己手工寫Android.mk和Application.mk,適合小型項目。
3. 如何移植android2.1源代碼到自己的手機上
成功將android2.1移植到手機上,需經過以下幾個步驟:
一,准備好android2.1源碼編譯環境以及手機USB調試環境。
二,將手機上硬體驅動程序以及相關的配置文件通過ADB命令保存好。
三,針對不同的手機機型,製作相應的vendor配置文件。
四,編譯源碼。
五,通過手機提供的bootloader刷機或者直接以recovery的方式更新ROM。
在以上五個步驟中,其中最難處理的便是第2個步驟,這個步驟需要熟悉每個手機機型的硬體參數,並且能夠在手機上找到相關的驅動程序以及了解他們如何配置。而CyanogenMod團隊公布的源碼當中,己經將相關的工作做好了,編譯源碼之前僅僅需要執行相應的shell命令,便可順利的下載相應的手機驅動程序以及配置文件。
下面是移植步驟,供參考:
一,首先需要下載CyanogenMod 5.0.8的源碼:
$ mkdir android-cm5
$ cd android-cm5
$ repo init -u git://github.com/CyanogenMod/android.git -b eclair
$ repo sync
二,下載CyanogenMod需要的一些共同文件,如果想最終版本中不需要這些APK,也可以通過配置/vendor/cyanogen/cyanogen.mk文件將這些需要的APK COPY命令注釋掉。
$ cd vendor/cyanogen/
$ ./get-rommanager #下載一個RomManager.apk包,主要是刷ROM用的。我沒用過。
$ ./get-google-files #其它的一些google開發的android apk包,我也沒有用過!
三,下載針對htc legend(g6)的vendor.
$ cd ../../vendor/htc
$ git clone git://github.com/aleho/android_vendor_htc_legend.git #下載針對htc legend(g6)手機的vendor,裡麵包括相關的配置參數,以及從手機上下載驅動程序的SHELL命令。
$ mv android_vendor_htc_legend/ legend
$ cd legend
$ ./extract-files.sh #確保這個命令執行將你的手機連接好電腦並且開了手機USB調試,adb命令可以連接手機。這個過程主要是下載htc legend(g6)驅動程序以及配置文件。
四,針對CyanogenMod 5.0.8源碼打上htc legend(g6)的補丁包,這個補丁包主要是wifi和觸摸屏的,如果不做,觸摸屏將無法觸摸以及wifi功能無法啟動。可參數地址:
http://forum.xda-developers.com/archive/index.php/t-702776.html
五,好了,根據自己的愛好,定製自己的一些vendor參數。然後make otapackage便可編譯recovery方式的htc legend(g6)包。
4. 關於Android ROM移植的問題
移植步驟:下載完ROM以後,用解壓工具解壓到一個目錄,先將odex合並到apk文件中去,這里要用到工具,有工具可以用:xUltimate:http://www.droidforums.net/forum/xeudoxus/47283-release-xultimate.html合並的方法比較簡單,以xUltimate為例,將app裡面的所有文件拷到origi_app裡面,將framework裡面的所有文件拷到origi_frame裡面,再運行程序,再過幾個選項就可以進行轉換了,轉換好會放到另一個文件夾裡面,把原來的文件刪掉,把生成的放回去就可以了。如果轉換過程中失敗了,應該是JAVA的版本低了,升級到最新的JRE試一下。當然也可以不合並,並不影響ROM的移植。替換MT4G專用的文件,一般我們下載的MIUIROM都是DesireHD的,我們下載了以後,要先把MT4G專用的文件替換進去:boot.img和bcm4329.ko分別為內核和無線驅動,一般來說換內核必換的system/lib/moles/bcm4329.ko,這個文件是wifi和藍牙驅動,不同內核的驅動不同,如果不換wifi和藍牙只會提示錯誤這個前面介紹過了。這個可以從我以前的ROM中拿,也可以自己下載CyanogenMod7的小4ROM中提取。也可以到XDA上面下載新的AOSP核心。bin/目錄下的2個文件,awb_camera和lsc_camera這2個是相機相關文件,用DesireHD的就會出現前置倒置的問題,etc/firmware這整個文件夾都可以替換掉(注意,是etc下面的firmware)etc/目錄下A1026_CFG.csv、AdieHWCodec_WA.csv、AdieHWCodec.csv、media_profiles.xml、NOTICE.html.gz音頻解碼和視頻相關配置,替換掉etc/gps.confGPS的配置,可以自己去搜一下,了解如何改後,可以自己動手改一下。lib/hw/目錄下,從我的ROM中提取後替換掉。lib/moles/bcm4329.koWIFI驅動,替換掉。lib/目錄下的.SO文件,從我的ROM中和DesireHD官方ROM中對比文件大小,不一樣的就是可以替換的,可以從我的ROM中拿,也可以去CM7的ROM中拿,注意:千萬要看好了,是在用我ROM和DesireHD官方ROM對比文件大小,不要拿CM7的對比,替換錯了會開機卡在第一屏。usr/目錄下的keylayout和keychars2個文件夾是鍵盤相關文件,可以直接從我的ROM中提取替換。,到此為止,簡單的工作都做完了。下面要開始修改文件了。修改刷機腳本updater-script這個比較簡單,一般只要修改前面幾行,把條件改一下,再加一段歡迎詞,請對照我提供的文件進行修改。修改build.propsystem/build.prop這個文件嘛,一般是留名用的:主要改以下幾個地方:1、ro.proct.locale.language=hdpi(或者有的機型是mdpildpi)ro.proct.locale.region=改成ro.proct.locale.language=zhro.proct.locale.region=CN這樣開機第一次鎖屏的時候就是中文2.ro.build.description=後面改成你想要的,也就是你作品的名字ro.proct.version=這里也可以改成你作品的名字或者版本號,一般我們留為基於製作的官方系統的驅動版本號3、ro.sf.lcd_density=後面一般為240。4、ro.ril.def.agps.mode=2聽說改成0可以加速gps定位省流量請對照我提供的文件進行修改,這樣,我們的移植就算完成了,接下來就是生成ROM了,我們用壓縮工具將ROM打包成zip格式,注意目錄結構,生成的zip根目錄就有MATE-INF和system,別搞錯了。將打包好的zip文件拷到工具包當中,改成update.zip,再雙擊sign.bat進行簽名,簽名後就生成了update_signed.zip了。把簽名後的ROM拷到卡上刷機吧~~這是Mytouch4g的,你按照步驟來,可能會有所幫助