Merge "Don't symlink native library paths for old apps" into gingerbread
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index cc7a027..c7735d9 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -3286,7 +3286,9 @@
              *        only for non-system apps and system app upgrades.
              */
             if (pkg.applicationInfo.nativeLibraryDir != null) {
-                final File sharedLibraryDir = new File(pkg.applicationInfo.nativeLibraryDir);
+                final File nativeLibraryDir = new File(pkg.applicationInfo.nativeLibraryDir);
+                final String dataPathString = dataPath.getPath();
+
                 if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg)) {
                     /*
                      * Upgrading from a previous version of the OS sometimes
@@ -3295,15 +3297,24 @@
                      * Recent changes in the JNI library search path
                      * necessitates we remove those to match previous behavior.
                      */
-                    if (NativeLibraryHelper.removeNativeBinariesFromDirLI(sharedLibraryDir)) {
+                    if (NativeLibraryHelper.removeNativeBinariesFromDirLI(nativeLibraryDir)) {
                         Log.i(TAG, "removed obsolete native libraries for system package " + path);
                     }
-                } else if (!isExternal(pkg)) {
-                    Log.i(TAG, path + " changed; unpacking");
-                    mInstaller.unlinkNativeLibraryDirectory(dataPath.getPath());
-                    NativeLibraryHelper.copyNativeBinariesLI(scanFile, sharedLibraryDir);
+                } else if (nativeLibraryDir.getParent().equals(dataPathString)) {
+                    /*
+                     * If this is an internal application or our
+                     * nativeLibraryPath points to our data directory, unpack
+                     * the libraries. The native library path pointing to the
+                     * data directory for an application in an ASEC container
+                     * can happen for older apps that existed before an OTA to
+                     * Gingerbread.
+                     */
+                    Slog.i(TAG, "Unpacking native libraries for " + path);
+                    mInstaller.unlinkNativeLibraryDirectory(dataPathString);
+                    NativeLibraryHelper.copyNativeBinariesLI(scanFile, nativeLibraryDir);
                 } else {
-                    mInstaller.linkNativeLibraryDirectory(dataPath.getPath(),
+                    Slog.i(TAG, "Linking native library dir for " + path);
+                    mInstaller.linkNativeLibraryDirectory(dataPathString,
                             pkg.applicationInfo.nativeLibraryDir);
                 }
             }