From 493f5aa16075eec6948f476b3fe0d29de063ee85 Mon Sep 17 00:00:00 2001 From: Calin Juravle Date: Wed, 24 Feb 2016 16:27:19 +0000 Subject: [PATCH] Create profile folder for foreign dex markers. This is a special profile folder where apps will leave profile markers for the dex files they load and don't own. System server will read the markers and decide if the apks should be fully compiled instead of profile guide compiled. Bug: 27334750 Bug: 26080105 Change-Id: Ib18f20cf78a8dbfc465610ec6ceec52699c5420a --- Ext4Crypt.cpp | 4 ++++ Utils.cpp | 5 +++++ Utils.h | 1 + 3 files changed, 10 insertions(+) diff --git a/Ext4Crypt.cpp b/Ext4Crypt.cpp index a785856..6612eaf 100644 --- a/Ext4Crypt.cpp +++ b/Ext4Crypt.cpp @@ -601,11 +601,15 @@ bool e4crypt_prepare_user_storage(const char* volume_uuid, userid_t user_id, auto misc_de_path = android::vold::BuildDataMiscDePath(user_id); auto user_de_path = android::vold::BuildDataUserDePath(volume_uuid, user_id); auto profiles_de_path = android::vold::BuildDataProfilesDePath(user_id); + auto foreign_dex_profiles_de_path = + android::vold::BuildDataProfilesForeignDexDePath(user_id); + if (!prepare_dir(system_de_path, 0770, AID_SYSTEM, AID_SYSTEM)) return false; if (!prepare_dir(misc_de_path, 01771, AID_SYSTEM, AID_MISC)) return false; if (!prepare_dir(user_de_path, 0771, AID_SYSTEM, AID_SYSTEM)) return false; if (!prepare_dir(profiles_de_path, 0771, AID_SYSTEM, AID_SYSTEM)) return false; + if (!prepare_dir(foreign_dex_profiles_de_path, 0773, AID_SYSTEM, AID_SYSTEM)) return false; if (e4crypt_is_native()) { std::string de_raw_ref; diff --git a/Utils.cpp b/Utils.cpp index 2514f9a..942945d 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -581,6 +581,11 @@ std::string BuildDataProfilesDePath(userid_t userId) { return StringPrintf("%s/misc/profiles/cur/%u", BuildDataPath(nullptr).c_str(), userId); } +std::string BuildDataProfilesForeignDexDePath(userid_t userId) { + std::string profiles_path = BuildDataProfilesDePath(userId); + return StringPrintf("%s/foreign-dex", profiles_path.c_str()); +} + std::string BuildDataPath(const char* volumeUuid) { // TODO: unify with installd path generation logic if (volumeUuid == nullptr) { diff --git a/Utils.h b/Utils.h index 0248b85..cfc8050 100644 --- a/Utils.h +++ b/Utils.h @@ -101,6 +101,7 @@ std::string BuildDataSystemDePath(userid_t userid); std::string BuildDataMiscCePath(userid_t userid); std::string BuildDataMiscDePath(userid_t userid); std::string BuildDataProfilesDePath(userid_t userid); +std::string BuildDataProfilesForeignDexDePath(userid_t userid); std::string BuildDataPath(const char* volumeUuid); std::string BuildDataMediaPath(const char* volumeUuid, userid_t userid);