summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalin Juravle <calin@google.com>2014-08-27 14:22:15 +0100
committerCalin Juravle <calin@google.com>2014-08-27 14:49:11 +0100
commite8d2ffd733c0598b99a91ce307b8f6411fcdafaa (patch)
treece9dd8da92008b4a5a115d530ebc9111e5ffe587
parent9b5112c36b5163925cb303c0cd016bf4115c5800 (diff)
downloadbase-e8d2ffd733c0598b99a91ce307b8f6411fcdafaa.tar.gz
Pass vmSafeMode (manifest attribute) to installd.
The flag is used to enforce --interpret-only flag when running dex2oat. Bug: 12457423 (cherry picked from commit 11e08c010a42390803b65eaa698ca0e768aed896) Change-Id: I215339527e998b24e274c8df42a5024839e6a9fa
-rw-r--r--services/java/com/android/server/pm/Installer.java4
-rwxr-xr-xservices/java/com/android/server/pm/PackageManagerService.java6
2 files changed, 7 insertions, 3 deletions
diff --git a/services/java/com/android/server/pm/Installer.java b/services/java/com/android/server/pm/Installer.java
index 0f384b1c372e..4fd9277b155a 100644
--- a/services/java/com/android/server/pm/Installer.java
+++ b/services/java/com/android/server/pm/Installer.java
@@ -240,11 +240,12 @@ public final class Installer {
builder.append(" *"); // No pkgName arg present
builder.append(' ');
builder.append(instructionSet);
+ builder.append(" 0"); // vmSafeMode=false
return execute(builder.toString());
}
public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName,
- String instructionSet) {
+ String instructionSet, boolean vmSafeMode) {
StringBuilder builder = new StringBuilder("dexopt");
builder.append(' ');
builder.append(apkPath);
@@ -255,6 +256,7 @@ public final class Installer {
builder.append(pkgName);
builder.append(' ');
builder.append(instructionSet);
+ builder.append(vmSafeMode ? " 1" : " 0");
return execute(builder.toString());
}
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index cb41d722fbd9..4cbf8456ff65 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -4293,6 +4293,7 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
+ final boolean vmSafeMode = (pkg.applicationInfo.flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0;
boolean performed = false;
if ((pkg.applicationInfo.flags&ApplicationInfo.FLAG_HAS_CODE) != 0) {
String path = pkg.mScanPath;
@@ -4309,10 +4310,11 @@ public class PackageManagerService extends IPackageManager.Stub {
// 2.) we are defering a needed dexopt
// 3.) we are skipping an unneeded dexopt
if (forceDex || (!defer && isDexOptNeededInternal == DexFile.DEXOPT_NEEDED)) {
- Log.i(TAG, "Running dexopt on: " + pkg.applicationInfo.packageName);
+ Log.i(TAG, "Running dexopt on: " + pkg.applicationInfo.packageName
+ + " vmSafeMode=" + vmSafeMode);
final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
int ret = mInstaller.dexopt(path, sharedGid, !isForwardLocked(pkg),
- pkg.packageName, dexCodeInstructionSet);
+ pkg.packageName, dexCodeInstructionSet, vmSafeMode);
// Note that we ran dexopt, since rerunning will
// probably just result in an error again.
pkg.mDexOptNeeded = false;