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
This commit is contained in:
parent
df96e1f25c
commit
cacf04351f
1 changed files with 8 additions and 7 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue