Loading core/java/com/android/internal/os/InstallerConnection.java +16 −2 Original line number Diff line number Diff line Loading @@ -91,26 +91,40 @@ public class InstallerConnection { } public int dexopt(String apkPath, int uid, boolean isPublic, String instructionSet) { return dexopt(apkPath, uid, isPublic, "*", instructionSet, false); } public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName, String instructionSet, boolean vmSafeMode) { StringBuilder builder = new StringBuilder("dexopt"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(" *"); // No pkgName arg present builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); builder.append(' '); builder.append(vmSafeMode ? " 1" : " 0"); return execute(builder.toString()); } public int patchoat(String apkPath, int uid, boolean isPublic, String instructionSet) { return patchoat(apkPath, uid, isPublic, "*", instructionSet); } public int patchoat(String apkPath, int uid, boolean isPublic, String pkgName, String instructionSet) { StringBuilder builder = new StringBuilder("patchoat"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(" *"); // No pkgName arg present builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); return execute(builder.toString()); Loading services/core/java/com/android/server/pm/Installer.java +3 −23 Original line number Diff line number Diff line Loading @@ -61,17 +61,7 @@ public final class Installer extends SystemService { return -1; } StringBuilder builder = new StringBuilder("patchoat"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); return mInstaller.execute(builder.toString()); return mInstaller.patchoat(apkPath, uid, isPublic, pkgName, instructionSet); } public int patchoat(String apkPath, int uid, boolean isPublic, String instructionSet) { Loading @@ -93,23 +83,13 @@ public final class Installer extends SystemService { } public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName, String instructionSet) { String instructionSet, boolean vmSafeMode) { if (!isValidInstructionSet(instructionSet)) { Slog.e(TAG, "Invalid instruction set: " + instructionSet); return -1; } StringBuilder builder = new StringBuilder("dexopt"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); return mInstaller.execute(builder.toString()); return mInstaller.dexopt(apkPath, uid, isPublic, pkgName, instructionSet, vmSafeMode); } public int idmap(String targetApkPath, String overlayApkPath, int uid) { Loading services/core/java/com/android/server/pm/PackageManagerService.java +5 −2 Original line number Diff line number Diff line Loading @@ -4634,6 +4634,8 @@ public class PackageManagerService extends IPackageManager.Stub { return DEX_OPT_SKIPPED; } final boolean vmSafeMode = (pkg.applicationInfo.flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0; final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly(); boolean performedDexOpt = false; // There are three basic cases here: Loading @@ -4657,10 +4659,11 @@ public class PackageManagerService extends IPackageManager.Stub { pkg.packageName, dexCodeInstructionSet, defer); if (forceDex || (!defer && isDexOptNeeded == DexFile.DEXOPT_NEEDED)) { Log.i(TAG, "Running dexopt on: " + path + " pkg=" + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet); + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + " vmSafeMode=" + vmSafeMode); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); final int ret = mInstaller.dexopt(path, sharedGid, !isForwardLocked(pkg), pkg.packageName, dexCodeInstructionSet); pkg.packageName, dexCodeInstructionSet, vmSafeMode); if (ret < 0) { // Don't bother running dexopt again if we failed, it will probably Loading Loading
core/java/com/android/internal/os/InstallerConnection.java +16 −2 Original line number Diff line number Diff line Loading @@ -91,26 +91,40 @@ public class InstallerConnection { } public int dexopt(String apkPath, int uid, boolean isPublic, String instructionSet) { return dexopt(apkPath, uid, isPublic, "*", instructionSet, false); } public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName, String instructionSet, boolean vmSafeMode) { StringBuilder builder = new StringBuilder("dexopt"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(" *"); // No pkgName arg present builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); builder.append(' '); builder.append(vmSafeMode ? " 1" : " 0"); return execute(builder.toString()); } public int patchoat(String apkPath, int uid, boolean isPublic, String instructionSet) { return patchoat(apkPath, uid, isPublic, "*", instructionSet); } public int patchoat(String apkPath, int uid, boolean isPublic, String pkgName, String instructionSet) { StringBuilder builder = new StringBuilder("patchoat"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(" *"); // No pkgName arg present builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); return execute(builder.toString()); Loading
services/core/java/com/android/server/pm/Installer.java +3 −23 Original line number Diff line number Diff line Loading @@ -61,17 +61,7 @@ public final class Installer extends SystemService { return -1; } StringBuilder builder = new StringBuilder("patchoat"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); return mInstaller.execute(builder.toString()); return mInstaller.patchoat(apkPath, uid, isPublic, pkgName, instructionSet); } public int patchoat(String apkPath, int uid, boolean isPublic, String instructionSet) { Loading @@ -93,23 +83,13 @@ public final class Installer extends SystemService { } public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName, String instructionSet) { String instructionSet, boolean vmSafeMode) { if (!isValidInstructionSet(instructionSet)) { Slog.e(TAG, "Invalid instruction set: " + instructionSet); return -1; } StringBuilder builder = new StringBuilder("dexopt"); builder.append(' '); builder.append(apkPath); builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); builder.append(' '); builder.append(pkgName); builder.append(' '); builder.append(instructionSet); return mInstaller.execute(builder.toString()); return mInstaller.dexopt(apkPath, uid, isPublic, pkgName, instructionSet, vmSafeMode); } public int idmap(String targetApkPath, String overlayApkPath, int uid) { Loading
services/core/java/com/android/server/pm/PackageManagerService.java +5 −2 Original line number Diff line number Diff line Loading @@ -4634,6 +4634,8 @@ public class PackageManagerService extends IPackageManager.Stub { return DEX_OPT_SKIPPED; } final boolean vmSafeMode = (pkg.applicationInfo.flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0; final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly(); boolean performedDexOpt = false; // There are three basic cases here: Loading @@ -4657,10 +4659,11 @@ public class PackageManagerService extends IPackageManager.Stub { pkg.packageName, dexCodeInstructionSet, defer); if (forceDex || (!defer && isDexOptNeeded == DexFile.DEXOPT_NEEDED)) { Log.i(TAG, "Running dexopt on: " + path + " pkg=" + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet); + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + " vmSafeMode=" + vmSafeMode); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); final int ret = mInstaller.dexopt(path, sharedGid, !isForwardLocked(pkg), pkg.packageName, dexCodeInstructionSet); pkg.packageName, dexCodeInstructionSet, vmSafeMode); if (ret < 0) { // Don't bother running dexopt again if we failed, it will probably Loading