Ubuntu编译Android源代码
2016-02-18 10:00
465 查看
1.整体编译Android 源代码
Android 源代码下载完成后,开始编译源码,进入源代码路径,详情见如下操作及相关说明:
第一次编译时间较长,如果计算机处理能力较强,可以使用make –j8增加编译工作进程数从而减少编译时间。j8中8代表开启8个线程,可根据自己电脑配置适当修改,以CPU核数乘2为宜。编译完成后,进入$workdir/out/target/product/generic,关注此目录下的system.img、ramdisk.img、userdata.img等3个IMG镜像文件以及data、obj、root、system等目录,请读者自己去看看这些目录下究竟生成了一些什么文件。这里重点关注system目录,其主要结构如下:
2.按需编译单个模块
整个Android编译环境从搭建到现在已经完成了80%。前面已经谈到之所以搭建这样的编译环境,就是为了能够调试、运行修改的内容。如果在Phone应用里修改了Android源码增加日志打印,是不是也要通过make来编译呢?这样的话,是不是在编译方面需要花很多时间?不用担心,在Android中能够按照模块进行模块的单独编译,减少不必要的编译时间开销。
注意 在进行分模块编译之前,我们必须完成整体编译,否则不能成功编译需要单个编译的模块。
分模块编译主要有两种方式:第一种,在源码目录下mmm module path;第二种,进入对应的应用模块代码所在目录,执行mm。详情见如下操作及相关说明:
不论采用什么方式编译单个模块,编译成功后,均有如下类似的日志:
XXX代表应用模块的名称,如果编译frameworks,会生成framework.jar。
注意 建议使用mmm方式分模块编译,如果使用mm方式编译,就会删除system.img、ramdisk.img、userdata.img等IMG镜像文件,之后还要重新make编译全部代码生成这些镜像文件,非常耗时。
3.编译生成本地Android SDK
记得开发Android应用用到的SDK吗?既然已经下载了Android 源代码,我们就可以根据Android源代码编译本地的Android SDK,详情见如下操作及相关说明:
**
4.编译好的镜像刷入手机
1.查看out目录
查看是否生成 system.img boot.img recovery.img userdata.img等需要的镜像文件
2.刷入手机
进入 system.img所在目录
1) 进入刷机模式:
双清:
2) 刷image到手机
或分别刷入
Android 源代码下载完成后,开始编译源码,进入源代码路径,详情见如下操作及相关说明:
$ source build/envsetup.sh //初始化编译环境; $ lunch //选择目标镜像版本 $ make //执行整编
第一次编译时间较长,如果计算机处理能力较强,可以使用make –j8增加编译工作进程数从而减少编译时间。j8中8代表开启8个线程,可根据自己电脑配置适当修改,以CPU核数乘2为宜。编译完成后,进入$workdir/out/target/product/generic,关注此目录下的system.img、ramdisk.img、userdata.img等3个IMG镜像文件以及data、obj、root、system等目录,请读者自己去看看这些目录下究竟生成了一些什么文件。这里重点关注system目录,其主要结构如下:
app(应用apk文件,如Phone.apk、Mms.apk等) bin(可执行文件,rild、vold等) etc(系统配置信息) fonts(字体文件) framework(主要保存一些jar包,framework.jar、core.jar等) lib(主要保存一些so动态链接库文件,libril.so、libreference-ril.so等) usr(用户配置信息) xbin(系统的一些可执行文件)
2.按需编译单个模块
整个Android编译环境从搭建到现在已经完成了80%。前面已经谈到之所以搭建这样的编译环境,就是为了能够调试、运行修改的内容。如果在Phone应用里修改了Android源码增加日志打印,是不是也要通过make来编译呢?这样的话,是不是在编译方面需要花很多时间?不用担心,在Android中能够按照模块进行模块的单独编译,减少不必要的编译时间开销。
注意 在进行分模块编译之前,我们必须完成整体编译,否则不能成功编译需要单个编译的模块。
分模块编译主要有两种方式:第一种,在源码目录下mmm module path;第二种,进入对应的应用模块代码所在目录,执行mm。详情见如下操作及相关说明:
$cd 源码目录 $mmm packages/apps/Phone/ //编译Phone应用 $mmm frameworks/base/ //编译frameworks $. build/envsetup.sh //mm编译方法加载环境变量;这里需要注意的是,build前有一个空格 $cd packages/apps/Phone //Phone应用代码目录 $mm //编译Phone模块 $cd 源码目录 $cd frameworks/base //进入frameworks代码目录 $mm //编译frameworks
不论采用什么方式编译单个模块,编译成功后,均有如下类似的日志:
Install: out/target/product/generic/system/XXX/XXX.apk
XXX代表应用模块的名称,如果编译frameworks,会生成framework.jar。
注意 建议使用mmm方式分模块编译,如果使用mm方式编译,就会删除system.img、ramdisk.img、userdata.img等IMG镜像文件,之后还要重新make编译全部代码生成这些镜像文件,非常耗时。
3.编译生成本地Android SDK
记得开发Android应用用到的SDK吗?既然已经下载了Android 源代码,我们就可以根据Android源代码编译本地的Android SDK,详情见如下操作及相关说明:
$cd 源码目录 $make sdk /* 在Android4.0之前的版本直接用make SDK就能正常编译完成,但到了4.0版本就需要做一些预编译的工作了,否则直接编译SDK会有编译错误出现 */ //采用如下的编译过程就能正常编译出本地Android SDK $. build/envsetup.sh//这里容易出错的地方就是,build前有一个空格 $lunch sdk-eng//加载sdk-eng,默认是full-eng $make sdk//编译SDK //编译成功后有如下日志 Package SDK: out/host/linux-x86/sdk/android-sdk_eng.android_linux-x86.zip //将刚编译出的SDK压缩包复制出来,在做make编译全部代码时会删除此文件,这样避免了重复编译SDK $cd $workdir/out/host/linux-x86/sdk/ $cp android-sdk_eng.android_linux-x86.zip $workdir/ $tar –xvf $workdir/android-sdk_eng.android_linux-x86.zip //可对比一下官方发布的SDK与本地编译的SDK有什么区别
**
4.编译好的镜像刷入手机
1.查看out目录
查看是否生成 system.img boot.img recovery.img userdata.img等需要的镜像文件
2.刷入手机
进入 system.img所在目录
1) 进入刷机模式:
adb reboot bootloader
双清:
fastboot format cache fastboot format userdata
2) 刷image到手机
sudo fastboot -w flashall
或分别刷入
fastboot flash recovery recovery.img fastboot flash boot boot.img fastboot flash system system.img fastboot flash userdata userdata.img
相关文章推荐
- android 软键盘,右下角 内容设置
- Android开发中R.java文件丢失或无法更新的解决方法
- android 软键盘弹出隐藏挤压界面等问题
- Android Studio如何找到当前类/方法被引用位置
- Android开发,相机拍摄并返回时,部分手机出现横竖屏切换的错误处理。
- android:exported属性
- Android杂谈之Handler与timer及TimerTask结合实现定时任务
- android studio win7 32bit Troubleshooting
- Android转场动画windowAnimation和ActivityAnimation的区别
- Android开发艺术探索读书笔记(三)
- Android 软键盘弹出与关闭监听
- Android开发艺术探索读书笔记(二)
- Android开发艺术探索读书笔记(一)
- android px和dp之间的转换
- Android 关于:android.view.InflateException: Binary XML file line #1: Error inflating class <unknown>
- "Cant start Git: git.exe probably the path to Git executable is not valid" Fix it." error
- Android开发/源代码资源汇总
- 异步任务----AsyncTask
- android 5种常用的存储方式
- Android屏幕适配总结