1*33f37583SAndroid Build Coastguard Worker /* 2*33f37583SAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project 3*33f37583SAndroid Build Coastguard Worker * 4*33f37583SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*33f37583SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*33f37583SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*33f37583SAndroid Build Coastguard Worker * 8*33f37583SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*33f37583SAndroid Build Coastguard Worker * 10*33f37583SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*33f37583SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*33f37583SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*33f37583SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*33f37583SAndroid Build Coastguard Worker * limitations under the License. 15*33f37583SAndroid Build Coastguard Worker */ 16*33f37583SAndroid Build Coastguard Worker 17*33f37583SAndroid Build Coastguard Worker #pragma once 18*33f37583SAndroid Build Coastguard Worker 19*33f37583SAndroid Build Coastguard Worker #include <chrono> 20*33f37583SAndroid Build Coastguard Worker #include <string> 21*33f37583SAndroid Build Coastguard Worker #include <unordered_map> 22*33f37583SAndroid Build Coastguard Worker #include <unordered_set> 23*33f37583SAndroid Build Coastguard Worker #include <vector> 24*33f37583SAndroid Build Coastguard Worker 25*33f37583SAndroid Build Coastguard Worker namespace android { 26*33f37583SAndroid Build Coastguard Worker namespace apex { 27*33f37583SAndroid Build Coastguard Worker 28*33f37583SAndroid Build Coastguard Worker enum class ApexPartition { System, SystemExt, Product, Vendor, Odm }; 29*33f37583SAndroid Build Coastguard Worker 30*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexDataDir = "/data/apex"; 31*33f37583SAndroid Build Coastguard Worker static constexpr const char* kActiveApexPackagesDataDir = "/data/apex/active"; 32*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexBackupDir = "/data/apex/backup"; 33*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexDecompressedDir = "/data/apex/decompressed"; 34*33f37583SAndroid Build Coastguard Worker static constexpr const char* kOtaReservedDir = "/data/apex/ota_reserved"; 35*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexPackageSystemDir = "/system/apex"; 36*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexPackageSystemExtDir = "/system_ext/apex"; 37*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexPackageProductDir = "/product/apex"; 38*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexPackageVendorDir = "/vendor/apex"; 39*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexPackageOdmDir = "/odm/apex"; 40*33f37583SAndroid Build Coastguard Worker static const std::unordered_map<ApexPartition, std::string> 41*33f37583SAndroid Build Coastguard Worker kBuiltinApexPackageDirs = { 42*33f37583SAndroid Build Coastguard Worker {ApexPartition::System, kApexPackageSystemDir}, 43*33f37583SAndroid Build Coastguard Worker {ApexPartition::SystemExt, kApexPackageSystemExtDir}, 44*33f37583SAndroid Build Coastguard Worker {ApexPartition::Product, kApexPackageProductDir}, 45*33f37583SAndroid Build Coastguard Worker {ApexPartition::Vendor, kApexPackageVendorDir}, 46*33f37583SAndroid Build Coastguard Worker {ApexPartition::Odm, kApexPackageOdmDir}, 47*33f37583SAndroid Build Coastguard Worker }; 48*33f37583SAndroid Build Coastguard Worker static const std::vector<std::string> kApexPackageBuiltinDirs = { 49*33f37583SAndroid Build Coastguard Worker kApexPackageSystemDir, kApexPackageSystemExtDir, kApexPackageProductDir, 50*33f37583SAndroid Build Coastguard Worker kApexPackageVendorDir, kApexPackageOdmDir}; 51*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexRoot = "/apex"; 52*33f37583SAndroid Build Coastguard Worker static constexpr const char* kStagedSessionsDir = "/data/app-staging"; 53*33f37583SAndroid Build Coastguard Worker 54*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexDataSubDir = "apexdata"; 55*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexSharedLibsSubDir = "sharedlibs"; 56*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexSnapshotSubDir = "apexrollback"; 57*33f37583SAndroid Build Coastguard Worker static constexpr const char* kPreRestoreSuffix = "-prerestore"; 58*33f37583SAndroid Build Coastguard Worker 59*33f37583SAndroid Build Coastguard Worker static constexpr const char* kDeSysDataDir = "/data/misc"; 60*33f37583SAndroid Build Coastguard Worker static constexpr const char* kDeNDataDir = "/data/misc_de"; 61*33f37583SAndroid Build Coastguard Worker static constexpr const char* kCeDataDir = "/data/misc_ce"; 62*33f37583SAndroid Build Coastguard Worker 63*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexPackageSuffix = ".apex"; 64*33f37583SAndroid Build Coastguard Worker static constexpr const char* kCompressedApexPackageSuffix = ".capex"; 65*33f37583SAndroid Build Coastguard Worker static constexpr const char* kDecompressedApexPackageSuffix = 66*33f37583SAndroid Build Coastguard Worker ".decompressed.apex"; 67*33f37583SAndroid Build Coastguard Worker static constexpr const char* kOtaApexPackageSuffix = ".ota.apex"; 68*33f37583SAndroid Build Coastguard Worker 69*33f37583SAndroid Build Coastguard Worker static constexpr const char* kManifestFilenameJson = "apex_manifest.json"; 70*33f37583SAndroid Build Coastguard Worker static constexpr const char* kManifestFilenamePb = "apex_manifest.pb"; 71*33f37583SAndroid Build Coastguard Worker 72*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexInfoList = "apex-info-list.xml"; 73*33f37583SAndroid Build Coastguard Worker 74*33f37583SAndroid Build Coastguard Worker // These should be in-sync with system/sepolicy/private/property_contexts 75*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexStatusSysprop = "apexd.status"; 76*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexStatusStarting = "starting"; 77*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexStatusActivated = "activated"; 78*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexStatusReady = "ready"; 79*33f37583SAndroid Build Coastguard Worker 80*33f37583SAndroid Build Coastguard Worker static constexpr const char* kMultiApexSelectPersistPrefix = 81*33f37583SAndroid Build Coastguard Worker "persist.vendor.apex."; 82*33f37583SAndroid Build Coastguard Worker static constexpr const char* kMultiApexSelectBootconfigPrefix = 83*33f37583SAndroid Build Coastguard Worker "ro.boot.vendor.apex."; 84*33f37583SAndroid Build Coastguard Worker static const std::vector<std::string> kMultiApexSelectPrefix = { 85*33f37583SAndroid Build Coastguard Worker // Check persist props first, to allow users to override bootconfig. 86*33f37583SAndroid Build Coastguard Worker kMultiApexSelectPersistPrefix, 87*33f37583SAndroid Build Coastguard Worker kMultiApexSelectBootconfigPrefix, 88*33f37583SAndroid Build Coastguard Worker }; 89*33f37583SAndroid Build Coastguard Worker 90*33f37583SAndroid Build Coastguard Worker static constexpr const char* kVmPayloadMetadataPartitionProp = 91*33f37583SAndroid Build Coastguard Worker "apexd.payload_metadata.path"; 92*33f37583SAndroid Build Coastguard Worker static constexpr const std::chrono::seconds kBlockApexWaitTime(10); 93*33f37583SAndroid Build Coastguard Worker 94*33f37583SAndroid Build Coastguard Worker static constexpr const char* kApexAllReadyProp = "apex.all.ready"; 95*33f37583SAndroid Build Coastguard Worker static constexpr const char* kCtlApexLoadSysprop = "ctl.apex_load"; 96*33f37583SAndroid Build Coastguard Worker static constexpr const char* kCtlApexUnloadSysprop = "ctl.apex_unload"; 97*33f37583SAndroid Build Coastguard Worker 98*33f37583SAndroid Build Coastguard Worker // Constants for brand-new APEX 99*33f37583SAndroid Build Coastguard Worker static constexpr const char* kBrandNewApexPublicKeySuffix = ".avbpubkey"; 100*33f37583SAndroid Build Coastguard Worker static constexpr const char* kBrandNewApexBlocklistFileName = "blocklist.json"; 101*33f37583SAndroid Build Coastguard Worker static constexpr const char* kBrandNewApexConfigSystemDir = 102*33f37583SAndroid Build Coastguard Worker "/system/etc/brand_new_apex"; 103*33f37583SAndroid Build Coastguard Worker static constexpr const char* kBrandNewApexConfigSystemExtDir = 104*33f37583SAndroid Build Coastguard Worker "/system_ext/etc/brand_new_apex"; 105*33f37583SAndroid Build Coastguard Worker static constexpr const char* kBrandNewApexConfigProductDir = 106*33f37583SAndroid Build Coastguard Worker "/product/etc/brand_new_apex"; 107*33f37583SAndroid Build Coastguard Worker static constexpr const char* kBrandNewApexConfigVendorDir = 108*33f37583SAndroid Build Coastguard Worker "/vendor/etc/brand_new_apex"; 109*33f37583SAndroid Build Coastguard Worker static constexpr const char* kBrandNewApexConfigOdmDir = 110*33f37583SAndroid Build Coastguard Worker "/odm/etc/brand_new_apex"; 111*33f37583SAndroid Build Coastguard Worker static const std::unordered_map<ApexPartition, std::string> 112*33f37583SAndroid Build Coastguard Worker kPartitionToBrandNewApexConfigDirs = { 113*33f37583SAndroid Build Coastguard Worker {ApexPartition::System, kBrandNewApexConfigSystemDir}, 114*33f37583SAndroid Build Coastguard Worker {ApexPartition::SystemExt, kBrandNewApexConfigSystemExtDir}, 115*33f37583SAndroid Build Coastguard Worker {ApexPartition::Product, kBrandNewApexConfigProductDir}, 116*33f37583SAndroid Build Coastguard Worker {ApexPartition::Vendor, kBrandNewApexConfigVendorDir}, 117*33f37583SAndroid Build Coastguard Worker {ApexPartition::Odm, kBrandNewApexConfigOdmDir}, 118*33f37583SAndroid Build Coastguard Worker }; 119*33f37583SAndroid Build Coastguard Worker 120*33f37583SAndroid Build Coastguard Worker // Banned APEX names 121*33f37583SAndroid Build Coastguard Worker static const std::unordered_set<std::string> kBannedApexName = { 122*33f37583SAndroid Build Coastguard Worker kApexSharedLibsSubDir, // To avoid conflicts with predefined 123*33f37583SAndroid Build Coastguard Worker // /apex/sharedlibs directory 124*33f37583SAndroid Build Coastguard Worker }; 125*33f37583SAndroid Build Coastguard Worker } // namespace apex 126*33f37583SAndroid Build Coastguard Worker } // namespace android 127