Call into ART to get the location of the odex/oat file to pin

Get the location of the odex / oat file to pin from ART instead of
trying to figure it out from location of the apk.

Bug 28251566

Change-Id: Ia2921f6e8df412c4ac5073cd36e57807c655a81d
diff --git a/services/core/java/com/android/server/PinnerService.java b/services/core/java/com/android/server/PinnerService.java
index eaf317a..7ea8f1f 100644
--- a/services/core/java/com/android/server/PinnerService.java
+++ b/services/core/java/com/android/server/PinnerService.java
@@ -41,6 +41,7 @@
 import com.android.internal.app.ResolverActivity;
 import com.android.internal.os.BackgroundThread;
 
+import dalvik.system.DexFile;
 import dalvik.system.VMRuntime;
 
 import java.util.ArrayList;
@@ -240,12 +241,6 @@
         }
         mPinnedCameraFiles.add(pf);
 
-        //find the location of the odex based on the location of the APK
-        int lastPeriod = camAPK.lastIndexOf('.');
-        int lastSlash = camAPK.lastIndexOf('/', lastPeriod);
-        String base = camAPK.substring(0, lastSlash);
-        String appName = camAPK.substring(lastSlash + 1, lastPeriod);
-
         // determine the ABI from either ApplicationInfo or Build
         String arch = "arm";
         if (cameraInfo.primaryCpuAbi != null
@@ -256,8 +251,18 @@
                 arch = arch + "64";
             }
         }
-        String odex = base + "/oat/" + arch + "/" + appName + ".odex";
-        //not all apps have odex files, so not pinning the odex is not a fatal error
+
+        // get the path to the odex or oat file
+        String baseCodePath = cameraInfo.getBaseCodePath();
+        String odex = null;
+        try {
+            odex = DexFile.getDexFileOutputPath(baseCodePath, arch);
+        } catch (IOException ioe) {}
+        if (odex == null) {
+            return true;
+        }
+
+        //not pinning the oat/odex is not a fatal error
         pf = pinFile(odex, 0, 0, MAX_CAMERA_PIN_SIZE);
         if (pf != null) {
             mPinnedCameraFiles.add(pf);
@@ -265,6 +270,7 @@
                 Slog.i(TAG, "Pinned " + pf.mFilename);
             }
         }
+
         return true;
     }