-
下载源码:
//初始化仓库
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest android-6.0.1_r80
//清华大学镜像下载Android源码
//Android源码版本号列表
https://blog.youkuaiyun.com/u013005791/article/details/52228727
-
编译
进入根目录
source build/envsetup.sh
lunch full-eng
make -j4
-
在模拟器中运行
source build/envsetup.sh
lunch full-eng
make //如果没有编译,需要运行这一步,如果已编译,就不需要了
emulator
或者
emulator -partition-size 1536 -system system.img -data userdata.img -ramdisk ramdisk.img
说明:emulator是在/working/android4.0/out/host/linux-x86/bin目录下的,也就是编译后生成的
-
查看命令:
在源码目录下执行
$ . build/envsetup.sh (.后面有空格)
就多出一些命令:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
可以加—help查看用法
-
编译模块
android中的一个应用程序可以单独编译,编译后要重新生成system.img
可以使用mmm来编译指定目录的模块,如编译联系人:
$ mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/product/generic/data/app/ContactsTests. apk
out/target/product/generic/system/app/Contacts.apk
可以使用
$ make snod
重新生成system.img,再运行模拟器
-
编译SDK
直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android了。
$ make sdk
编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是 SDK目录
实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来
此后的应用开发,就在该SDK上进行,所以把7)对于~/.bashrc的修改注释掉,增加如下一行:
export PATH=${PATH}:~/android/out/host/linux-x86/sdk/andr oid-sdk_eng.xxx_linux-x86/tools
注意要把xxx换成真实的路径;
-
参考
http://www.cnblogs.com/hoji-real/articles/2144892.html
http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0822/12849.html
https://www.cnblogs.com/fishoneseaatblog/p/4058366.html
//清华源下载
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
android版本与linux内核版本对应关系
https://blog.youkuaiyun.com/ly890700/article/details/75040704
Android Version |API Level |Linux Kernel in AOSP
----------------------------------------------------
1.5 Cupcake |3 |2.6.27
1.6 Donut |4 |2.6.29
2.0/1 Eclair |5-7 |2.6.29
2.2.x Froyo |8 |2.6.32
2.3.x Gingerbread |9, 10 |2.6.35
3.x.x Honeycomb |11-13 |2.6.36
4.0.x Ice Cream San|14, 15 |3.0.1
4.1.x Jelly Bean |16 |3.0.31
4.2.x Jelly Bean |17 |3.4.0
4.3 Jelly Bean |18 |3.4.39
4.4 Kit Kat |19, 20 |3.10
5.x Lollipop |21, 22 |3.16.1
6.0 Marshmallow |23 |3.18.10
7.0 Nougat |24 |4.4.1
7.1 Nougat |25 |4.4.1 (To be updated)
android kernel goldfish 3.4.0 编译
https://blog.youkuaiyun.com/jason_198724/article/details/39805409
repo sync 失败后重启
#!/bin/sh
repo sync -j4
while [ $? -ne 0 ]
do
repo sync -j4
done