再續Eclipse導入android內置應用程序

這篇主要是把我嘗試的“Eclipse導入android內置應用程序”過程記錄下來。我嘗試的是導入內置的Browser應用。

一、導入源碼問題

1.首先是將源碼中的browser源代碼拷貝出來(源碼路徑packages\apps)。

2.把我們要用的幾個class.jar拷貝出來,以備之後加入到工程項目中。

(1)源碼路徑out\target\common\obj\JAVA_LIBRARIES\android-common_intermediates下的class.jar

(2)源碼路徑out\target\common\obj\JAVA_LIBRARIES\framework_intermediates下的class.jar

(3)源碼路徑out\target\common\obj\JAVA_LIBRARIES\core_intermediates下的class.jar

(4)源碼路徑out\target\common\obj\Apps\Browser_intermediates下的class.jar

3.在eclipse下新建一個android工程,這時候要配合你用的源碼版本,勾選SDK Version. 我用的是3.0的


導入後會看到好多錯誤。如何消除這些錯誤就要用到步驟2中的class.jar文件了。

4.添加一個User Library,名字你隨便取一個。我隨便取一個叫MyLib.


然後在這個MyLib中加入上面那個幾個class.jar文件。


接下來這步比較重要,那就是把MyLib移到最上方。


這時候就不再報錯了。我這裏是這樣的。可能你要根據具體情況進行修正。

5.這時導入源碼的問題就告一段落了。


二、如何安裝到模擬器上。

1.移除模擬器上自帶的Browser.apk

在我們完成了(一)中導入源碼的動作之後,我迫不及待的點擊了運行。但是很不幸,apk是產生了,但是沒有能安裝到模擬器端。

後來想想很正常,一方面原本模擬器上就已經存在了一個Browser應用程序你不一定能再裝一個。所以我們要先移除模擬器上的Browser應用,這個移除你需要root權限。

我是這樣做的。打開命令行窗口,一次運行如下命令:

(1)adb shell mount -o remount ,rw /

(2)adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

(3)adb shell chmod 777 /system

這時你就有權去刪除Browser這個應用程序了。

運行adb shell再轉至Browser.apk所在的目錄下。

cd system\app

移除Browser.apk

rm Browser.apk

這時你再到模擬器上看,就會發現Browser被你給移除了。


2.給apk簽名

此時你已經卸載了模擬器自帶的Browser.apk,你可能又想點擊運行,但是你可能和我一樣,又一次失望了。又報了一個錯誤,

我得到的錯誤大致是關於Signature not match。我的想法是,Eclipse產生的BrowserActivity.apk簽名可能和自帶的那個Browser.apk的簽名不一樣,所以你裝不上去。

於是我到網上去查資料,改簽名。

http://dev.10086.cn/cmdn/supesite/?uid-49302-action-viewspace-itemid-907

上面這個網址上的信息給了我很大的幫助。其中提到的第一個方法,我試過,是絕對有用的。這裏我主要講一下我嘗試的第二個方法。就是用signapk.jar的方式給apk簽名。

(1)將Eclipse產生BrowserActivity.apk拷出來(要在AndroidManifest.xml中加入android:sharedUserId="android.uid.system")。建議你建一個文件夾,專門用來簽名。我就是這樣做的。

(2)用壓縮工具打開這個apk,把刪掉META-INF目錄下的CERT.SF和CERT.RSA兩個文件。

(3)你在源碼中找出platform.x509.pem和platform.pk8這兩個文件,所在源碼路徑爲build\target\product\security

(4)去找到android的簽名工具signapk.jar,所在的源碼路徑爲

out/host/linux-x86/framework

(5)把BrowserActivity.apk, platform.x509.pem, platform.pk8, signapk.jar這四個文件放在一個文件夾中,在命令行中運行

java -jar signapk.jar platform.x509.pem platform.pk8 BrowserActivity.apk BrowserActivity-signed.apk

這樣就會產生一個簽名過的BrowserActivity-signed.apk。

(6)這時候你再向模擬器上裝這個BrowserActivity-signed.apk,就能裝上了。


總結

雖然經歷了上面這麼多,也把eclipse產生的apk裝到了模擬器上,但是很不幸的告訴大家,點擊Browser時,報錯了。目前我還不知道是什麼具體原因,報的錯大致是與數據存儲相關的一個問題。如果有知道的,希望大家不吝指教。

貼出來目的主要是希望能和大家進行探討,我想闡明以下幾點:

(1)這個方法我沒有在真機上試過,但我猜測是不行的,因爲我們拿不到真機簽名用的key,那肯定不能到真機上運行。我們公司的Key我也拿不到,所以沒有這個條件試。千萬不要輕易刪除真機上的內置應用,可能你恢復出廠設置也補救不了,只能再刷rom。

(2)我只是在Browser這個應用上進行了嘗試,大家可以嘗試其他的內置應用程序如MMS,Email等等。

(3)可能有人覺得這樣做多此一舉,直接在源碼中搞不就得了。我是這樣想的,一來這是一個嘗試,誰知道到底用處有什麼,過程中也會學到不少知識。二來我計算機配置有限,虛擬機開了之後機器太卡,根本動不了。有了上述方法,大家可以不用受那麼多錯誤提示的干擾,在eclipse中很清晰的去研究代碼。如果某個應用安裝到模擬器能直接運行,那你就不用再去開虛擬機了。三就是有時候我們做的一些開發中可能混雜這一些sdk中沒有的代碼,我們可以借鑑這個思路去源碼中把這些內容找出來添進去。方便在eclipse中去調試。而不用每次都開虛擬器,放到源碼中編譯。


最後,謝謝大家,小弟菜,勿噴,呵呵!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章