From d35451d76b6bdc960881f1325f8b06c2d41e287e Mon Sep 17 00:00:00 2001 From: Calin Juravle Date: Mon, 4 Sep 2017 17:32:23 -0700 Subject: [PATCH] Create secondary dex profiles relative to the provided dex path We previously used the realpath to simplify the validation and processing in installd. However it ended up making things more complicated when cleaning up the profiles, especially because of /data/user/0 symlinks to /data/data/. Instead of using the realpath of the dex file to compute the profile location, use the file path as given. This makes things consistent with DexManager registration and allows for easier dex file reconciliation in the presence of symlinks. Bug: 64460009 Test: manual (cherry picked from commit c119c5a8c1d8e3ba6c90300a82d2086273d0d3f3) Merged-In: I2362f32a679324d4bc1e8a0fe83b5b17ee523e7a Change-Id: Ic9c38a920c5eef85f26ac33f2b8a37c3694bfbad --- core/java/android/app/DexLoadReporter.java | 24 +++++----------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/core/java/android/app/DexLoadReporter.java b/core/java/android/app/DexLoadReporter.java index d15dd6d71f94e..01c045b2d816b 100644 --- a/core/java/android/app/DexLoadReporter.java +++ b/core/java/android/app/DexLoadReporter.java @@ -19,7 +19,6 @@ package android.app; import android.os.FileUtils; import android.os.RemoteException; import android.os.SystemProperties; -import android.system.ErrnoException; import android.util.Slog; import com.android.internal.annotations.GuardedBy; @@ -27,8 +26,6 @@ import com.android.internal.annotations.GuardedBy; import dalvik.system.BaseDexClassLoader; import dalvik.system.VMRuntime; -import libcore.io.Libcore; - import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -156,23 +153,12 @@ import java.util.Set; return; } - File realDexPath; - try { - // Secondary dex profiles are stored in the oat directory, next to the real dex file - // and have the same name with 'cur.prof' appended. We use the realpath because that - // is what installd is using when processing the dex file. - // NOTE: Keep in sync with installd. - realDexPath = new File(Libcore.os.realpath(dexPath)); - } catch (ErrnoException ex) { - Slog.e(TAG, "Failed to get the real path of secondary dex " + dexPath - + ":" + ex.getMessage()); - // Do not continue with registration if we could not retrieve the real path. - return; - } - + // Secondary dex profiles are stored in the oat directory, next to dex file + // and have the same name with 'cur.prof' appended. // NOTE: Keep this in sync with installd expectations. - File secondaryProfileDir = new File(realDexPath.getParent(), "oat"); - File secondaryProfile = new File(secondaryProfileDir, realDexPath.getName() + ".cur.prof"); + File dexPathFile = new File(dexPath); + File secondaryProfileDir = new File(dexPathFile.getParent(), "oat"); + File secondaryProfile = new File(secondaryProfileDir, dexPathFile.getName() + ".cur.prof"); // Create the profile if not already there. // Returns true if the file was created, false if the file already exists.