diff options
| author | 2015-09-25 22:17:06 +0000 | |
|---|---|---|
| committer | 2015-09-25 22:17:06 +0000 | |
| commit | 389bb7f509fc74de3656492a9c474c11bcc96e5b (patch) | |
| tree | d86c03e691c75afbaef3d7d6df880a74e235ecd5 | |
| parent | 3197cd36fef11b1fdd59bdd341f65f9f2364ed2a (diff) | |
| parent | 9f8602644418ecfb1a5c9555792ceed285fa72bd (diff) | |
am 9f860264: resolved conflicts for 7de7e0b0 to stage-aosp-master
* commit '9f8602644418ecfb1a5c9555792ceed285fa72bd':
Pass dexopt flags as integer
5 files changed, 47 insertions, 40 deletions
diff --git a/core/java/com/android/internal/os/InstallerConnection.java b/core/java/com/android/internal/os/InstallerConnection.java index db2b41f52b8c..13d046e45070 100644 --- a/core/java/com/android/internal/os/InstallerConnection.java +++ b/core/java/com/android/internal/os/InstallerConnection.java @@ -20,6 +20,7 @@ import android.net.LocalSocket; import android.net.LocalSocketAddress; import android.os.SystemClock; import android.util.Slog; + import libcore.io.IoUtils; import libcore.io.Streams; @@ -91,32 +92,29 @@ public class InstallerConnection { } } - public int dexopt(String apkPath, int uid, boolean isPublic, - String instructionSet, int dexoptNeeded, boolean bootComplete) { - return dexopt(apkPath, uid, isPublic, "*", instructionSet, dexoptNeeded, - false, false, null, bootComplete); + public int dexopt(String apkPath, int uid, String instructionSet, + int dexoptNeeded, int dexFlags) { + return dexopt(apkPath, uid, "*", instructionSet, dexoptNeeded, + null /*outputPath*/, dexFlags); } - public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName, - String instructionSet, int dexoptNeeded, boolean vmSafeMode, - boolean debuggable, String outputPath, boolean bootComplete) { + public int dexopt(String apkPath, int uid, String pkgName, String instructionSet, + int dexoptNeeded, String outputPath, int dexFlags) { 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); builder.append(' '); builder.append(dexoptNeeded); - builder.append(vmSafeMode ? " 1" : " 0"); - builder.append(debuggable ? " 1" : " 0"); builder.append(' '); builder.append(outputPath != null ? outputPath : "!"); - builder.append(bootComplete ? " 1" : " 0"); + builder.append(' '); + builder.append(dexFlags); return execute(builder.toString()); } diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 4a50d504ec9e..77f1efaefafe 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -486,8 +486,8 @@ public class ZygoteInit { final int dexoptNeeded = DexFile.getDexOptNeeded( classPathElement, "*", instructionSet, false /* defer */); if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) { - installer.dexopt(classPathElement, Process.SYSTEM_UID, false, - instructionSet, dexoptNeeded, false /* boot complete */); + installer.dexopt(classPathElement, Process.SYSTEM_UID, instructionSet, + dexoptNeeded, 0 /*dexFlags*/); } } } catch (IOException ioe) { diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index f292c9c4c3d8..d55697b40720 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -31,6 +31,19 @@ import com.android.server.SystemService; public final class Installer extends SystemService { private static final String TAG = "Installer"; + /* *************************************************************************** + * IMPORTANT: These values are passed to native code. Keep them in sync with + * frameworks/native/cmds/installd/installd.h + * **************************************************************************/ + /** Application should be visible to everyone */ + public static final int DEXOPT_PUBLIC = 1 << 1; + /** Application wants to run in VM safe mode */ + public static final int DEXOPT_SAFEMODE = 1 << 2; + /** Application wants to allow debugging of its code */ + public static final int DEXOPT_DEBUGGABLE = 1 << 3; + /** The system boot has finished */ + public static final int DEXOPT_BOOTCOMPLETE = 1 << 4; + private final InstallerConnection mInstaller; public Installer(Context context) { @@ -75,39 +88,24 @@ public final class Installer extends SystemService { return mInstaller.execute(builder.toString()); } - public int dexopt(String apkPath, int uid, boolean isPublic, - String instructionSet, int dexoptNeeded) { - return dexopt(apkPath, uid, isPublic, instructionSet, dexoptNeeded, true); - } - - public int dexopt(String apkPath, int uid, boolean isPublic, - String instructionSet, int dexoptNeeded, boolean bootComplete) { + public int dexopt(String apkPath, int uid, String instructionSet, + int dexoptNeeded, int dexFlags) { if (!isValidInstructionSet(instructionSet)) { Slog.e(TAG, "Invalid instruction set: " + instructionSet); return -1; } - return mInstaller.dexopt(apkPath, uid, isPublic, instructionSet, dexoptNeeded, - bootComplete); - } - - public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName, - String instructionSet, int dexoptNeeded, boolean vmSafeMode, - boolean debuggable, @Nullable String outputPath) { - return dexopt(apkPath, uid, isPublic, pkgName, instructionSet, dexoptNeeded, vmSafeMode, - debuggable, outputPath, true); + return mInstaller.dexopt(apkPath, uid, instructionSet, dexoptNeeded, dexFlags); } - public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName, - String instructionSet, int dexoptNeeded, boolean vmSafeMode, - boolean debuggable, @Nullable String outputPath, boolean bootComplete) { + public int dexopt(String apkPath, int uid, String pkgName, String instructionSet, + int dexoptNeeded, @Nullable String outputPath, int dexFlags) { if (!isValidInstructionSet(instructionSet)) { Slog.e(TAG, "Invalid instruction set: " + instructionSet); return -1; } - return mInstaller.dexopt(apkPath, uid, isPublic, pkgName, - instructionSet, dexoptNeeded, vmSafeMode, - debuggable, outputPath, bootComplete); + return mInstaller.dexopt(apkPath, uid, pkgName, instructionSet, dexoptNeeded, + outputPath, dexFlags); } public int idmap(String targetApkPath, String overlayApkPath, int uid) { diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index b692def44153..8be670e71a24 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -35,6 +35,10 @@ import java.util.List; import dalvik.system.DexFile; +import static com.android.server.pm.Installer.DEXOPT_BOOTCOMPLETE; +import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE; +import static com.android.server.pm.Installer.DEXOPT_PUBLIC; +import static com.android.server.pm.Installer.DEXOPT_SAFEMODE; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; @@ -177,9 +181,13 @@ final class PackageDexOptimizer { + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable + " oatDir = " + oatDir + " bootComplete=" + bootComplete); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); + final int dexFlags = + (!pkg.isForwardLocked() ? DEXOPT_PUBLIC : 0) + | (vmSafeMode ? DEXOPT_SAFEMODE : 0) + | (debuggable ? DEXOPT_DEBUGGABLE : 0) + | (bootComplete ? DEXOPT_BOOTCOMPLETE : 0); final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid, - !pkg.isForwardLocked(), pkg.packageName, dexCodeInstructionSet, - dexoptNeeded, vmSafeMode, debuggable, oatDir, bootComplete); + pkg.packageName, dexCodeInstructionSet, dexoptNeeded, oatDir, dexFlags); // Dex2oat might fail due to compiler / verifier errors. We soldier on // regardless, and attempt to interpret the app as a safety net. diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ca13d50698b1..bb035dffba54 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -74,6 +74,7 @@ import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME; import static com.android.internal.content.NativeLibraryHelper.LIB_DIR_NAME; import static com.android.internal.util.ArrayUtils.appendInt; +import static com.android.server.pm.Installer.DEXOPT_PUBLIC; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSet; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; @@ -1979,7 +1980,8 @@ public class PackageManagerService extends IPackageManager.Stub { int dexoptNeeded = DexFile.getDexOptNeeded(lib, null, dexCodeInstructionSet, false); if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) { alreadyDexOpted.add(lib); - mInstaller.dexopt(lib, Process.SYSTEM_UID, true, dexCodeInstructionSet, dexoptNeeded, false); + mInstaller.dexopt(lib, Process.SYSTEM_UID, dexCodeInstructionSet, + dexoptNeeded, DEXOPT_PUBLIC /*dexFlags*/); } } catch (FileNotFoundException e) { Slog.w(TAG, "Library not found: " + lib); @@ -2027,7 +2029,8 @@ public class PackageManagerService extends IPackageManager.Stub { try { int dexoptNeeded = DexFile.getDexOptNeeded(path, null, dexCodeInstructionSet, false); if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) { - mInstaller.dexopt(path, Process.SYSTEM_UID, true, dexCodeInstructionSet, dexoptNeeded, false); + mInstaller.dexopt(path, Process.SYSTEM_UID, dexCodeInstructionSet, + dexoptNeeded, DEXOPT_PUBLIC /*dexFlags*/); } } catch (FileNotFoundException e) { Slog.w(TAG, "Jar not found: " + path); @@ -12350,7 +12353,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer .performDexOpt(pkg, null /* instruction sets */, false /* forceDex */, false /* defer */, false /* inclDependencies */, - true /* boot complete */); + true /*bootComplete*/); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); return; |