下载LineageOS 源码编译

前才准备好
motoX 连接
至于说要安装什么依赖什么工具的,可以等出问题时再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
      文件内容如下,这部分的源是来自于
      hammerhead
      hammerheadcaf

<manifest>
  <project name="LineageOS/android_device_lge_hammerheadcaf" path="device/lge/hammerheadcaf" remote="github" />
  <project name="LineageOS/android_device_lge_hammerhead" path="device/lge/hammerhead" remote="github" />
  <project name="LineageOS/android_kernel_lge_hammerhead" path="kernel/lge/hammerhead" remote="github" />
manifest>
  • 下载同步代码
repo sync

包括说以后需要更新源码也可以使用sync来同步 。

至于说git的配置啊,账号什么的,不在这篇文章的记录范围。

完成后就可以开始构建了

构建

  • 设置环境变量
    与aosp编译类似,编译前同样需要引入环境
source build/envsetup.sh
  • lunch
    准备构建前,需要先告诉编译系统你要编译什么,这里的话与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/

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;

你可能感兴趣的:(Android,ROM开发)