再续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中去调试。而不用每次都开虚拟器,放到源码中编译。


最后,谢谢大家,小弟菜,勿喷,呵呵!

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