lineageOS编译一个模拟器版本

继上次的lineageOS编译并在S4上安装成功后,这次打算再进一步。

调试并改写Android源码。总需要一个模拟器来供调试吧。不然每次编译一个再刷到真机去,然后再调试显然太麻烦了。

Google了一下,貌似XDA论坛和reddit上都说lineageOS不支持模拟器运行。我:???
运行lunch看了一下设备,显然有x86版本啊,这不还支持arm呢(avd里面的arm模拟器光开机我就花了半个多小时,着实不敢恭维)

# lunch

You're building on Linux

Lunch menu... pick a combo:
     1. full-eng
     2. lineage_a3xelte-userdebug
     3. lineage_a5xelte-userdebug
     4. lineage_a5y17lte-userdebug
     5. lineage_a7y17lte-userdebug
     6. lineage_Amber-userdebug
...
     91. lineage_zl1-userdebug
     92. lineage_arm-userdebug
     93. lineage_arm64-userdebug
     94. lineage_x86-userdebug
     95. lineage_x86_64-userdebug

Which would you like? [aosp_arm-eng] 94
Trying dependencies-only mode on a non-existing device tree?
...

然后输入序号后发现能正确配置,于是两板斧开始

breakfast lineage_x86-userdebug
brunch lineage_x86-userdebug

更新,上面两个选项编译出来都无法运行。经过三天的尝试和各种搜索,建议如下代码

export WITH_SU=true
export WITHOUT_CHECK_API=true
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx12G"
lunch aosp_x86-userdebug
make -j12
emulator

4.5更新
修补patch
对于16.0版本:
https://review.lineageos.org/c/LineageOS/android_vendor_lineage/+/256909
对于17.1版本:
https://review.lineageos.org/c/LineageOS/android_vendor_lineage/+/265299
先lunch完,然后m sdk_addon,最后编译完的在out/host/linux-x86/sdk_addon

export ANDROID_PRODUCT_OUT=/home/happy/Android/lineage/out/target/product/generic_x86
./emulator -avd pixel -system $ANDROID_PRODUCT_OUT/system.img -data $ANDROID_PRODUCT_OUT/userdata.img -ramdisk $ANDROID_PRODUCT_OUT/ramdisk.img -kernel /home/happy/Android/lineage/prebuilts/qemu-kernel/x86/kernel-qemu

设置模拟器目录

if [ -d "/android_source_path/prebuilts/android-emulator/linux-x86_64" ] ; then
    PATH="/android_source_path/prebuilts/android-emulator/linux-x86_64:$PATH"
fi

设置OUT目录

export ANDROID_PRODUCT_OUT=/android_source_path/out/target/product/emulatorx86

使用编译好的镜像启动(arm)

emulator64-arm -kernel ./prebuilts/qemu-kernel/arm64/kernel-qemu -sysdir $ANDROID_PRODUCT_OUT -system $ANDROID_PRODUCT_OUT/system.img -data $ANDROID_PRODUCT_OUT/userdata.img -ramdisk $ANDROID_PRODUCT_OUT/ramdisk.img

使用编译好的镜像启动(x86)

emulator64-x86 -kernel ./prebuilts/qemu-kernel/x86/kernel-qemu -sysdir $ANDROID_PRODUCT_OUT -system $ANDROID_PRODUCT_OUT/system.img -data $ANDROID_PRODUCT_OUT/userdata.img -ramdisk $ANDROID_PRODUCT_OUT/ramdisk.img

增加编译的内存大小

发现内存分配了12g但用的只有4g左右。Google后发现是JACK默认限制使用的内存太小(来源)官方文档),所以先执行

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

如果编译前没有执行上面export命令,编译出错后再执行export,需要用下面命令重启jack

out/host/linux-x86/bin/jack-admin kill-server
out/host/linux-x86/bin/jack-admin start-server

增加root

LineageOS默认取消了ROOT,如果希望编译的ROM自带ROOT,需要加入环境变量

export WITH_SU=true

各种编译问题杂烩

[1/1] /home/happy/Android/lineage/out/soong/.minibootstrap/minibp /home/happy/Android/lineage/out/soong/.bootstrap/build.ninja
[55/56] glob prebuilts/ndk/stl.bp
[80/80] /home/happy/Android/lineage/out/soong/.bootstrap/bin/soong_build /home/happy/Android/lineage/out/soong/build.ninja
FAILED: /home/happy/Android/lineage/out/soong/build.ninja 
/home/happy/Android/lineage/out/soong/.bootstrap/bin/soong_build -t -l /home/happy/Android/lineage/out/.module_paths/Android.bp.list -b /home/happy/Android/lineage/out/soong -n /home/happy/Android/lineage/out -d /home/happy/Android/lineage/out/soong/build.ninja.d -o /home/happy/Android/lineage/out/soong/build.ninja Android.bp
error: vendor/lineage/build/soong/Android.bp:31:8: module "generated_kernel_includes": cmd: unknown variable '$(KERNEL_MAKE_FLAGS)'
ninja: build stopped: subcommand failed.
00:57:54 soong bootstrap failed with: exit status 1

https://github.com/LineageOS/android_prebuilts_lineage-sdk

ninja: no work to do.
ninja: no work to do.
No need to regenerate ninja file
No need to regenerate ninja file
ninja: error: 'prebuilts/lineage-sdk/api/.txt', needed by '/home/happy/Android/lineage/out/target/common/obj/PACKAGING/checkpublicapi-lineage-last-timestamp', missing and no known rule to make it
01:19:56 ninja failed with: exit status 1
export WITHOUT_CHECK_API=1
  • 启动emulator提示
emulator: WARNING: system partition size adjusted to match image file (2048 MB > 800 MB)

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: linuxfb, minimal, offscreen, xcb.

打开调试

export QT_DEBUG_PLUGINS=1

发现其实qt加载的lib目录不对

QFactoryLoader::QFactoryLoader() checking directory path "/home/happy/Android/lineage/prebuilts/android-emulator/linux-x86_64/platforms" ...
Cannot load library /home/happy/Android/lineage/prebuilts/android-emulator/linux-x86_64/lib64/qt/plugins/platforms/libqxcb.so: (libc++.so: cannot open shared object file: No such file or directory)
QLibraryPrivate::loadPlugin failed on "/home/happy/Android/lineage/prebuilts/android-emulator/linux-x86_64/lib64/qt/plugins/platforms/libqxcb.so" : "Cannot load library /home/happy/Android/lineage/prebuilts/android-emulator/linux-x86_64/lib64/qt/plugins/platforms/libqxcb.so: (libc++.so: cannot open shared object file: No such file or directory)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: linuxfb, minimal, offscreen, xcb.

更改lib加载目录

export LD_LIBRARY_PATH=/home/happy/Android/lineage/prebuilts/android-emulator/linux-x86_64/lib64/qt/lib/
  • 如果中途提示链接错误,只要把那个中间文件删除再make一遍即可。
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: /home/happy/Android/lineage/out/soong/.intermediates/art/runtime/libartd/linux_glibc_x86_static/obj/.intermediates/art/runtime/art_operator_srcs/gen/art/runtime/thread.operator_out.o:1:2: syntax error, unexpected INTEGER, expecting $end
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: /home/happy/Android/lineage/out/soong/.intermediates/art/runtime/libartd/linux_glibc_x86_static/obj/.intermediates/art/runtime/art_operator_srcs/gen/art/runtime/thread.operator_out.o: not an object or archive
clang: error: linker command failed with exit code 1 (use -v to see invocation)

然后我们删除这个文件即可

rm /home/happy/Android/lineage/out/soong/.intermediates/art/runtime/libartd/linux_glibc_x86_static/obj/.intermediates/art/runtime/art_operator_srcs/gen/art/runtime/thread.operator_out.o

杂烩

[1/1] /home/happy/Android/lineage/out/soong/.minibootstrap/minibp /home/happy/Android/lineage/out/soong/.bootstrap/build.ninja
[55/56] glob prebuilts/ndk/stl.bp
[80/80] /home/happy/Android/lineage/out/soong/.bootstrap/bin/soong_build /home/happy/Android/lineage/out/soong/build.ninja
FAILED: /home/happy/Android/lineage/out/soong/build.ninja 
/home/happy/Android/lineage/out/soong/.bootstrap/bin/soong_build -t -l /home/happy/Android/lineage/out/.module_paths/Android.bp.list -b /home/happy/Android/lineage/out/soong -n /home/happy/Android/lineage/out -d /home/happy/Android/lineage/out/soong/build.ninja.d -o /home/happy/Android/lineage/out/soong/build.ninja Android.bp
error: vendor/lineage/build/soong/Android.bp:31:8: module "generated_kernel_includes": cmd: unknown variable '$(KERNEL_MAKE_FLAGS)'
ninja: build stopped: subcommand failed.
00:57:54 soong bootstrap failed with: exit status 1

https://github.com/LineageOS/android_prebuilts_lineage-sdk

ninja: no work to do.
ninja: no work to do.
No need to regenerate ninja file
No need to regenerate ninja file
ninja: error: 'prebuilts/lineage-sdk/api/.txt', needed by '/home/happy/Android/lineage/out/target/common/obj/PACKAGING/checkpublicapi-lineage-last-timestamp', missing and no known rule to make it
01:19:56 ninja failed with: exit status 1
export WITHOUT_CHECK_API=true
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx12G"
lunch mini_emulator_x86-userdebug
emulator -partition-size 1024 -memory 2096

参考

https://www.cnblogs.com/luoyesiqiu/p/10701419.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 148,637评论 1 318
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 63,443评论 1 266
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 99,164评论 0 218
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,075评论 0 188
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,080评论 1 266
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,365评论 1 184
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,901评论 2 283
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,649评论 0 176
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,122评论 0 223
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,734评论 2 225
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,093评论 1 236
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,548评论 2 222
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,028评论 3 216
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,765评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,291评论 0 178
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,162评论 2 239
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,293评论 2 242

推荐阅读更多精彩内容