1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker ** 3*38e8c45fSAndroid Build Coastguard Worker ** Copyright 2008, The Android Open Source Project 4*38e8c45fSAndroid Build Coastguard Worker ** 5*38e8c45fSAndroid Build Coastguard Worker ** Licensed under the Apache License, Version 2.0 (the "License"); 6*38e8c45fSAndroid Build Coastguard Worker ** you may not use this file except in compliance with the License. 7*38e8c45fSAndroid Build Coastguard Worker ** You may obtain a copy of the License at 8*38e8c45fSAndroid Build Coastguard Worker ** 9*38e8c45fSAndroid Build Coastguard Worker ** http://www.apache.org/licenses/LICENSE-2.0 10*38e8c45fSAndroid Build Coastguard Worker ** 11*38e8c45fSAndroid Build Coastguard Worker ** Unless required by applicable law or agreed to in writing, software 12*38e8c45fSAndroid Build Coastguard Worker ** distributed under the License is distributed on an "AS IS" BASIS, 13*38e8c45fSAndroid Build Coastguard Worker ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*38e8c45fSAndroid Build Coastguard Worker ** See the License for the specific language governing permissions and 15*38e8c45fSAndroid Build Coastguard Worker ** limitations under the License. 16*38e8c45fSAndroid Build Coastguard Worker */ 17*38e8c45fSAndroid Build Coastguard Worker 18*38e8c45fSAndroid Build Coastguard Worker #ifndef COMMANDS_H_ 19*38e8c45fSAndroid Build Coastguard Worker #define COMMANDS_H_ 20*38e8c45fSAndroid Build Coastguard Worker 21*38e8c45fSAndroid Build Coastguard Worker #include <inttypes.h> 22*38e8c45fSAndroid Build Coastguard Worker #include <sys/stat.h> 23*38e8c45fSAndroid Build Coastguard Worker #include <unistd.h> 24*38e8c45fSAndroid Build Coastguard Worker 25*38e8c45fSAndroid Build Coastguard Worker #include <shared_mutex> 26*38e8c45fSAndroid Build Coastguard Worker #include <unordered_map> 27*38e8c45fSAndroid Build Coastguard Worker #include <vector> 28*38e8c45fSAndroid Build Coastguard Worker 29*38e8c45fSAndroid Build Coastguard Worker #include <android-base/macros.h> 30*38e8c45fSAndroid Build Coastguard Worker #include <binder/BinderService.h> 31*38e8c45fSAndroid Build Coastguard Worker #include <cutils/multiuser.h> 32*38e8c45fSAndroid Build Coastguard Worker 33*38e8c45fSAndroid Build Coastguard Worker #include "android/os/BnInstalld.h" 34*38e8c45fSAndroid Build Coastguard Worker #include "installd_constants.h" 35*38e8c45fSAndroid Build Coastguard Worker 36*38e8c45fSAndroid Build Coastguard Worker namespace android { 37*38e8c45fSAndroid Build Coastguard Worker namespace installd { 38*38e8c45fSAndroid Build Coastguard Worker 39*38e8c45fSAndroid Build Coastguard Worker using IFsveritySetupAuthToken = android::os::IInstalld::IFsveritySetupAuthToken; 40*38e8c45fSAndroid Build Coastguard Worker 41*38e8c45fSAndroid Build Coastguard Worker class InstalldNativeService : public BinderService<InstalldNativeService>, public os::BnInstalld { 42*38e8c45fSAndroid Build Coastguard Worker public: 43*38e8c45fSAndroid Build Coastguard Worker class FsveritySetupAuthToken : public os::IInstalld::BnFsveritySetupAuthToken { 44*38e8c45fSAndroid Build Coastguard Worker public: FsveritySetupAuthToken()45*38e8c45fSAndroid Build Coastguard Worker FsveritySetupAuthToken() : mStatFromAuthFd() {} 46*38e8c45fSAndroid Build Coastguard Worker 47*38e8c45fSAndroid Build Coastguard Worker binder::Status authenticate(const android::os::ParcelFileDescriptor& authFd, int32_t uid); 48*38e8c45fSAndroid Build Coastguard Worker bool isSameStat(const struct stat& st) const; 49*38e8c45fSAndroid Build Coastguard Worker 50*38e8c45fSAndroid Build Coastguard Worker private: 51*38e8c45fSAndroid Build Coastguard Worker // Not copyable or movable 52*38e8c45fSAndroid Build Coastguard Worker FsveritySetupAuthToken(const FsveritySetupAuthToken&) = delete; 53*38e8c45fSAndroid Build Coastguard Worker FsveritySetupAuthToken& operator=(const FsveritySetupAuthToken&) = delete; 54*38e8c45fSAndroid Build Coastguard Worker 55*38e8c45fSAndroid Build Coastguard Worker struct stat mStatFromAuthFd; 56*38e8c45fSAndroid Build Coastguard Worker }; 57*38e8c45fSAndroid Build Coastguard Worker 58*38e8c45fSAndroid Build Coastguard Worker static status_t start(); getServiceName()59*38e8c45fSAndroid Build Coastguard Worker static char const* getServiceName() { return "installd"; } 60*38e8c45fSAndroid Build Coastguard Worker virtual status_t dump(int fd, const Vector<String16> &args) override; 61*38e8c45fSAndroid Build Coastguard Worker 62*38e8c45fSAndroid Build Coastguard Worker binder::Status createUserData(const std::optional<std::string>& uuid, int32_t userId, 63*38e8c45fSAndroid Build Coastguard Worker int32_t userSerial, int32_t flags); 64*38e8c45fSAndroid Build Coastguard Worker binder::Status destroyUserData(const std::optional<std::string>& uuid, int32_t userId, 65*38e8c45fSAndroid Build Coastguard Worker int32_t flags); 66*38e8c45fSAndroid Build Coastguard Worker 67*38e8c45fSAndroid Build Coastguard Worker binder::Status createAppData(const std::optional<std::string>& uuid, 68*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, int32_t flags, 69*38e8c45fSAndroid Build Coastguard Worker int32_t appId, int32_t previousAppId, const std::string& seInfo, 70*38e8c45fSAndroid Build Coastguard Worker int32_t targetSdkVersion, int64_t* ceDataInode, 71*38e8c45fSAndroid Build Coastguard Worker int64_t* deDataInode); 72*38e8c45fSAndroid Build Coastguard Worker 73*38e8c45fSAndroid Build Coastguard Worker binder::Status createAppData( 74*38e8c45fSAndroid Build Coastguard Worker const android::os::CreateAppDataArgs& args, 75*38e8c45fSAndroid Build Coastguard Worker android::os::CreateAppDataResult* _aidl_return); 76*38e8c45fSAndroid Build Coastguard Worker binder::Status createAppDataBatched( 77*38e8c45fSAndroid Build Coastguard Worker const std::vector<android::os::CreateAppDataArgs>& args, 78*38e8c45fSAndroid Build Coastguard Worker std::vector<android::os::CreateAppDataResult>* _aidl_return); 79*38e8c45fSAndroid Build Coastguard Worker 80*38e8c45fSAndroid Build Coastguard Worker binder::Status reconcileSdkData(const android::os::ReconcileSdkDataArgs& args); 81*38e8c45fSAndroid Build Coastguard Worker 82*38e8c45fSAndroid Build Coastguard Worker binder::Status restoreconAppData(const std::optional<std::string>& uuid, 83*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, int32_t flags, int32_t appId, 84*38e8c45fSAndroid Build Coastguard Worker const std::string& seInfo); 85*38e8c45fSAndroid Build Coastguard Worker 86*38e8c45fSAndroid Build Coastguard Worker binder::Status migrateAppData(const std::optional<std::string>& uuid, 87*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, int32_t flags); 88*38e8c45fSAndroid Build Coastguard Worker binder::Status clearAppData(const std::optional<std::string>& uuid, 89*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, int32_t flags, int64_t ceDataInode); 90*38e8c45fSAndroid Build Coastguard Worker binder::Status destroyAppData(const std::optional<std::string>& uuid, 91*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, int32_t flags, int64_t ceDataInode); 92*38e8c45fSAndroid Build Coastguard Worker 93*38e8c45fSAndroid Build Coastguard Worker binder::Status fixupAppData(const std::optional<std::string>& uuid, int32_t flags); 94*38e8c45fSAndroid Build Coastguard Worker 95*38e8c45fSAndroid Build Coastguard Worker binder::Status snapshotAppData(const std::optional<std::string>& volumeUuid, 96*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, const int32_t user, const int32_t snapshotId, 97*38e8c45fSAndroid Build Coastguard Worker int32_t storageFlags, int64_t* _aidl_return); 98*38e8c45fSAndroid Build Coastguard Worker binder::Status restoreAppDataSnapshot(const std::optional<std::string>& volumeUuid, 99*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, const int32_t appId, const std::string& seInfo, 100*38e8c45fSAndroid Build Coastguard Worker const int32_t user, const int32_t snapshotId, int32_t storageFlags); 101*38e8c45fSAndroid Build Coastguard Worker binder::Status destroyAppDataSnapshot(const std::optional<std::string> &volumeUuid, 102*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, const int32_t user, const int64_t ceSnapshotInode, 103*38e8c45fSAndroid Build Coastguard Worker const int32_t snapshotId, int32_t storageFlags); 104*38e8c45fSAndroid Build Coastguard Worker binder::Status destroyCeSnapshotsNotSpecified(const std::optional<std::string> &volumeUuid, 105*38e8c45fSAndroid Build Coastguard Worker const int32_t user, const std::vector<int32_t>& retainSnapshotIds); 106*38e8c45fSAndroid Build Coastguard Worker 107*38e8c45fSAndroid Build Coastguard Worker binder::Status getAppSize(const std::optional<std::string>& uuid, 108*38e8c45fSAndroid Build Coastguard Worker const std::vector<std::string>& packageNames, int32_t userId, int32_t flags, 109*38e8c45fSAndroid Build Coastguard Worker int32_t appId, const std::vector<int64_t>& ceDataInodes, 110*38e8c45fSAndroid Build Coastguard Worker const std::vector<std::string>& codePaths, std::vector<int64_t>* _aidl_return); 111*38e8c45fSAndroid Build Coastguard Worker binder::Status getUserSize(const std::optional<std::string>& uuid, 112*38e8c45fSAndroid Build Coastguard Worker int32_t userId, int32_t flags, const std::vector<int32_t>& appIds, 113*38e8c45fSAndroid Build Coastguard Worker std::vector<int64_t>* _aidl_return); 114*38e8c45fSAndroid Build Coastguard Worker binder::Status getExternalSize(const std::optional<std::string>& uuid, 115*38e8c45fSAndroid Build Coastguard Worker int32_t userId, int32_t flags, const std::vector<int32_t>& appIds, 116*38e8c45fSAndroid Build Coastguard Worker std::vector<int64_t>* _aidl_return); 117*38e8c45fSAndroid Build Coastguard Worker 118*38e8c45fSAndroid Build Coastguard Worker binder::Status getAppCrates(const std::optional<std::string>& uuid, 119*38e8c45fSAndroid Build Coastguard Worker const std::vector<std::string>& packageNames, 120*38e8c45fSAndroid Build Coastguard Worker int32_t userId, 121*38e8c45fSAndroid Build Coastguard Worker std::optional<std::vector<std::optional<android::os::storage::CrateMetadata>>>* 122*38e8c45fSAndroid Build Coastguard Worker _aidl_return); 123*38e8c45fSAndroid Build Coastguard Worker binder::Status getUserCrates( 124*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& uuid, int32_t userId, 125*38e8c45fSAndroid Build Coastguard Worker std::optional<std::vector<std::optional<android::os::storage::CrateMetadata>>>* 126*38e8c45fSAndroid Build Coastguard Worker _aidl_return); 127*38e8c45fSAndroid Build Coastguard Worker 128*38e8c45fSAndroid Build Coastguard Worker binder::Status setAppQuota(const std::optional<std::string>& uuid, 129*38e8c45fSAndroid Build Coastguard Worker int32_t userId, int32_t appId, int64_t cacheQuota); 130*38e8c45fSAndroid Build Coastguard Worker 131*38e8c45fSAndroid Build Coastguard Worker binder::Status moveCompleteApp(const std::optional<std::string>& fromUuid, 132*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& toUuid, const std::string& packageName, 133*38e8c45fSAndroid Build Coastguard Worker int32_t appId, const std::string& seInfo, 134*38e8c45fSAndroid Build Coastguard Worker int32_t targetSdkVersion, const std::string& fromCodePath); 135*38e8c45fSAndroid Build Coastguard Worker 136*38e8c45fSAndroid Build Coastguard Worker binder::Status dexopt(const std::string& apkPath, int32_t uid, const std::string& packageName, 137*38e8c45fSAndroid Build Coastguard Worker const std::string& instructionSet, int32_t dexoptNeeded, 138*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& outputPath, int32_t dexFlags, 139*38e8c45fSAndroid Build Coastguard Worker const std::string& compilerFilter, const std::optional<std::string>& uuid, 140*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& classLoaderContext, 141*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& seInfo, bool downgrade, 142*38e8c45fSAndroid Build Coastguard Worker int32_t targetSdkVersion, const std::optional<std::string>& profileName, 143*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& dexMetadataPath, 144*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& compilationReason, bool* aidl_return); 145*38e8c45fSAndroid Build Coastguard Worker 146*38e8c45fSAndroid Build Coastguard Worker binder::Status controlDexOptBlocking(bool block); 147*38e8c45fSAndroid Build Coastguard Worker 148*38e8c45fSAndroid Build Coastguard Worker binder::Status rmdex(const std::string& codePath, const std::string& instructionSet); 149*38e8c45fSAndroid Build Coastguard Worker 150*38e8c45fSAndroid Build Coastguard Worker binder::Status mergeProfiles(int32_t uid, const std::string& packageName, 151*38e8c45fSAndroid Build Coastguard Worker const std::string& profileName, int* _aidl_return); 152*38e8c45fSAndroid Build Coastguard Worker binder::Status dumpProfiles(int32_t uid, const std::string& packageName, 153*38e8c45fSAndroid Build Coastguard Worker const std::string& profileName, const std::string& codePath, 154*38e8c45fSAndroid Build Coastguard Worker bool dumpClassesAndMethods, bool* _aidl_return); 155*38e8c45fSAndroid Build Coastguard Worker binder::Status copySystemProfile(const std::string& systemProfile, 156*38e8c45fSAndroid Build Coastguard Worker int32_t uid, const std::string& packageName, const std::string& profileName, 157*38e8c45fSAndroid Build Coastguard Worker bool* _aidl_return); 158*38e8c45fSAndroid Build Coastguard Worker binder::Status clearAppProfiles(const std::string& packageName, const std::string& profileName); 159*38e8c45fSAndroid Build Coastguard Worker binder::Status destroyAppProfiles(const std::string& packageName); 160*38e8c45fSAndroid Build Coastguard Worker binder::Status deleteReferenceProfile(const std::string& packageName, 161*38e8c45fSAndroid Build Coastguard Worker const std::string& profileName); 162*38e8c45fSAndroid Build Coastguard Worker 163*38e8c45fSAndroid Build Coastguard Worker binder::Status createProfileSnapshot(int32_t appId, const std::string& packageName, 164*38e8c45fSAndroid Build Coastguard Worker const std::string& profileName, const std::string& classpath, bool* _aidl_return); 165*38e8c45fSAndroid Build Coastguard Worker binder::Status destroyProfileSnapshot(const std::string& packageName, 166*38e8c45fSAndroid Build Coastguard Worker const std::string& profileName); 167*38e8c45fSAndroid Build Coastguard Worker 168*38e8c45fSAndroid Build Coastguard Worker binder::Status rmPackageDir(const std::string& packageName, const std::string& packageDir); 169*38e8c45fSAndroid Build Coastguard Worker binder::Status freeCache(const std::optional<std::string>& uuid, int64_t targetFreeBytes, 170*38e8c45fSAndroid Build Coastguard Worker int32_t flags); 171*38e8c45fSAndroid Build Coastguard Worker binder::Status linkNativeLibraryDirectory(const std::optional<std::string>& uuid, 172*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, const std::string& nativeLibPath32, int32_t userId); 173*38e8c45fSAndroid Build Coastguard Worker binder::Status createOatDir(const std::string& packageName, const std::string& oatDir, 174*38e8c45fSAndroid Build Coastguard Worker const std::string& instructionSet); 175*38e8c45fSAndroid Build Coastguard Worker binder::Status linkFile(const std::string& packageName, const std::string& relativePath, 176*38e8c45fSAndroid Build Coastguard Worker const std::string& fromBase, const std::string& toBase); 177*38e8c45fSAndroid Build Coastguard Worker binder::Status moveAb(const std::string& packageName, const std::string& apkPath, 178*38e8c45fSAndroid Build Coastguard Worker const std::string& instructionSet, const std::string& outputPath); 179*38e8c45fSAndroid Build Coastguard Worker binder::Status deleteOdex(const std::string& packageName, const std::string& apkPath, 180*38e8c45fSAndroid Build Coastguard Worker const std::string& instructionSet, 181*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& outputPath, int64_t* _aidl_return); 182*38e8c45fSAndroid Build Coastguard Worker binder::Status reconcileSecondaryDexFile(const std::string& dexPath, 183*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t uid, const std::vector<std::string>& isa, 184*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& volumeUuid, int32_t storage_flag, bool* _aidl_return); 185*38e8c45fSAndroid Build Coastguard Worker binder::Status hashSecondaryDexFile(const std::string& dexPath, 186*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t uid, const std::optional<std::string>& volumeUuid, 187*38e8c45fSAndroid Build Coastguard Worker int32_t storageFlag, std::vector<uint8_t>* _aidl_return); 188*38e8c45fSAndroid Build Coastguard Worker 189*38e8c45fSAndroid Build Coastguard Worker binder::Status invalidateMounts(); 190*38e8c45fSAndroid Build Coastguard Worker binder::Status setFirstBoot(); 191*38e8c45fSAndroid Build Coastguard Worker binder::Status isQuotaSupported(const std::optional<std::string>& volumeUuid, 192*38e8c45fSAndroid Build Coastguard Worker bool* _aidl_return); 193*38e8c45fSAndroid Build Coastguard Worker binder::Status tryMountDataMirror(const std::optional<std::string>& volumeUuid); 194*38e8c45fSAndroid Build Coastguard Worker binder::Status onPrivateVolumeRemoved(const std::optional<std::string>& volumeUuid); 195*38e8c45fSAndroid Build Coastguard Worker 196*38e8c45fSAndroid Build Coastguard Worker binder::Status prepareAppProfile(const std::string& packageName, 197*38e8c45fSAndroid Build Coastguard Worker int32_t userId, int32_t appId, const std::string& profileName, 198*38e8c45fSAndroid Build Coastguard Worker const std::string& codePath, const std::optional<std::string>& dexMetadata, 199*38e8c45fSAndroid Build Coastguard Worker bool* _aidl_return); 200*38e8c45fSAndroid Build Coastguard Worker 201*38e8c45fSAndroid Build Coastguard Worker binder::Status migrateLegacyObbData(); 202*38e8c45fSAndroid Build Coastguard Worker 203*38e8c45fSAndroid Build Coastguard Worker binder::Status cleanupInvalidPackageDirs(const std::optional<std::string>& uuid, int32_t userId, 204*38e8c45fSAndroid Build Coastguard Worker int32_t flags); 205*38e8c45fSAndroid Build Coastguard Worker 206*38e8c45fSAndroid Build Coastguard Worker binder::Status getOdexVisibility(const std::string& packageName, const std::string& apkPath, 207*38e8c45fSAndroid Build Coastguard Worker const std::string& instructionSet, 208*38e8c45fSAndroid Build Coastguard Worker const std::optional<std::string>& outputPath, 209*38e8c45fSAndroid Build Coastguard Worker int32_t* _aidl_return); 210*38e8c45fSAndroid Build Coastguard Worker 211*38e8c45fSAndroid Build Coastguard Worker binder::Status createFsveritySetupAuthToken(const android::os::ParcelFileDescriptor& authFd, 212*38e8c45fSAndroid Build Coastguard Worker int32_t uid, 213*38e8c45fSAndroid Build Coastguard Worker android::sp<IFsveritySetupAuthToken>* _aidl_return); 214*38e8c45fSAndroid Build Coastguard Worker binder::Status enableFsverity(const android::sp<IFsveritySetupAuthToken>& authToken, 215*38e8c45fSAndroid Build Coastguard Worker const std::string& filePath, const std::string& packageName, 216*38e8c45fSAndroid Build Coastguard Worker int32_t* _aidl_return); 217*38e8c45fSAndroid Build Coastguard Worker 218*38e8c45fSAndroid Build Coastguard Worker private: 219*38e8c45fSAndroid Build Coastguard Worker std::recursive_mutex mLock; 220*38e8c45fSAndroid Build Coastguard Worker std::unordered_map<userid_t, std::weak_ptr<std::shared_mutex>> mUserIdLock; 221*38e8c45fSAndroid Build Coastguard Worker std::unordered_map<std::string, std::weak_ptr<std::recursive_mutex>> mPackageNameLock; 222*38e8c45fSAndroid Build Coastguard Worker 223*38e8c45fSAndroid Build Coastguard Worker std::recursive_mutex mMountsLock; 224*38e8c45fSAndroid Build Coastguard Worker std::recursive_mutex mQuotasLock; 225*38e8c45fSAndroid Build Coastguard Worker 226*38e8c45fSAndroid Build Coastguard Worker /* Map of all storage mounts from source to target */ 227*38e8c45fSAndroid Build Coastguard Worker std::unordered_map<std::string, std::string> mStorageMounts; 228*38e8c45fSAndroid Build Coastguard Worker 229*38e8c45fSAndroid Build Coastguard Worker /* Map from UID to cache quota size */ 230*38e8c45fSAndroid Build Coastguard Worker std::unordered_map<uid_t, int64_t> mCacheQuotas; 231*38e8c45fSAndroid Build Coastguard Worker 232*38e8c45fSAndroid Build Coastguard Worker std::string findDataMediaPath(const std::optional<std::string>& uuid, userid_t userid); 233*38e8c45fSAndroid Build Coastguard Worker 234*38e8c45fSAndroid Build Coastguard Worker binder::Status createAppDataLocked(const std::optional<std::string>& uuid, 235*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, 236*38e8c45fSAndroid Build Coastguard Worker int32_t flags, int32_t appId, int32_t previousAppId, 237*38e8c45fSAndroid Build Coastguard Worker const std::string& seInfo, int32_t targetSdkVersion, 238*38e8c45fSAndroid Build Coastguard Worker int64_t* ceDataInode, int64_t* deDataInode); 239*38e8c45fSAndroid Build Coastguard Worker binder::Status restoreconAppDataLocked(const std::optional<std::string>& uuid, 240*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, 241*38e8c45fSAndroid Build Coastguard Worker int32_t flags, int32_t appId, const std::string& seInfo); 242*38e8c45fSAndroid Build Coastguard Worker 243*38e8c45fSAndroid Build Coastguard Worker binder::Status createSdkSandboxDataPackageDirectory(const std::optional<std::string>& uuid, 244*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, 245*38e8c45fSAndroid Build Coastguard Worker int32_t userId, int32_t appId, 246*38e8c45fSAndroid Build Coastguard Worker int32_t flags); 247*38e8c45fSAndroid Build Coastguard Worker binder::Status clearSdkSandboxDataPackageDirectory(const std::optional<std::string>& uuid, 248*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, 249*38e8c45fSAndroid Build Coastguard Worker int32_t userId, int32_t flags); 250*38e8c45fSAndroid Build Coastguard Worker binder::Status destroySdkSandboxDataPackageDirectory(const std::optional<std::string>& uuid, 251*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, 252*38e8c45fSAndroid Build Coastguard Worker int32_t userId, int32_t flags); 253*38e8c45fSAndroid Build Coastguard Worker binder::Status reconcileSdkData(const std::optional<std::string>& uuid, 254*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, 255*38e8c45fSAndroid Build Coastguard Worker const std::vector<std::string>& subDirNames, int32_t userId, 256*38e8c45fSAndroid Build Coastguard Worker int32_t appId, int32_t previousAppId, const std::string& seInfo, 257*38e8c45fSAndroid Build Coastguard Worker int flags); 258*38e8c45fSAndroid Build Coastguard Worker binder::Status restoreconSdkDataLocked(const std::optional<std::string>& uuid, 259*38e8c45fSAndroid Build Coastguard Worker const std::string& packageName, int32_t userId, 260*38e8c45fSAndroid Build Coastguard Worker int32_t flags, int32_t appId, const std::string& seInfo); 261*38e8c45fSAndroid Build Coastguard Worker }; 262*38e8c45fSAndroid Build Coastguard Worker 263*38e8c45fSAndroid Build Coastguard Worker } // namespace installd 264*38e8c45fSAndroid Build Coastguard Worker } // namespace android 265*38e8c45fSAndroid Build Coastguard Worker 266*38e8c45fSAndroid Build Coastguard Worker #endif // COMMANDS_H_ 267