@@ -1064,7 +1064,7 @@ public PackageManagerService(Context context, boolean factoryTest, boolean onlyC
10641064 mInstaller .moveFiles ();
10651065
10661066 // Prune any system packages that no longer exist.
1067- final List <String > possiblyDeletedSystemApps = new ArrayList <String >();
1067+ final List <String > possiblyDeletedUpdatedSystemApps = new ArrayList <String >();
10681068 if (!mOnlyCore ) {
10691069 Iterator <PackageSetting > psit = mSettings .mPackages .values ().iterator ();
10701070 while (psit .hasNext ()) {
@@ -1104,7 +1104,10 @@ public PackageManagerService(Context context, boolean factoryTest, boolean onlyC
11041104 mInstaller .remove (ps .name , 0 );
11051105 sUserManager .removePackageForAllUsers (ps .name );
11061106 } else {
1107- possiblyDeletedSystemApps .add (ps .name );
1107+ final PackageSetting disabledPs = mSettings .getDisabledSystemPkgLPr (ps .name );
1108+ if (disabledPs .codePath == null || !disabledPs .codePath .exists ()) {
1109+ possiblyDeletedUpdatedSystemApps .add (ps .name );
1110+ }
11081111 }
11091112 }
11101113 }
@@ -1135,18 +1138,33 @@ public PackageManagerService(Context context, boolean factoryTest, boolean onlyC
11351138 scanMode , 0 );
11361139
11371140 /**
1138- * Remove disable package settings for any system apps
1139- * that were removed via an OTA.
1141+ * Remove disable package settings for any updated system
1142+ * apps that were removed via an OTA. If they're not a
1143+ * previously-updated app, remove them completely.
1144+ * Otherwise, just revoke their system-level permissions.
11401145 */
1141- for (String deletedAppName : possiblyDeletedSystemApps ) {
1146+ for (String deletedAppName : possiblyDeletedUpdatedSystemApps ) {
11421147 PackageParser .Package deletedPkg = mPackages .get (deletedAppName );
1143- if (deletedPkg != null ) {
1144- mSettings .removeDisabledSystemPackageLPw (deletedAppName );
1148+ mSettings .removeDisabledSystemPackageLPw (deletedAppName );
1149+
1150+ String msg ;
1151+ if (deletedPkg == null ) {
1152+ msg = "Updated system package " + deletedAppName
1153+ + " no longer exists; wiping its data" ;
1154+
1155+ mInstaller .remove (deletedAppName , 0 );
1156+ sUserManager .removePackageForAllUsers (deletedAppName );
1157+ } else {
1158+ msg = "Updated system app + " + deletedAppName
1159+ + " no longer present; removing system privileges for "
1160+ + deletedAppName ;
1161+
11451162 deletedPkg .applicationInfo .flags &= ~ApplicationInfo .FLAG_SYSTEM ;
11461163
11471164 PackageSetting deletedPs = mSettings .mPackages .get (deletedAppName );
11481165 deletedPs .pkgFlags &= ~ApplicationInfo .FLAG_SYSTEM ;
11491166 }
1167+ reportSettingsProblem (Log .WARN , msg );
11501168 }
11511169 } else {
11521170 mAppInstallObserver = null ;
0 commit comments