Index: android/java/src/org/chromium/base/library_loader/Linker.java |
diff --git a/android/java/src/org/chromium/base/library_loader/Linker.java b/android/java/src/org/chromium/base/library_loader/Linker.java |
index ee62570fed75a0fa23a1717cd6f75e7fea2225cf..c69628843a28f1b09cd6c34d372e80932b6bfa69 100644 |
--- a/android/java/src/org/chromium/base/library_loader/Linker.java |
+++ b/android/java/src/org/chromium/base/library_loader/Linker.java |
@@ -4,6 +4,7 @@ |
package org.chromium.base.library_loader; |
+import android.os.Build; |
import android.os.Bundle; |
import android.os.Parcel; |
import android.os.ParcelFileDescriptor; |
@@ -223,15 +224,22 @@ public abstract class Linker { |
/** |
* Get singleton instance. Returns either a LegacyLinker or a ModernLinker. |
* |
+ * Returns a ModernLinker if running on Android M or later, otherwise returns |
+ * a LegacyLinker. |
+ * |
+ * ModernLinker requires OS features from Android M and later: a system linker |
+ * that handles packed relocations and load from APK, and android_dlopen_ext() |
+ * for shared RELRO support. It cannot run on Android releases earlier than M. |
+ * |
+ * LegacyLinker runs on all Android releases but it is slower and more complex |
+ * than ModernLinker, so ModernLinker is preferred for Android M and later. |
+ * |
* @return the Linker implementation instance. |
*/ |
public static final Linker getInstance() { |
synchronized (sSingletonLock) { |
if (sSingleton == null) { |
- // TODO(simonb): Check version once the Android M build version |
- // code becomes available. |
- // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.<ANDROID-M>) { |
- if (false) { |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
sSingleton = ModernLinker.create(); |
} else { |
sSingleton = LegacyLinker.create(); |
@@ -464,14 +472,14 @@ public abstract class Linker { |
* if the initial load fails we retry with a suffix. |
*/ |
protected void loadLinkerJNILibrary() { |
- String lib_name = "lib" + LINKER_JNI_LIBRARY + ".so"; |
+ String libName = "lib" + LINKER_JNI_LIBRARY + ".so"; |
if (DEBUG) { |
- Log.i(TAG, "Loading " + lib_name); |
+ Log.i(TAG, "Loading " + libName); |
} |
try { |
System.loadLibrary(LINKER_JNI_LIBRARY); |
} catch (UnsatisfiedLinkError e) { |
- Log.w(TAG, "Couldn't load " + lib_name + ", trying " + lib_name + ".so"); |
+ Log.w(TAG, "Couldn't load " + libName + ", trying " + libName + ".so"); |
System.loadLibrary(LINKER_JNI_LIBRARY + ".cr"); |
} |
} |