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的,你按照步骤来,可能会有所帮助