Loading services/core/java/com/android/server/pm/PackageManagerService.java +23 −9 Original line number Diff line number Diff line Loading @@ -186,6 +186,7 @@ import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.content.pm.SELinuxUtil; import android.content.pm.ServiceInfo; import android.content.pm.SharedLibraryInfo; import android.content.pm.Signature; Loading Loading @@ -10447,6 +10448,14 @@ public class PackageManagerService extends IPackageManager.Stub reportSettingsProblem(Log.WARN, msg); } final int userId = (user == null ? UserHandle.USER_SYSTEM : user.getIdentifier()); // for existing packages, change the install state; but, only if it's explicitly specified if (!createNewPackage) { final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0; final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0; setInstantAppForUser(pkgSetting, userId, instantApp, fullApp); } if (disabledPkgSetting != null) { pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; } Loading @@ -10469,6 +10478,8 @@ public class PackageManagerService extends IPackageManager.Stub pkg.applicationInfo.seInfo = SELinuxMMAC.getSeInfo(pkg, isPrivileged, pkg.applicationInfo.targetSandboxVersion, targetSdkVersion); pkg.applicationInfo.seInfoUser = SELinuxUtil.assignSeinfoUser(pkgSetting.readUserState( userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId)); pkg.mExtras = pkgSetting; pkg.applicationInfo.processName = fixProcessName( Loading Loading @@ -13943,7 +13954,7 @@ public class PackageManagerService extends IPackageManager.Stub return PackageManager.INSTALL_SUCCEEDED; } void setInstantAppForUser(PackageSetting pkgSetting, int userId, static void setInstantAppForUser(PackageSetting pkgSetting, int userId, boolean instantApp, boolean fullApp) { // no state specified; do nothing if (!instantApp && !fullApp) { Loading Loading @@ -16452,10 +16463,6 @@ public class PackageManagerService extends IPackageManager.Stub childPs.oldCodePaths = ps.oldCodePaths; } } // set instant app status, but, only if it's explicitly specified final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0; final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0; setInstantAppForUser(ps, user.getIdentifier(), instantApp, fullApp); prepareAppDataAfterInstallLIF(newPackage); addedPkg = true; mDexManager.notifyPackageUpdated(newPackage.packageName, Loading Loading @@ -22422,17 +22429,25 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); + Integer.toHexString(flags)); } final PackageSetting ps; synchronized (mPackages) { ps = mSettings.mPackages.get(pkg.packageName); } final String volumeUuid = pkg.volumeUuid; final String packageName = pkg.packageName; final ApplicationInfo app = pkg.applicationInfo; final ApplicationInfo app = (ps == null) ? pkg.applicationInfo : PackageParser.generateApplicationInfo(pkg, 0, ps.readUserState(userId), userId); final int appId = UserHandle.getAppId(app.uid); Preconditions.checkNotNull(app.seInfo); final String seInfo = app.seInfo + (app.seInfoUser != null ? app.seInfoUser : ""); long ceDataInode = -1; try { ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags, appId, app.seInfo, app.targetSdkVersion); appId, seInfo, app.targetSdkVersion); } catch (InstallerException e) { if (app.isSystemApp()) { logCriticalInfo(Log.ERROR, "Failed to create app data for " + packageName Loading @@ -22440,7 +22455,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); destroyAppDataLeafLIF(pkg, userId, flags); try { ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags, appId, app.seInfo, app.targetSdkVersion); appId, seInfo, app.targetSdkVersion); logCriticalInfo(Log.DEBUG, "Recovery succeeded!"); } catch (InstallerException e2) { logCriticalInfo(Log.DEBUG, "Recovery failed!"); Loading @@ -22463,7 +22478,6 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); if ((flags & StorageManager.FLAG_STORAGE_CE) != 0 && ceDataInode != -1) { // TODO: mark this structure as dirty so we persist it! synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps != null) { ps.setCeDataInode(ceDataInode, userId); } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +23 −9 Original line number Diff line number Diff line Loading @@ -186,6 +186,7 @@ import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.content.pm.SELinuxUtil; import android.content.pm.ServiceInfo; import android.content.pm.SharedLibraryInfo; import android.content.pm.Signature; Loading Loading @@ -10447,6 +10448,14 @@ public class PackageManagerService extends IPackageManager.Stub reportSettingsProblem(Log.WARN, msg); } final int userId = (user == null ? UserHandle.USER_SYSTEM : user.getIdentifier()); // for existing packages, change the install state; but, only if it's explicitly specified if (!createNewPackage) { final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0; final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0; setInstantAppForUser(pkgSetting, userId, instantApp, fullApp); } if (disabledPkgSetting != null) { pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; } Loading @@ -10469,6 +10478,8 @@ public class PackageManagerService extends IPackageManager.Stub pkg.applicationInfo.seInfo = SELinuxMMAC.getSeInfo(pkg, isPrivileged, pkg.applicationInfo.targetSandboxVersion, targetSdkVersion); pkg.applicationInfo.seInfoUser = SELinuxUtil.assignSeinfoUser(pkgSetting.readUserState( userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId)); pkg.mExtras = pkgSetting; pkg.applicationInfo.processName = fixProcessName( Loading Loading @@ -13943,7 +13954,7 @@ public class PackageManagerService extends IPackageManager.Stub return PackageManager.INSTALL_SUCCEEDED; } void setInstantAppForUser(PackageSetting pkgSetting, int userId, static void setInstantAppForUser(PackageSetting pkgSetting, int userId, boolean instantApp, boolean fullApp) { // no state specified; do nothing if (!instantApp && !fullApp) { Loading Loading @@ -16452,10 +16463,6 @@ public class PackageManagerService extends IPackageManager.Stub childPs.oldCodePaths = ps.oldCodePaths; } } // set instant app status, but, only if it's explicitly specified final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0; final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0; setInstantAppForUser(ps, user.getIdentifier(), instantApp, fullApp); prepareAppDataAfterInstallLIF(newPackage); addedPkg = true; mDexManager.notifyPackageUpdated(newPackage.packageName, Loading Loading @@ -22422,17 +22429,25 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); + Integer.toHexString(flags)); } final PackageSetting ps; synchronized (mPackages) { ps = mSettings.mPackages.get(pkg.packageName); } final String volumeUuid = pkg.volumeUuid; final String packageName = pkg.packageName; final ApplicationInfo app = pkg.applicationInfo; final ApplicationInfo app = (ps == null) ? pkg.applicationInfo : PackageParser.generateApplicationInfo(pkg, 0, ps.readUserState(userId), userId); final int appId = UserHandle.getAppId(app.uid); Preconditions.checkNotNull(app.seInfo); final String seInfo = app.seInfo + (app.seInfoUser != null ? app.seInfoUser : ""); long ceDataInode = -1; try { ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags, appId, app.seInfo, app.targetSdkVersion); appId, seInfo, app.targetSdkVersion); } catch (InstallerException e) { if (app.isSystemApp()) { logCriticalInfo(Log.ERROR, "Failed to create app data for " + packageName Loading @@ -22440,7 +22455,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); destroyAppDataLeafLIF(pkg, userId, flags); try { ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags, appId, app.seInfo, app.targetSdkVersion); appId, seInfo, app.targetSdkVersion); logCriticalInfo(Log.DEBUG, "Recovery succeeded!"); } catch (InstallerException e2) { logCriticalInfo(Log.DEBUG, "Recovery failed!"); Loading @@ -22463,7 +22478,6 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); if ((flags & StorageManager.FLAG_STORAGE_CE) != 0 && ceDataInode != -1) { // TODO: mark this structure as dirty so we persist it! synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps != null) { ps.setCeDataInode(ceDataInode, userId); }