Index: base/android/java/src/org/chromium/base/library_loader/LibraryLoaderHelper.java |
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoaderHelper.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoaderHelper.java |
index c185fadbe5f4b00a558ed863ead1abfc56d09948..7dd1a29a0eafe6c4adfc270cb3950843da86f6de 100644 |
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoaderHelper.java |
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoaderHelper.java |
@@ -6,7 +6,6 @@ |
package org.chromium.base.library_loader; |
import android.content.Context; |
-import android.os.Build; |
import android.util.Log; |
import java.io.BufferedOutputStream; |
@@ -19,7 +18,6 @@ import java.io.InputStream; |
import java.io.OutputStream; |
import java.util.Collection; |
import java.util.Collections; |
-import java.util.HashMap; |
import java.util.HashSet; |
import java.util.Map; |
import java.util.Map.Entry; |
@@ -44,94 +42,16 @@ class UnpackingException extends Exception { |
/** |
* The class provides helper functions to extract native libraries from APK, |
* and load libraries from there. |
- * |
- * The class should be package-visible only, but made public for testing |
- * purpose. |
*/ |
-public class LibraryLoaderHelper { |
+class LibraryLoaderHelper { |
private static final String TAG = "LibraryLoaderHelper"; |
- // Workaround and fallback directories. |
- // TODO(petrcermak): Merge the directories once refactored. |
- public static final String PACKAGE_MANAGER_WORKAROUND_DIR = "lib"; |
- public static final String LOAD_FROM_APK_FALLBACK_DIR = "fallback"; |
+ // Fallback directories. |
+ static final String LOAD_FROM_APK_FALLBACK_DIR = "fallback"; |
private static final int BUFFER_SIZE = 16384; |
/** |
- * One-way switch becomes true if native libraries were unpacked |
- * from APK. |
- */ |
- private static boolean sLibrariesWereUnpacked = false; |
- |
- /** |
- * Loads native libraries using workaround only, skip the library in system |
- * lib path. The method exists only for testing purpose. |
- * Caller must ensure thread safety of this method. |
- * @param context |
- */ |
- public static boolean loadNativeLibrariesUsingWorkaroundForTesting(Context context) { |
- // Although tryLoadLibraryUsingWorkaround might be called multiple times, |
- // libraries should only be unpacked once, this is guaranteed by |
- // sLibrariesWereUnpacked. |
- for (String library : NativeLibraries.LIBRARIES) { |
- if (!tryLoadLibraryUsingWorkaround(context, library)) { |
- return false; |
- } |
- } |
- return true; |
- } |
- |
- /** |
- * Try to load a native library using a workaround of |
- * http://b/13216167. |
- * |
- * Workaround for b/13216167 was adapted from code in |
- * https://googleplex-android-review.git.corp.google.com/#/c/433061 |
- * |
- * More details about http://b/13216167: |
- * PackageManager may fail to update shared library. |
- * |
- * Native library directory in an updated package is a symbolic link |
- * to a directory in /data/app-lib/<package name>, for example: |
- * /data/data/com.android.chrome/lib -> /data/app-lib/com.android.chrome[-1]. |
- * When updating the application, the PackageManager create a new directory, |
- * e.g., /data/app-lib/com.android.chrome-2, and remove the old symlink and |
- * recreate one to the new directory. However, on some devices (e.g. Sony Xperia), |
- * the symlink was updated, but fails to extract new native libraries from |
- * the new apk. |
- * |
- * We make the following changes to alleviate the issue: |
- * 1) name the native library with apk version code, e.g., |
- * libchrome.1750.136.so, 1750.136 is Chrome version number; |
- * 2) first try to load the library using System.loadLibrary, |
- * if that failed due to the library file was not found, |
- * search the named library in a /data/data/com.android.chrome/app_lib |
- * directory. Because of change 1), each version has a different native |
- * library name, so avoid mistakenly using the old native library. |
- * |
- * If named library is not in /data/data/com.android.chrome/app_lib directory, |
- * extract native libraries from apk and cache in the directory. |
- * |
- * This function doesn't throw UnsatisfiedLinkError, the caller needs to |
- * check the return value. |
- */ |
- static boolean tryLoadLibraryUsingWorkaround(Context context, String library) { |
- assert context != null; |
- String libName = System.mapLibraryName(library); |
- File libFile = new File(getLibDir(context, PACKAGE_MANAGER_WORKAROUND_DIR), libName); |
- if (!libFile.exists() && !unpackWorkaroundLibrariesOnce(context)) { |
- return false; |
- } |
- try { |
- System.load(libFile.getAbsolutePath()); |
- return true; |
- } catch (UnsatisfiedLinkError e) { |
- return false; |
- } |
- } |
- |
- /** |
* Returns the directory for holding extracted native libraries. |
* It may create the directory if it doesn't exist. |
* |
@@ -139,57 +59,14 @@ public class LibraryLoaderHelper { |
* @param dirName The name of the directory containing the libraries. |
* @return The directory file object. |
*/ |
- public static File getLibDir(Context context, String dirName) { |
+ static File getLibDir(Context context, String dirName) { |
return context.getDir(dirName, Context.MODE_PRIVATE); |
} |
- @SuppressWarnings("deprecation") |
- private static String getJniNameInApk(String libName) { |
- // TODO(aurimas): Build.CPU_ABI has been deprecated. Replace it when final L SDK is public. |
- return "lib/" + Build.CPU_ABI + "/" + libName; |
- } |
- |
- /** |
- * Unpack native libraries from the APK file. The method is supposed to |
- * be called only once. It deletes existing files in unpacked directory |
- * before unpacking. |
- * |
- * @param context |
- * @return true when unpacking was successful, false when failed or called |
- * more than once. |
- */ |
- private static boolean unpackWorkaroundLibrariesOnce(Context context) { |
- if (sLibrariesWereUnpacked) { |
- return false; |
- } |
- sLibrariesWereUnpacked = true; |
- |
- deleteLibrariesSynchronously(context, PACKAGE_MANAGER_WORKAROUND_DIR); |
- File libDir = getLibDir(context, PACKAGE_MANAGER_WORKAROUND_DIR); |
- |
- try { |
- Map<String, File> dstFiles = new HashMap<String, File>(); |
- for (String library : NativeLibraries.LIBRARIES) { |
- String libName = System.mapLibraryName(library); |
- String pathInZipFile = getJniNameInApk(libName); |
- dstFiles.put(pathInZipFile, new File(libDir, libName)); |
- } |
- unpackLibraries(context, dstFiles); |
- return true; |
- } catch (UnpackingException e) { |
- Log.e(TAG, "Failed to unpack native libraries", e); |
- deleteLibrariesSynchronously(context, PACKAGE_MANAGER_WORKAROUND_DIR); |
- return false; |
- } |
- } |
- |
/** |
* Delete libraries and their directory synchronously. |
- * For testing purpose only. |
- * |
- * @param context |
*/ |
- public static void deleteLibrariesSynchronously(Context context, String dirName) { |
+ private static void deleteLibrariesSynchronously(Context context, String dirName) { |
File libDir = getLibDir(context, dirName); |
deleteObsoleteLibraries(libDir, Collections.<File>emptyList()); |
} |
@@ -197,8 +74,6 @@ public class LibraryLoaderHelper { |
/** |
* Delete libraries and their directory asynchronously. |
* The actual deletion is done in a background thread. |
- * |
- * @param context |
*/ |
static void deleteLibrariesAsynchronously( |
final Context context, final String dirName) { |
@@ -220,7 +95,7 @@ public class LibraryLoaderHelper { |
* @param library Library name. |
* @return name of the fallback copy of the library. |
*/ |
- public static String buildFallbackLibrary(Context context, String library) { |
+ static String buildFallbackLibrary(Context context, String library) { |
try { |
String libName = System.mapLibraryName(library); |
File fallbackLibDir = getLibDir(context, LOAD_FROM_APK_FALLBACK_DIR); |