am d20f2106: am bfc584df: Merge "Use app directory as apkPath for cluster installs" into mnc-dr-dev

* commit 'd20f21065036a50cf0ba8537746f68f713f20f8b':
  Use app directory as apkPath for cluster installs
This commit is contained in:
Fyodor Kupolov
2015-09-16 21:13:31 +00:00
committed by Android Git Automerger
3 changed files with 27 additions and 3 deletions

View File

@@ -4520,6 +4520,17 @@ public class PackageParser {
return applicationInfo.isUpdatedSystemApp();
}
/**
* @hide
*/
public boolean canHaveOatDir() {
// The following app types CANNOT have oat directory
// - non-updated system apps
// - forward-locked apps or apps installed in ASEC containers
return (!isSystemApp() || isUpdatedSystemApp())
&& !isForwardLocked() && !applicationInfo.isExternalAsec();
}
public String toString() {
return "Package{"
+ Integer.toHexString(System.identityHashCode(this))

View File

@@ -217,8 +217,7 @@ final class PackageDexOptimizer {
@Nullable
private String createOatDirIfSupported(PackageParser.Package pkg, String dexInstructionSet)
throws IOException {
if ((pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) || pkg.isForwardLocked()
|| pkg.applicationInfo.isExternalAsec()) {
if (!pkg.canHaveOatDir()) {
return null;
}
File codePath = new File(pkg.codePath);

View File

@@ -13628,7 +13628,21 @@ public class PackageManagerService extends IPackageManager.Stub {
// TODO(multiArch): Extend getSizeInfo to look at *all* instruction sets, not
// just the primary.
String[] dexCodeInstructionSets = getDexCodeInstructionSets(getAppDexInstructionSets(ps));
int res = mInstaller.getSizeInfo(p.volumeUuid, packageName, userHandle, p.baseCodePath,
String apkPath;
File packageDir = new File(p.codePath);
if (packageDir.isDirectory() && p.canHaveOatDir()) {
apkPath = packageDir.getAbsolutePath();
// If libDirRoot is inside a package dir, set it to null to avoid it being counted twice
if (libDirRoot != null && libDirRoot.startsWith(apkPath)) {
libDirRoot = null;
}
} else {
apkPath = p.baseCodePath;
}
int res = mInstaller.getSizeInfo(p.volumeUuid, packageName, userHandle, apkPath,
libDirRoot, publicSrcDir, asecPath, dexCodeInstructionSets, pStats);
if (res < 0) {
return false;