前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 编译技巧

Android 编译技巧

作者头像
Jasonangel
发布2022-04-08 16:32:58
4180
发布2022-04-08 16:32:58
举报
文章被收录于专栏:嵌入式Linux系统开发

Android 系统是基于 Linux 的,因此很多地方是相同的,比如编译。

Linux 中管理编译的文件是 Makefile,Android 系统管理编译的文件是 Android.mk,他们的语法相似,都会定义编译目标,声明依赖关系。

一般情况下,当你拿到了一个搭建好编译环境的 Android 源码,只需要在根目录执行

代码语言:javascript
复制
source build/envsetup.sh
lunch rk3399_mid-userdebug
make -j32

第一行是使能编译环境。第二行是你编译的版本,CPU型号 + userdebug、user、eng 等版本,第三行就是 make,多核编译。

这三行命令会使得 Android 系统全编译,第一次是肯定要全编译的。后面只修改几个文件,可以采用增量编译或者模块编译。

博主的电脑:i5-4210,16G 运行内存,500G 存储内存,第一次编译 Android8.1 耗时12小时。我的电脑编译 Linux 内核源码只要 18 分钟。

Android 模块编译

由于Android 全编耗时太久,大部分情况下,如果你只修改几个文件,可以模块编译。命令如下:

代码语言:javascript
复制
m:编译整个安卓系统

mm:编译当前目录下的模块,当前目录下需要有 Android.mk,否则就往上找最近的Android.mk文件。

mma:当前目录新增或删除文件后,可以用 mma 重新编译。

mmm:编译指定路径下的模块,指定的路径下面需要有 Android.mk

mmma:指定目录下新增或删除文件后,可以用mmma重新编译。

官方英文解释如下,来源于源码 build/envsetup.sh:

代码语言:javascript
复制
- m:         Makes from the top of the tree.
- mm:        Builds all of the modules in the current directory, but not their dependencies.
- mmm:       Builds all of the modules in the supplied directories, but not their dependencies.
             To limit the modules being built use the syntax: mmm dir/:target1,target2.
- mma:       Builds all of the modules in the current directory, and their dependencies.
- mmma:      Builds all of the modules in the supplied directories, and their dependencies.

如上编译后,并不会更新 /out/target/product/{project}/system.img 烧写镜像,还需要在根目录执行

代码语言:javascript
复制
make snod

重新进行打包,就会生成 system.img ,把 system.img 重新烧写到板子中就可以了。

Android 固件

不同厂商烧写的方式不一样,但大都是这几类文件。

Android 固件烧写工具一般命名为 AndroidTool.exe 或者 FlashTool.exe

博主对 Android 系统的理解

大家一般都是玩 Linux,完整的固件包括 uboot、Linux Kernel、rootfs。其实Android 就是把 rootfs 替换了,变成了 Android 文件系统,uboot 和 Linux Kernel 还是差不多的。

启动流程也是差不多的(从下往上看)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android 模块编译
  • Android 固件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档