Loading services/java/com/android/server/PackageManagerService.java +30 −16 Original line number Diff line number Diff line Loading @@ -540,6 +540,7 @@ class PackageManagerService extends IPackageManager.Stub { if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1); PostInstallData data = mRunningInstalls.get(msg.arg1); mRunningInstalls.delete(msg.arg1); boolean deleteOld = false; if (data != null) { InstallArgs args = data.args; Loading @@ -563,13 +564,17 @@ class PackageManagerService extends IPackageManager.Stub { } if (res.removedInfo.args != null) { // Remove the replaced package's older resources safely now deleteOld = true; } } // Force a gc to clear up things Runtime.getRuntime().gc(); // We delete after a gc for applications on sdcard. if (deleteOld) { synchronized (mInstallLock) { res.removedInfo.args.doPostDeleteLI(true); } } } Runtime.getRuntime().gc(); if (args.observer != null) { try { args.observer.packageInstalled(res.name, res.returnCode); Loading Loading @@ -1350,6 +1355,10 @@ class PackageManagerService extends IPackageManager.Stub { if(ps.pkg == null) { ps.pkg = new PackageParser.Package(packageName); ps.pkg.applicationInfo.packageName = packageName; ps.pkg.applicationInfo.flags = ps.pkgFlags; ps.pkg.applicationInfo.publicSourceDir = ps.resourcePathString; ps.pkg.applicationInfo.sourceDir = ps.codePathString; ps.pkg.applicationInfo.dataDir = getDataPathForPackage(ps.pkg).getPath(); } return generatePackageInfo(ps.pkg, flags); } Loading Loading @@ -2568,6 +2577,17 @@ class PackageManagerService extends IPackageManager.Stub { return true; } private File getDataPathForPackage(PackageParser.Package pkg) { boolean useEncryptedFSDir = useEncryptedFilesystemForPackage(pkg); File dataPath; if (useEncryptedFSDir) { dataPath = new File(mSecureAppDataDir, pkg.packageName); } else { dataPath = new File(mAppDataDir, pkg.packageName); } return dataPath; } private PackageParser.Package scanPackageLI(PackageParser.Package pkg, int parseFlags, int scanMode) { File scanFile = new File(pkg.mScanPath); Loading Loading @@ -2932,11 +2952,7 @@ class PackageManagerService extends IPackageManager.Stub { } else { // This is a normal package, need to make its data directory. boolean useEncryptedFSDir = useEncryptedFilesystemForPackage(pkg); if (useEncryptedFSDir) { dataPath = new File(mSecureAppDataDir, pkgName); } else { dataPath = new File(mAppDataDir, pkgName); } dataPath = getDataPathForPackage(pkg); boolean uidError = false; Loading Loading @@ -5159,14 +5175,9 @@ class PackageManagerService extends IPackageManager.Stub { int scanMode, String installerPackageName, PackageInstalledInfo res) { // Remember this for later, in case we need to rollback this install boolean dataDirExists; String pkgName = pkg.packageName; if (useEncryptedFilesystemForPackage(pkg)) { dataDirExists = (new File(mSecureAppDataDir, pkgName)).exists(); } else { dataDirExists = (new File(mAppDataDir, pkgName)).exists(); } boolean dataDirExists = getDataPathForPackage(pkg).exists(); res.name = pkgName; synchronized(mPackages) { if (mPackages.containsKey(pkgName) || mAppDirs.containsKey(pkg.mPath)) { Loading Loading @@ -5741,6 +5752,8 @@ class PackageManagerService extends IPackageManager.Stub { sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras); } } // Force a gc here. Runtime.getRuntime().gc(); // Delete the resources here after sending the broadcast to let // other processes clean up before deleting resources. if (info.args != null) { Loading Loading @@ -7136,7 +7149,8 @@ class PackageManagerService extends IPackageManager.Stub { void setFlags(int pkgFlags) { this.pkgFlags = (pkgFlags & ApplicationInfo.FLAG_SYSTEM) | (pkgFlags & ApplicationInfo.FLAG_FORWARD_LOCK) | (pkgFlags & ApplicationInfo.FLAG_ON_SDCARD); (pkgFlags & ApplicationInfo.FLAG_ON_SDCARD) | (pkgFlags & ApplicationInfo.FLAG_NEVER_ENCRYPT); } } Loading Loading
services/java/com/android/server/PackageManagerService.java +30 −16 Original line number Diff line number Diff line Loading @@ -540,6 +540,7 @@ class PackageManagerService extends IPackageManager.Stub { if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1); PostInstallData data = mRunningInstalls.get(msg.arg1); mRunningInstalls.delete(msg.arg1); boolean deleteOld = false; if (data != null) { InstallArgs args = data.args; Loading @@ -563,13 +564,17 @@ class PackageManagerService extends IPackageManager.Stub { } if (res.removedInfo.args != null) { // Remove the replaced package's older resources safely now deleteOld = true; } } // Force a gc to clear up things Runtime.getRuntime().gc(); // We delete after a gc for applications on sdcard. if (deleteOld) { synchronized (mInstallLock) { res.removedInfo.args.doPostDeleteLI(true); } } } Runtime.getRuntime().gc(); if (args.observer != null) { try { args.observer.packageInstalled(res.name, res.returnCode); Loading Loading @@ -1350,6 +1355,10 @@ class PackageManagerService extends IPackageManager.Stub { if(ps.pkg == null) { ps.pkg = new PackageParser.Package(packageName); ps.pkg.applicationInfo.packageName = packageName; ps.pkg.applicationInfo.flags = ps.pkgFlags; ps.pkg.applicationInfo.publicSourceDir = ps.resourcePathString; ps.pkg.applicationInfo.sourceDir = ps.codePathString; ps.pkg.applicationInfo.dataDir = getDataPathForPackage(ps.pkg).getPath(); } return generatePackageInfo(ps.pkg, flags); } Loading Loading @@ -2568,6 +2577,17 @@ class PackageManagerService extends IPackageManager.Stub { return true; } private File getDataPathForPackage(PackageParser.Package pkg) { boolean useEncryptedFSDir = useEncryptedFilesystemForPackage(pkg); File dataPath; if (useEncryptedFSDir) { dataPath = new File(mSecureAppDataDir, pkg.packageName); } else { dataPath = new File(mAppDataDir, pkg.packageName); } return dataPath; } private PackageParser.Package scanPackageLI(PackageParser.Package pkg, int parseFlags, int scanMode) { File scanFile = new File(pkg.mScanPath); Loading Loading @@ -2932,11 +2952,7 @@ class PackageManagerService extends IPackageManager.Stub { } else { // This is a normal package, need to make its data directory. boolean useEncryptedFSDir = useEncryptedFilesystemForPackage(pkg); if (useEncryptedFSDir) { dataPath = new File(mSecureAppDataDir, pkgName); } else { dataPath = new File(mAppDataDir, pkgName); } dataPath = getDataPathForPackage(pkg); boolean uidError = false; Loading Loading @@ -5159,14 +5175,9 @@ class PackageManagerService extends IPackageManager.Stub { int scanMode, String installerPackageName, PackageInstalledInfo res) { // Remember this for later, in case we need to rollback this install boolean dataDirExists; String pkgName = pkg.packageName; if (useEncryptedFilesystemForPackage(pkg)) { dataDirExists = (new File(mSecureAppDataDir, pkgName)).exists(); } else { dataDirExists = (new File(mAppDataDir, pkgName)).exists(); } boolean dataDirExists = getDataPathForPackage(pkg).exists(); res.name = pkgName; synchronized(mPackages) { if (mPackages.containsKey(pkgName) || mAppDirs.containsKey(pkg.mPath)) { Loading Loading @@ -5741,6 +5752,8 @@ class PackageManagerService extends IPackageManager.Stub { sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras); } } // Force a gc here. Runtime.getRuntime().gc(); // Delete the resources here after sending the broadcast to let // other processes clean up before deleting resources. if (info.args != null) { Loading Loading @@ -7136,7 +7149,8 @@ class PackageManagerService extends IPackageManager.Stub { void setFlags(int pkgFlags) { this.pkgFlags = (pkgFlags & ApplicationInfo.FLAG_SYSTEM) | (pkgFlags & ApplicationInfo.FLAG_FORWARD_LOCK) | (pkgFlags & ApplicationInfo.FLAG_ON_SDCARD); (pkgFlags & ApplicationInfo.FLAG_ON_SDCARD) | (pkgFlags & ApplicationInfo.FLAG_NEVER_ENCRYPT); } } Loading