[framework] Add check that classpath is up to date to getDexOptNeeded
(cherry picked from commit 576e6c0cbb)
Bug: 62269291
Test: manual, install new apk/splits and force updates.
I used com.android.cts.classloadersplitapp as the test app.
1) install-multiple split apks with dependency: Base -> A -> B
2) push an update for A
3) adb shell cmd package compile
4) check that A & B got recompiled and that B was because a class loader
context mismatch (e.g. "ClassLoaderContext classpath element checksum
mismatch for position 1.").
Merged-In: I4092562966413dc8976c9d41b26a90bbb9e37e1e
Change-Id: I4092562966413dc8976c9d41b26a90bbb9e37e1e
This commit is contained in:
committed by
Andreas Gampe
parent
80c3c70930
commit
7ba73dd509
@@ -553,7 +553,7 @@ public class ZygoteInit {
|
||||
try {
|
||||
dexoptNeeded = DexFile.getDexOptNeeded(
|
||||
classPathElement, instructionSet, systemServerFilter,
|
||||
false /* newProfile */, false /* downgrade */);
|
||||
null /* classLoaderContext */, false /* newProfile */, false /* downgrade */);
|
||||
} catch (FileNotFoundException ignored) {
|
||||
// Do not add to the classpath.
|
||||
Log.w(TAG, "Missing classpath element for system server: " + classPathElement);
|
||||
|
||||
@@ -209,9 +209,10 @@ public class PackageDexOptimizer {
|
||||
*/
|
||||
@GuardedBy("mInstallLock")
|
||||
private int dexOptPath(PackageParser.Package pkg, String path, String isa,
|
||||
String compilerFilter, boolean profileUpdated, String sharedLibrariesPath,
|
||||
String compilerFilter, boolean profileUpdated, String classLoaderContext,
|
||||
int dexoptFlags, int uid, CompilerStats.PackageStats packageStats, boolean downgrade) {
|
||||
int dexoptNeeded = getDexoptNeeded(path, isa, compilerFilter, profileUpdated, downgrade);
|
||||
int dexoptNeeded = getDexoptNeeded(path, isa, compilerFilter, classLoaderContext,
|
||||
profileUpdated, downgrade);
|
||||
if (Math.abs(dexoptNeeded) == DexFile.NO_DEXOPT_NEEDED) {
|
||||
return DEX_OPT_SKIPPED;
|
||||
}
|
||||
@@ -224,8 +225,8 @@ public class PackageDexOptimizer {
|
||||
Log.i(TAG, "Running dexopt (dexoptNeeded=" + dexoptNeeded + ") on: " + path
|
||||
+ " pkg=" + pkg.applicationInfo.packageName + " isa=" + isa
|
||||
+ " dexoptFlags=" + printDexoptFlags(dexoptFlags)
|
||||
+ " target-filter=" + compilerFilter + " oatDir=" + oatDir
|
||||
+ " sharedLibraries=" + sharedLibrariesPath);
|
||||
+ " targetFilter=" + compilerFilter + " oatDir=" + oatDir
|
||||
+ " classLoaderContext=" + classLoaderContext);
|
||||
|
||||
try {
|
||||
long startTime = System.currentTimeMillis();
|
||||
@@ -234,7 +235,7 @@ public class PackageDexOptimizer {
|
||||
// installd only uses downgrade flag for secondary dex files and ignores it for
|
||||
// primary dex files.
|
||||
mInstaller.dexopt(path, uid, pkg.packageName, isa, dexoptNeeded, oatDir, dexoptFlags,
|
||||
compilerFilter, pkg.volumeUuid, sharedLibrariesPath, pkg.applicationInfo.seInfo,
|
||||
compilerFilter, pkg.volumeUuid, classLoaderContext, pkg.applicationInfo.seInfo,
|
||||
false /* downgrade*/);
|
||||
|
||||
if (packageStats != null) {
|
||||
@@ -442,11 +443,11 @@ public class PackageDexOptimizer {
|
||||
* configuration (isa, compiler filter, profile).
|
||||
*/
|
||||
private int getDexoptNeeded(String path, String isa, String compilerFilter,
|
||||
boolean newProfile, boolean downgrade) {
|
||||
String classLoaderContext, boolean newProfile, boolean downgrade) {
|
||||
int dexoptNeeded;
|
||||
try {
|
||||
dexoptNeeded = DexFile.getDexOptNeeded(path, isa, compilerFilter, newProfile,
|
||||
downgrade);
|
||||
dexoptNeeded = DexFile.getDexOptNeeded(path, isa, compilerFilter, classLoaderContext,
|
||||
newProfile, downgrade);
|
||||
} catch (IOException ioe) {
|
||||
Slog.w(TAG, "IOException reading apk: " + path, ioe);
|
||||
return DEX_OPT_FAILED;
|
||||
|
||||
Reference in New Issue
Block a user