Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cacf0435 authored by Martin Stjernholm's avatar Martin Stjernholm
Browse files

Update logic for detecting pre-apexd services to check that the ART APEX is

mounted.

Necessary to make e.g. bootanimation work, which depends on (at least)
libandroidicu.so in the ART APEX.

Test: Build & boot
Bug: 135753770
Exempt-From-Owner-Approval: Approved internally
Change-Id: Ibab4f5f7a243d0815b9c70a537bae8d77dee2fbb
Merged-In: Ibab4f5f7a243d0815b9c70a537bae8d77dee2fbb
parent df96e1f2
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -116,9 +116,10 @@ static bool ExpandArgsAndExecv(const std::vector<std::string>& args, bool sigsto
    return execv(c_strings[0], c_strings.data()) == 0;
}

static bool IsRuntimeApexReady() {
static bool AreRuntimeApexesReady() {
    struct stat buf;
    return stat("/apex/com.android.runtime/", &buf) == 0;
    return stat("/apex/com.android.art/", &buf) == 0 &&
           stat("/apex/com.android.runtime/", &buf) == 0;
}

unsigned long Service::next_start_order_ = 1;
@@ -406,11 +407,11 @@ Result<void> Service::Start() {
        scon = *result;
    }

    if (!IsRuntimeApexReady() && !pre_apexd_) {
        // If this service is started before the runtime APEX gets available,
        // mark it as pre-apexd one. Note that this marking is permanent. So
        // for example, if the service is re-launched (e.g., due to crash),
        // it is still recognized as pre-apexd... for consistency.
    if (!AreRuntimeApexesReady() && !pre_apexd_) {
        // If this service is started before the Runtime and ART APEXes get
        // available, mark it as pre-apexd one. Note that this marking is
        // permanent. So for example, if the service is re-launched (e.g., due
        // to crash), it is still recognized as pre-apexd... for consistency.
        pre_apexd_ = true;
    }