解决: AOSP 编译AndroidQ preview 失败

时间:2024-04-05 19:35:53

拉了网上最新的AOSP 代码,编译结果报错:如下图
解决: AOSP 编译AndroidQ preview 失败

LLFAILED: /media/caoxinyu/TomasYu/out-x86/Out_Q/soong/build.ninja
/media/caoxinyu/TomasYu/out-x86/Out_Q/soong/.bootstrap/bin/soong_build -t -l /media/caoxinyu/TomasYu/out-x86/Out_Q/.module_paths/Android.bp.list -b /media/caoxinyu/TomasYu/out-x86/Out_Q/soong -n /media/caoxinyu/TomasYu/out-x86/Out_Q -d /media/caoxinyu/TomasYu/out-x86/Out_Q/soong/build.ninja.d -globFile /media/caoxinyu/TomasYu/out-x86/Out_Q/soong/.bootstrap/build-globs.ninja -o /media/caoxinyu/TomasYu/out-x86/Out_Q/soong/build.ninja Android.bp
error: frameworks/native/libs/gui/Android.bp:20:1: module "libgui" variant "android_x86_x86_64_core_shared_asan": links a library "libselinux" which is not LL-NDK, VNDK-SP, or explicitly marked as 'double_loadable:true'. (dependency: libgui -> libbufferhubqueue -> libpdx_default_transport -> libselinux)
09:26:01 soong bootstrap failed with: exit status 1

难道是我的本地代码有问题?然后我执行:

python repo forall -c git reset --hard
python repo sync

结果之后编译还是报错。

然后百度了一下,发现,好吧,不行。

还是google 吧。

看到一个解答:

Just adding double_loadable:true in libselinux bp solves this issue,
as in the error report suggestion. And there was no issue in bootup
upon this build image. google 论坛
https://groups.google.com/forum/#!topic/android-building/67sFi481Gto

他说可以根据报错,把libselinux bp 修改一下。但是这个在哪里,也没说。
好吧,我自己找了半天也没有找到。
最后去google 搜索:aosp libselinux
https://android.googlesource.com/platform/external/libselinux/

OK,可能是在aosp/external 下面。看了下,果然有。但是没有libselinux.bp.这下面有Android.bp

ok,修改下。编译可以了。

修改路径如下:
解决: AOSP 编译AndroidQ preview 失败

解决方法总结:

去aosp/external/selinux/libselinux 下修改下Android.bp
修改内容如下:

cc_library {
    name: "libselinux",
    defaults: ["libselinux_defaults"],

    vendor_available: true,
    vndk: {
        enabled: true,
    },
    recovery_available: true,
    
    double_loadable:true,

    host_supported: true,
    cflags: ["-DUSE_PCRE2"],

    srcs: [
        "src/label_file.c",
        "src/regex.c",
    ],

增加了 double_loadable:true,

总结:

1.其实编译报错,哪里出错,人家都说了。你要尝试去理解。 解决问题的关键一定在报错里面。

2.自己英文还是太差。