cm倒了,换了个名字继续动作,但从官网上来看感觉大家都还没准备好,社区也还没建起来,好生凄凉。
今天记录的是如何从lineage源码编译出刷机包,以下环境基于fedora 24。
前才准备好
至于说要安装什么依赖什么工具的,可以等出问题时再dnf/apt-get,以下仅简述流程。
源码下载
源码下载与其他的是一样的,git地址在这里,同样也是使用repo下载。
- 初始化下载,这里下载cm14.1
repo init -u git://github.com/LineageOS/android.git -b cm-14.1
由于我是要使用nexus5的男人,所以需要把n5的驱动设备信息也下下来
- 到.repo新建local_manifests目录
- 创建文件 roomservice.xml
- 文件内容如下,这部分的源是来自于
1 |
|
- 然后就可以开始下载同步了
repo sync
包括说以后需要更新源码也可以使用sync来同步 。
至于说git的配置啊,账号什么的,不在这篇文章的记录范围。
完成后就可以开始构建了
构建
- 与aosp编译类似,编译前同样需要引入环境
source build/envsetup.sh
- 准备构建前,需要先告诉编译系统你要编译什么,这里的话与aosp有点差异,它使用的是一个叫”breakfast“的命令,与lunch类似,但后面加的构建信息可以是直接从devices目录下的名字,如n5为hammerhead
breakfast hammerhead
如果上一步没啥问题,就会显示
获取驱动(这里可以下载)
- 之前就失败在这里,我以为能自动获取到n5的vendor,结果就是差了这一步导致编译出来的包不能进入系统
- 需要在device/lge/hammerhead下执行extract-files.sh,这里会要求连接手机,我就刷了个别人的cm14.1,然后连上了就会获取到驱动了。
- 记得要开启ADB的root权限
为了加速以后的编译过程,可以开启ccache
ccache -M 50G
- 还需要开启配置jack编译器
export JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx16g”
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
其中,-Xmx设置的是可申请的最大内存范围,按实际要求设置,如我是16G内存,就可以设置为16G。
开启ROOT
- 默认构建的是userdebug版本,但奇怪的是lineage居然不自带root,也没有su命令
- 如果需要支持root,需要在开始构建前设置变量
export WITH_SU=true
- 好了就可以开始真正地构建了,使用brunch命令,与make类似
brunch hammerhead
然后就是等待和出错的调试了。
出包刷机
cm的源码一个好处就是可以看到整个编译的进度,最后打完后会如下图所示
然后就可以去./out/target/product/hammerhead拿包了。
包也与aosp不同,这个更加友好,帮你把刷机包给做好了,不用fastboot去flash,直接使用twrp就可以了。
以后遇到问题再记录问题与解决办法。
创建模拟器
此处的模拟器并非使用lineageos来创建的,而是使用androidN的原生码码使用mini-emulator-x86_64来编译的,编译好后自动会设计ANDROID_PRODUCT_OUT的环境变量,如果需要切换加载的地方就切换到其他目录即可,否则就为类型“out/target/product/mini-emulator-x86_64”的目录,使用直接调用
emulator
就会自动创建模拟器了。
[link]
Info about hammerhead
Build for hammerhead
Install Lineage on hammerhead
root
commanders
单独编译
可以使用mmm单独编译一个模块,使用重新打入到system.img当中,如
mmm packages/apps/Launcher2/
make snod
=========================
jack server问题记录
此处只记录一个我遇到的神奇情况。开始的时候在start-server时监控是会后台运行的,但在我更新了系统后,发现再start-server就不行了,会一直卡在那,我开始还以为是由于SSL啊还是什么鬼的版本问题导致的,折腾了老久,才发现原来卡住是正常的,显示
我以为这里已经出了问题,毕竟之前是不会卡住的,于是一直找 办法。
事实上这个问题有可能是与我手动install-server有关,如果在是uninstall-server所有server的情况下(包括home目录下的.jack-server,.jack,.jack-setting文件),直接进行brunch或者make,这个lunch server的过程能够正常,即不会卡住。所以在构建前还是不要多手,手动去开启和安装jack-server。
编译问题
error: ro.build.fingerprint cannot exceed 91 bytes
xda上有人是这么回答的:
Edit build/tools/post_process_props.py. Change lines as follows:
PROP_NAME_MAX = 31#PROP_VALUE_MAX = 91 PROP_VALUE_MAX = 128
Edit bionic/libc/include/sys/system_properties.h. Change lines as follows:
#define PROP_NAME_MAX 32 // #define PROP_VALUE_MAX 92 #define PROP_VALUE_MAX 128
Do
make clean
make
You can also run the second make command in parallel using syntax such as make -j8
但这样改了后会导致编译失败
原因在于还有文件未改全,导致assert失败。
Edit frameworks/native/cmds/installd/installd_deps.h . Change lines as follows:
//constexpr size_t kPropertyValueMax = 92u;
constexpr size_t kPropertyValueMax = 128u;