Loading services/core/java/com/android/server/pm/PackageDexOptimizer.java +46 −48 Original line number Original line Diff line number Diff line Loading @@ -31,7 +31,6 @@ import java.util.ArrayList; import java.util.List; import java.util.List; import dalvik.system.DexFile; import dalvik.system.DexFile; import dalvik.system.StaleDexCacheError; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; Loading Loading @@ -112,13 +111,17 @@ final class PackageDexOptimizer { } } for (String path : paths) { for (String path : paths) { try { final int dexoptNeeded; final int dexoptNeeded; if (forceDex) { if (forceDex) { dexoptNeeded = DexFile.DEX2OAT_NEEDED; dexoptNeeded = DexFile.DEX2OAT_NEEDED; } else { } else { dexoptNeeded = DexFile.getDexOptNeeded(path, try { pkg.packageName, dexCodeInstructionSet, defer); dexoptNeeded = DexFile.getDexOptNeeded(path, pkg.packageName, dexCodeInstructionSet, defer); } catch (IOException ioe) { Slog.w(TAG, "IOException reading apk: " + path, ioe); return DEX_OPT_FAILED; } } } if (!forceDex && defer && dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) { if (!forceDex && defer && dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) { Loading @@ -134,7 +137,12 @@ final class PackageDexOptimizer { String oatDir = null; String oatDir = null; if (dexoptNeeded == DexFile.DEX2OAT_NEEDED) { if (dexoptNeeded == DexFile.DEX2OAT_NEEDED) { dexoptType = "dex2oat"; dexoptType = "dex2oat"; try { oatDir = createOatDirIfSupported(pkg, dexCodeInstructionSet); oatDir = createOatDirIfSupported(pkg, dexCodeInstructionSet); } catch (IOException ioe) { Slog.w(TAG, "Unable to create oatDir for package: " + pkg.packageName); return DEX_OPT_FAILED; } } else if (dexoptNeeded == DexFile.PATCHOAT_NEEDED) { } else if (dexoptNeeded == DexFile.PATCHOAT_NEEDED) { dexoptType = "patchoat"; dexoptType = "patchoat"; } else if (dexoptNeeded == DexFile.SELF_PATCHOAT_NEEDED) { } else if (dexoptNeeded == DexFile.SELF_PATCHOAT_NEEDED) { Loading @@ -142,6 +150,7 @@ final class PackageDexOptimizer { } else { } else { throw new IllegalStateException("Invalid dexopt needed: " + dexoptNeeded); throw new IllegalStateException("Invalid dexopt needed: " + dexoptNeeded); } } Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable Loading @@ -150,23 +159,12 @@ final class PackageDexOptimizer { final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid, final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid, !pkg.isForwardLocked(), pkg.packageName, dexCodeInstructionSet, !pkg.isForwardLocked(), pkg.packageName, dexCodeInstructionSet, dexoptNeeded, vmSafeMode, debuggable, oatDir); dexoptNeeded, vmSafeMode, debuggable, oatDir); if (ret < 0) { return DEX_OPT_FAILED; // Dex2oat might fail due to compiler / verifier errors. We soldier on } // regardless, and attempt to interpret the app as a safety net. if (ret == 0) { performedDexOpt = true; performedDexOpt = true; } } } catch (FileNotFoundException e) { Slog.w(TAG, "Apk not found for dexopt: " + path); return DEX_OPT_FAILED; } catch (IOException e) { Slog.w(TAG, "IOException reading apk: " + path, e); return DEX_OPT_FAILED; } catch (StaleDexCacheError e) { Slog.w(TAG, "StaleDexCacheError when reading apk: " + path, e); return DEX_OPT_FAILED; } catch (Exception e) { Slog.w(TAG, "Exception when doing dexopt : ", e); return DEX_OPT_FAILED; } } } } Loading Loading
services/core/java/com/android/server/pm/PackageDexOptimizer.java +46 −48 Original line number Original line Diff line number Diff line Loading @@ -31,7 +31,6 @@ import java.util.ArrayList; import java.util.List; import java.util.List; import dalvik.system.DexFile; import dalvik.system.DexFile; import dalvik.system.StaleDexCacheError; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; Loading Loading @@ -112,13 +111,17 @@ final class PackageDexOptimizer { } } for (String path : paths) { for (String path : paths) { try { final int dexoptNeeded; final int dexoptNeeded; if (forceDex) { if (forceDex) { dexoptNeeded = DexFile.DEX2OAT_NEEDED; dexoptNeeded = DexFile.DEX2OAT_NEEDED; } else { } else { dexoptNeeded = DexFile.getDexOptNeeded(path, try { pkg.packageName, dexCodeInstructionSet, defer); dexoptNeeded = DexFile.getDexOptNeeded(path, pkg.packageName, dexCodeInstructionSet, defer); } catch (IOException ioe) { Slog.w(TAG, "IOException reading apk: " + path, ioe); return DEX_OPT_FAILED; } } } if (!forceDex && defer && dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) { if (!forceDex && defer && dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) { Loading @@ -134,7 +137,12 @@ final class PackageDexOptimizer { String oatDir = null; String oatDir = null; if (dexoptNeeded == DexFile.DEX2OAT_NEEDED) { if (dexoptNeeded == DexFile.DEX2OAT_NEEDED) { dexoptType = "dex2oat"; dexoptType = "dex2oat"; try { oatDir = createOatDirIfSupported(pkg, dexCodeInstructionSet); oatDir = createOatDirIfSupported(pkg, dexCodeInstructionSet); } catch (IOException ioe) { Slog.w(TAG, "Unable to create oatDir for package: " + pkg.packageName); return DEX_OPT_FAILED; } } else if (dexoptNeeded == DexFile.PATCHOAT_NEEDED) { } else if (dexoptNeeded == DexFile.PATCHOAT_NEEDED) { dexoptType = "patchoat"; dexoptType = "patchoat"; } else if (dexoptNeeded == DexFile.SELF_PATCHOAT_NEEDED) { } else if (dexoptNeeded == DexFile.SELF_PATCHOAT_NEEDED) { Loading @@ -142,6 +150,7 @@ final class PackageDexOptimizer { } else { } else { throw new IllegalStateException("Invalid dexopt needed: " + dexoptNeeded); throw new IllegalStateException("Invalid dexopt needed: " + dexoptNeeded); } } Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable Loading @@ -150,23 +159,12 @@ final class PackageDexOptimizer { final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid, final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid, !pkg.isForwardLocked(), pkg.packageName, dexCodeInstructionSet, !pkg.isForwardLocked(), pkg.packageName, dexCodeInstructionSet, dexoptNeeded, vmSafeMode, debuggable, oatDir); dexoptNeeded, vmSafeMode, debuggable, oatDir); if (ret < 0) { return DEX_OPT_FAILED; // Dex2oat might fail due to compiler / verifier errors. We soldier on } // regardless, and attempt to interpret the app as a safety net. if (ret == 0) { performedDexOpt = true; performedDexOpt = true; } } } catch (FileNotFoundException e) { Slog.w(TAG, "Apk not found for dexopt: " + path); return DEX_OPT_FAILED; } catch (IOException e) { Slog.w(TAG, "IOException reading apk: " + path, e); return DEX_OPT_FAILED; } catch (StaleDexCacheError e) { Slog.w(TAG, "StaleDexCacheError when reading apk: " + path, e); return DEX_OPT_FAILED; } catch (Exception e) { Slog.w(TAG, "Exception when doing dexopt : ", e); return DEX_OPT_FAILED; } } } } Loading