From 96d12a93aeffb8f6db80a7b415cb7d4eb2c4198c Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Wed, 3 May 2017 11:51:53 +0100 Subject: [PATCH] Adjust forced dexopt in case of stripped APKs. We cannot compile from scratch for strip APK. So if getDexOptNeeded returns NotNeeded, pretend there was a compiler filter change, in order to pick up the vdex file. bug: 37558732 Test: "adb shell cmd package compile" of a stripped /system apk Change-Id: I531010e01e44adfa300872c1739c49dab7292317 --- .../com/android/server/pm/PackageDexOptimizer.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 8e0997b08799f..71eb13718cfc1 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -549,9 +549,13 @@ public class PackageDexOptimizer { @Override protected int adjustDexoptNeeded(int dexoptNeeded) { - // Ensure compilation, no matter the current state. - // TODO: The return value is wrong when patchoat is needed. - return DexFile.DEX2OAT_FROM_SCRATCH; + if (dexoptNeeded == DexFile.NO_DEXOPT_NEEDED) { + // Ensure compilation by pretending a compiler filter change on the + // apk/odex location (the reason for the '-'. A positive value means + // the 'oat' location). + return -DexFile.DEX2OAT_FOR_FILTER; + } + return dexoptNeeded; } @Override