aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java22
-rw-r--r--jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java20
-rw-r--r--jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java26
-rw-r--r--src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java2
4 files changed, 37 insertions, 33 deletions
diff --git a/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java b/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java
index 758a1b291..ce17040d5 100644
--- a/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java
+++ b/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java
@@ -17,14 +17,18 @@
package com.anysoftkeyboard.utils;
import android.annotation.TargetApi;
+import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.PopupWindow;
+import com.getkeepsafe.relinker.ReLinker;
+
import java.lang.reflect.Method;
import java.util.Locale;
@@ -91,4 +95,22 @@ public class CompatUtils {
public static void unbindDrawable(Drawable d) {
if (d != null) d.setCallback(null);
}
+
+ public static void loadNativeLibrary(@NonNull Context context, @NonNull String library, @NonNull String libraryVersion) {
+ if (Build.VERSION.SDK_INT >= 9) {
+ ReLinker.loadLibrary(context, library, libraryVersion);
+ } else {
+ try {
+ System.loadLibrary(library);
+ } catch (UnsatisfiedLinkError ule) {
+ Log.e(TAG, "******** Could not load native library "+library+" ********");
+ Log.e(TAG, "******** Could not load native library "+library+" ********", ule);
+ Log.e(TAG, "******** Could not load native library "+library+" ********");
+ } catch (Throwable t) {
+ Log.e(TAG, "******** Failed to load native dictionary library "+library+" ********");
+ Log.e(TAG, "******** Failed to load native dictionary library "+library+" *******", t);
+ Log.e(TAG, "******** Failed to load native dictionary library "+library+" ********");
+ }
+ }
+ }
}
diff --git a/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java b/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java
index 3df65dda2..e5e1f2326 100644
--- a/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java
+++ b/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java
@@ -16,11 +16,14 @@
package com.anysoftkeyboard.dictionaries.jni;
+import android.content.Context;
import android.content.res.AssetFileDescriptor;
+import android.support.annotation.NonNull;
import android.util.Log;
import com.anysoftkeyboard.base.dictionaries.Dictionary;
import com.anysoftkeyboard.base.dictionaries.WordComposer;
+import com.anysoftkeyboard.utils.CompatUtils;
import java.io.FileDescriptor;
import java.util.Arrays;
@@ -40,22 +43,9 @@ public class BinaryDictionary extends Dictionary {
private char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS];
private int[] mFrequencies = new int[MAX_WORDS];
- static {
- try {
- System.loadLibrary("anysoftkey_jni");
- } catch (UnsatisfiedLinkError ule) {
- Log.e(TAG, "******** Could not load native library anysoftkey_jni ********");
- Log.e(TAG, "******** Could not load native library anysoftkey_jni ********", ule);
- Log.e(TAG, "******** Could not load native library anysoftkey_jni ********");
- } catch (Throwable t) {
- Log.e(TAG, "******** Failed to load native dictionary library anysoftkey_jni ********");
- Log.e(TAG, "******** Failed to load native dictionary library anysoftkey_jni *******", t);
- Log.e(TAG, "******** Failed to load native dictionary library anysoftkey_jni ********");
- }
- }
-
- public BinaryDictionary(String dictionaryName, AssetFileDescriptor afd) {
+ public BinaryDictionary(@NonNull Context context, @NonNull String dictionaryName, @NonNull AssetFileDescriptor afd) {
super(dictionaryName);
+ CompatUtils.loadNativeLibrary(context, "anysoftkey_jni", "1.0");
mAfd = afd;
}
diff --git a/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java b/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java
index 6f367b89b..379b38f7a 100644
--- a/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java
+++ b/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java
@@ -19,11 +19,14 @@ package com.anysoftkeyboard.dictionaries.jni;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
+import android.support.annotation.NonNull;
+import android.support.annotation.XmlRes;
import android.util.Log;
import com.anysoftkeyboard.base.dictionaries.Dictionary;
import com.anysoftkeyboard.base.dictionaries.WordComposer;
import com.anysoftkeyboard.base.utils.GCUtils;
+import com.anysoftkeyboard.utils.CompatUtils;
import java.io.IOException;
import java.io.InputStream;
@@ -55,35 +58,24 @@ public class ResourceBinaryDictionary extends Dictionary {
private final char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS];
private final int[] mFrequencies = new int[MAX_WORDS];
- /** NOTE!
+ /**
+ * NOTE!
* Keep a reference to the native dict direct buffer in Java to avoid
- * unexpected de-allocation of the direct buffer. */
+ * unexpected de-allocation of the direct buffer.
+ */
@SuppressWarnings("FieldCanBeLocal")
private ByteBuffer mNativeDictDirectBuffer;
private volatile long mNativeDict;
- static {
- try {
- System.loadLibrary("anysoftkey2_jni");
- } catch (UnsatisfiedLinkError ule) {
- Log.e(TAG, "******** Could not load native library anysoftkey2_jni ********");
- Log.e(TAG, "******** Could not load native library anysoftkey2_jni ********", ule);
- Log.e(TAG, "******** Could not load native library anysoftkey2_jni ********");
- } catch (Throwable t) {
- Log.e(TAG, "******** Failed to load native dictionary anysoftkey2_jni ********");
- Log.e(TAG, "******** Failed to load native dictionary anysoftkey2_jni *******", t);
- Log.e(TAG, "******** Failed to load native dictionary anysoftkey2_jni ********");
- }
- }
-
/**
* Create a dictionary from a raw resource file
*
* @param context application context for reading resources
* @param resId the resource containing the raw binary dictionary
*/
- public ResourceBinaryDictionary(String dictionaryName, Context context, int resId/* , int dicTypeId */) {
+ public ResourceBinaryDictionary(@NonNull String dictionaryName, @NonNull Context context, @XmlRes int resId/* , int dicTypeId */) {
super(dictionaryName);
+ CompatUtils.loadNativeLibrary(context, "anysoftkey2_jni", "1.0");
mAppContext = context;
mDictResId = resId;
}
diff --git a/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java b/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java
index 48eb50cef..6675b973f 100644
--- a/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java
+++ b/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java
@@ -71,7 +71,7 @@ public class DictionaryAddOnAndBuilder extends AddOnImpl {
public Dictionary createDictionary() throws Exception {
if (mDictionaryResId == INVALID_RES_ID)
- return new BinaryDictionary(getName(), getPackageContext().getAssets().openFd(mAssetsFilename));
+ return new BinaryDictionary(getPackageContext(), getName(), getPackageContext().getAssets().openFd(mAssetsFilename));
else
return new ResourceBinaryDictionary(getName(), getPackageContext(), mDictionaryResId);
}