Android 中Goolgle 相關服務的移植

來源:互聯網
上載者:User

 

Google相關服務的移植1. 為什麼需要移植?

首先,我編譯了Android2.1的源碼,編譯之後產生out/target/product/generic/。這個目錄下面放著在目標系統上運行Android2.1所需要的最基本的運行環境:包括ramdisk.img,system.img,userdata.img(當然,還需要prebuilt/android-arm/kerne下面的kernel-qemu)。在設定環境變數之後,通過啟動emulator,就可以看到最基本的Android2.1的系統了。

但是,最基本的Android系統中不包括Google提供的特色服務(包括電子市場,地圖,語音搜尋,資訊和天氣,Gmail,GoogleTalk,YouTube),所以就考慮要在目標系統上安裝相應的特色服務。

我就通過adb install,試圖安裝相應的服務程式(.apk檔案),但是發現安裝失敗。列印資訊後,發現原來缺少相應的庫和許可權聲明。Android2.1源碼並不包含這些庫檔案和許可權聲明。後來,在網站上找到了Google定製手機的相應韌體Googlebits

(包含 app etc framework lib幾個檔案夾)

這其中就包含了Google服務程式的.apk檔案,.jar庫,.so庫,.xml許可權聲明。

    我就通過adb remount擷取system的讀寫權限,然後adb push把這些檔案直接push到emulator的/system中去,重啟avd。這時,我發現剛剛push到/system中的檔案都沒了。貌似有個開機檔案在系統啟動時,對/system目錄進行了還原。總之,我並不能擷取system的root許可權,沒法進行有效讀寫。

    然後,我就想把這些服務的.apk,.jar,.so,.xml直接編譯到system.img中去,目標系統就可以直接載入這些安裝檔案和庫檔案。要編譯到system.img中去,就需要對源碼進行相應的修改,即將Google的特色服務移植到Android2.1系統中去。

2. 移植的過程

2.1 generic_with_google

在編譯的過程中,預設選擇編譯/build/target/product下的generic,所以會產生out/target/product/generic目錄。另外,在/build/target/product目錄下還有一個generic_with_google.mk:

# This is a generic product that isn't specialized for a specific device.

# It includes the base Android platform including some Google-specific features.

# If you do not want to include Google specific features, you should derive 

# from generic.mk

通過這個mk檔案應該可以將google特色服務所需要的安裝檔案和庫檔案編譯到system.img中。所以,我嘗試著修改了generic_with_google.mk。但是,修過過後在編譯的過程中遇到了很多的問題,例如:系統預設的generic.mk還是會編譯,並且會與generic_with_google衝突,產生多個目標匹配的問題。貌似這種方法還有待研究。接著我嘗試著另一種方法。

2.2vendor下的代碼定製

這個我使用了實驗室師兄和猛猛的在m8上移植Android所定製的vendor/m8的編譯規則。主要包括四個mk檔案:AndroidBoard.mk,AndroidProducts.mk,BoardConfig.mk,fkh.mk。主要的改動:

將GoogleBits的安裝檔案,庫和許可權聲明檔案放在vendor/emulator/google目錄下;

在AndroidBoard.mk中添加這些檔案的操作:(以Google Talk為例)

(1) 許可權聲明

$(LOCAL_PATH)/google/etc/permissions/com.google.android.gtalkservice.xml:system/etc/permissions/com.google.android.gtalkservice.xml /

(2) 安裝檔案

(3) .jar庫檔案

$(LOCAL_PATH)/google/app/gtalkservice.apk:system/app/gtalkservice.apk /

(4) .so庫檔案

$(LOCAL_PATH)/google/framework/com.google.android.maps.jar:system/framework/com.google.android.maps.jar /

這樣在最後產生的目錄下產生system檔案夾並打包到system.img中去;

為了查看效果,我把編譯產生的system.img複製到windows下的android-sdk/platform中去(google的這些特色服務都需要網路的支援,而伺服器上的模擬器無法上網),啟動模擬器,使用adb shell,發現這些庫和安裝檔案已經載入到system目錄下了,移植成功。

2.3自己製作system.img

另一種方法是比較笨的方法,但很實用。自己嘗試著製作system.img。考慮到system.img是yaffs2檔案系統,所以可以自己製作。主要使用了sdk中android-7/platform/image/system.img,一個解壓工具(unyaffs)和一個打包工具(out/host/linux-x86/bin/mkyaffs2image)。解壓system.img後將googlebits下相應的庫,許可權聲明和安裝檔案放到對應的目錄下,然後打包成system.img。然後將製作後的system.img複製到sdk中,啟動模擬器,可以使用(這種方法不僅添加了相應的庫和安裝檔案,還避免了模擬器不能上網的問題)。

 

總之,上面三種方法中,自己製作system.img最為簡單快捷

3. Google Bits 中安裝檔案,許可權聲明和庫檔案

||--app<br /> |-EnhancedGoogleSearchProvider: Google搜尋引擎增強服務,安裝後將在設定(settings)的搜尋設定(search)中獲得更多關於搜尋引擎的服務<br /> |-GenieWidget: 根據地區下載不同語言的新聞和天氣<br /> |-Gmail:Gmail電子郵箱服務<br /> |-GmailProvider:電子郵箱的資料存放區服務<br />|-GoogleApps:Google公司專屬應用程式套件,類似office,支援WEB、POP3、SMTP、IMAP4、WAP收發郵件,還提供即時通訊、日曆、線上文檔、網站等全面服務<br />|-GoogleBackupTransport:可能是資料備份後,可以線上傳輸到網上,然後實現資料的儲存(與Android的backup服務相關)<br />|-GoogleCheckin:google簽入服務<br />|-GoogleContactsSyncAdapter:Google連絡人/通訊錄同步服務(連絡人的匯入和匯出)<br />|-GooglePartnerSetup:Google協作程式安裝嚮導(估計與賬戶的設定相關)<br />|-GoogleSearch:Google的搜尋服務,可以刪除的,不影響其他的搜尋功能<br />|-GoogleSettingsProvider:程式設定資料存放區服務<br />|-GoogleSubscribedFeedsProvider:Google資料同步服務<br />|-gtalkservice:gtalk服務<br />|-Maps:Google地圖<br />|-MarketUpdater:軟體管理服務(負責更新電子市場的程式)<br />|-MediaUploader:Google的媒體資料上傳服務<br />|-NetworkLocation:Google的網路定位服務<br />|-SetupWizard:手機設定嚮導(第一次安裝後出現的畫面)<br />|-Street:Google的街景視圖服務<br />|-Talk:Google Talk 服務(不建議卸載)<br />|-TalkProvider:Talk服務的支撐程式,估計與資料存放區相關<br />|-TtsService:TTS(Text To Speech)文本到語音的服務<br />|-Vending:Android Market(電子市場)<br />|-VoiceSearchWithKeyboard:語音輸進功能(通過語音鍵盤輸入,如果語速不快,基本可以準確判斷)<br />|-YouTube:手機“優酷”(世界最大的視頻分享網站YouTube)<br />||--etc<br /> |-permissons<br /> |-com.google.android.datamessaging.xml:(貌似不需要)<br /> |-com.google.android.gtalkservice.xml:對於framewokr/gtalk.jar的許可權聲明<br /> |-com.google.android.maps.xml:對於frameword/maps.jar的許可權聲明<br />||--framework<br /> |-com.google.android.gtalkservice.jar:支援gtalk的api的源檔案編譯產生<br /> |-com.google.android.maps.jar:支援maps的api的源檔案編譯產生<br />||--lib<br /> |-libgtalk_jni.so:支援gtalk的動態連結程式庫<br />|-libspeech.so:支援語音搜尋和語音撥號相關動態連結程式庫 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.