am e7870a2c
: Add an initial JNI interface to dicttool.
* commit 'e7870a2c0d817e6548eb00c80278b9f7b86c1a5b': Add an initial JNI interface to dicttool.
This commit is contained in:
commit
f180c9a250
10 changed files with 192 additions and 15 deletions
|
@ -23,6 +23,7 @@ import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup;
|
||||||
import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
|
import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
|
||||||
import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
|
import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
|
||||||
import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
|
import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
|
||||||
|
import com.android.inputmethod.latin.utils.JniUtils;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -48,6 +49,13 @@ public final class BinaryDictInputOutput {
|
||||||
|
|
||||||
private static final boolean DBG = MakedictLog.DBG;
|
private static final boolean DBG = MakedictLog.DBG;
|
||||||
|
|
||||||
|
static {
|
||||||
|
JniUtils.loadNativeLibrary();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: implement something sensical instead of just a phony method
|
||||||
|
private static native int doNothing();
|
||||||
|
|
||||||
// Arbitrary limit to how much passes we consider address size compression should
|
// Arbitrary limit to how much passes we consider address size compression should
|
||||||
// terminate in. At the time of this writing, our largest dictionary completes
|
// terminate in. At the time of this writing, our largest dictionary completes
|
||||||
// compression in five passes.
|
// compression in five passes.
|
||||||
|
|
|
@ -43,6 +43,7 @@ LATIN_IME_JNI_SRC_FILES := \
|
||||||
com_android_inputmethod_keyboard_ProximityInfo.cpp \
|
com_android_inputmethod_keyboard_ProximityInfo.cpp \
|
||||||
com_android_inputmethod_latin_BinaryDictionary.cpp \
|
com_android_inputmethod_latin_BinaryDictionary.cpp \
|
||||||
com_android_inputmethod_latin_DicTraverseSession.cpp \
|
com_android_inputmethod_latin_DicTraverseSession.cpp \
|
||||||
|
com_android_inputmethod_latin_makedict_BinaryDictInputOutput.cpp \
|
||||||
jni_common.cpp
|
jni_common.cpp
|
||||||
|
|
||||||
LATIN_IME_CORE_SRC_FILES := \
|
LATIN_IME_CORE_SRC_FILES := \
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_TAG "LatinIME: jni: BinaryDictInputOutput"
|
||||||
|
|
||||||
|
#include "com_android_inputmethod_latin_makedict_BinaryDictInputOutput.h"
|
||||||
|
|
||||||
|
#include "defines.h"
|
||||||
|
#include "jni.h"
|
||||||
|
#include "jni_common.h"
|
||||||
|
|
||||||
|
namespace latinime {
|
||||||
|
static int latinime_BinaryDictInputOutput_doNothing(JNIEnv *env, jclass clazz) {
|
||||||
|
// This is a phony method for test - it does nothing. It just returns some value
|
||||||
|
// unlikely to be in memory by chance for testing purposes.
|
||||||
|
// TODO: remove this method.
|
||||||
|
return 2097;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const JNINativeMethod sMethods[] = {
|
||||||
|
{
|
||||||
|
// TODO: remove this entry when we have one useful method in here
|
||||||
|
const_cast<char *>("doNothing"),
|
||||||
|
const_cast<char *>("()I"),
|
||||||
|
reinterpret_cast<void *>(latinime_BinaryDictInputOutput_doNothing)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
int register_BinaryDictInputOutput(JNIEnv *env) {
|
||||||
|
const char *const kClassPathName =
|
||||||
|
"com/android/inputmethod/latin/makedict/BinaryDictInputOutput";
|
||||||
|
return registerNativeMethods(env, kClassPathName, sMethods, NELEMS(sMethods));
|
||||||
|
}
|
||||||
|
} // namespace latinime
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _COM_ANDROID_INPUTMETHOD_LATIN_MAKEDICT_BINARYDICTINPUTOUTPUT_H
|
||||||
|
#define _COM_ANDROID_INPUTMETHOD_LATIN_MAKEDICT_BINARYDICTINPUTOUTPUT_H
|
||||||
|
|
||||||
|
#include "jni.h"
|
||||||
|
|
||||||
|
namespace latinime {
|
||||||
|
int register_BinaryDictInputOutput(JNIEnv *env);
|
||||||
|
} // namespace latinime
|
||||||
|
#endif // _COM_ANDROID_INPUTMETHOD_LATIN_MAKEDICT_BINARYDICTINPUTOUTPUT_H
|
|
@ -18,9 +18,12 @@
|
||||||
|
|
||||||
#include "jni_common.h"
|
#include "jni_common.h"
|
||||||
|
|
||||||
|
#ifndef HOST_TOOL
|
||||||
#include "com_android_inputmethod_keyboard_ProximityInfo.h"
|
#include "com_android_inputmethod_keyboard_ProximityInfo.h"
|
||||||
#include "com_android_inputmethod_latin_BinaryDictionary.h"
|
#include "com_android_inputmethod_latin_BinaryDictionary.h"
|
||||||
#include "com_android_inputmethod_latin_DicTraverseSession.h"
|
#include "com_android_inputmethod_latin_DicTraverseSession.h"
|
||||||
|
#endif
|
||||||
|
#include "com_android_inputmethod_latin_makedict_BinaryDictInputOutput.h"
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -38,6 +41,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||||
AKLOGE("ERROR: JNIEnv is invalid");
|
AKLOGE("ERROR: JNIEnv is invalid");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#ifndef HOST_TOOL
|
||||||
if (!latinime::register_BinaryDictionary(env)) {
|
if (!latinime::register_BinaryDictionary(env)) {
|
||||||
AKLOGE("ERROR: BinaryDictionary native registration failed");
|
AKLOGE("ERROR: BinaryDictionary native registration failed");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -50,6 +54,11 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||||
AKLOGE("ERROR: ProximityInfo native registration failed");
|
AKLOGE("ERROR: ProximityInfo native registration failed");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
if (!latinime::register_BinaryDictInputOutput(env)) {
|
||||||
|
AKLOGE("ERROR: BinaryDictInputOutput native registration failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
/* success -- return valid version number */
|
/* success -- return valid version number */
|
||||||
return JNI_VERSION_1_6;
|
return JNI_VERSION_1_6;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,27 +13,34 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
LOCAL_PATH := $(call my-dir)
|
LATINIME_DICTTOOL_AOSP_LOCAL_PATH := $(call my-dir)
|
||||||
|
LOCAL_PATH := $(LATINIME_DICTTOOL_AOSP_LOCAL_PATH)
|
||||||
|
LATINIME_HOST_NATIVE_LIBNAME := liblatinime-aosp-dicttool-host
|
||||||
|
include $(LOCAL_PATH)/NativeLib.mk
|
||||||
|
|
||||||
|
######################################
|
||||||
|
LOCAL_PATH := $(LATINIME_DICTTOOL_AOSP_LOCAL_PATH)
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
BUILD_TOP := ../../../../..
|
LATINIME_LOCAL_DIR := ../..
|
||||||
LATINIME_DIR := $(BUILD_TOP)/packages/inputmethods/LatinIME
|
LATINIME_BASE_SOURCE_DIRECTORY := $(LATINIME_LOCAL_DIR)/java/src/com/android/inputmethod
|
||||||
LATINIME_BASE_SOURCE_DIRECTORY := $(LATINIME_DIR)/java/src/com/android/inputmethod
|
|
||||||
LATINIME_CORE_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/latin
|
|
||||||
LATINIME_ANNOTATIONS_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/annotations
|
LATINIME_ANNOTATIONS_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/annotations
|
||||||
|
LATINIME_CORE_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/latin
|
||||||
MAKEDICT_CORE_SOURCE_DIRECTORY := $(LATINIME_CORE_SOURCE_DIRECTORY)/makedict
|
MAKEDICT_CORE_SOURCE_DIRECTORY := $(LATINIME_CORE_SOURCE_DIRECTORY)/makedict
|
||||||
DICTTOOL_COMPAT_TESTS_DIRECTORY := compat
|
|
||||||
DICTTOOL_ONDEVICE_TESTS_DIRECTORY := \
|
|
||||||
$(LATINIME_DIR)/tests/src/com/android/inputmethod/latin/makedict/
|
|
||||||
|
|
||||||
USED_TARGETTED_UTILS := \
|
USED_TARGETTED_UTILS := \
|
||||||
$(LATINIME_CORE_SOURCE_DIRECTORY)/utils/ByteArrayWrapper.java \
|
$(LATINIME_CORE_SOURCE_DIRECTORY)/utils/ByteArrayWrapper.java \
|
||||||
$(LATINIME_CORE_SOURCE_DIRECTORY)/utils/CollectionUtils.java
|
$(LATINIME_CORE_SOURCE_DIRECTORY)/utils/CollectionUtils.java \
|
||||||
|
$(LATINIME_CORE_SOURCE_DIRECTORY)/utils/JniUtils.java
|
||||||
|
|
||||||
|
DICTTOOL_ONDEVICE_TESTS_DIRECTORY := \
|
||||||
|
$(LATINIME_LOCAL_DIR)/tests/src/com/android/inputmethod/latin/makedict/
|
||||||
|
DICTTOOL_COMPAT_TESTS_DIRECTORY := compat
|
||||||
|
|
||||||
LOCAL_MAIN_SRC_FILES := $(call all-java-files-under, $(MAKEDICT_CORE_SOURCE_DIRECTORY))
|
LOCAL_MAIN_SRC_FILES := $(call all-java-files-under, $(MAKEDICT_CORE_SOURCE_DIRECTORY))
|
||||||
LOCAL_TOOL_SRC_FILES := $(call all-java-files-under, src)
|
LOCAL_TOOL_SRC_FILES := $(call all-java-files-under, src)
|
||||||
LOCAL_ANNOTATIONS_SRC_FILES := \
|
LOCAL_ANNOTATIONS_SRC_FILES := \
|
||||||
$(call all-java-files-under, $(LATINIME_ANNOTATIONS_SOURCE_DIRECTORY))
|
$(call all-java-files-under, $(LATINIME_ANNOTATIONS_SOURCE_DIRECTORY))
|
||||||
|
|
||||||
LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \
|
LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \
|
||||||
$(filter-out $(addprefix %/, $(notdir $(LOCAL_TOOL_SRC_FILES))), $(LOCAL_MAIN_SRC_FILES)) \
|
$(filter-out $(addprefix %/, $(notdir $(LOCAL_TOOL_SRC_FILES))), $(LOCAL_MAIN_SRC_FILES)) \
|
||||||
$(LOCAL_ANNOTATIONS_SRC_FILES) \
|
$(LOCAL_ANNOTATIONS_SRC_FILES) \
|
||||||
|
@ -44,9 +51,13 @@ LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \
|
||||||
$(USED_TARGETTED_UTILS)
|
$(USED_TARGETTED_UTILS)
|
||||||
|
|
||||||
LOCAL_JAVA_LIBRARIES := junit
|
LOCAL_JAVA_LIBRARIES := junit
|
||||||
|
LOCAL_ADDITIONAL_DEPENDENCIES := $(LATINIME_HOST_NATIVE_LIBNAME)
|
||||||
LOCAL_JAR_MANIFEST := etc/manifest.txt
|
LOCAL_JAR_MANIFEST := etc/manifest.txt
|
||||||
LOCAL_MODULE := dicttool_aosp
|
LOCAL_MODULE := dicttool_aosp
|
||||||
|
|
||||||
include $(BUILD_HOST_JAVA_LIBRARY)
|
include $(BUILD_HOST_JAVA_LIBRARY)
|
||||||
include $(LOCAL_PATH)/etc/Android.mk
|
include $(LOCAL_PATH)/etc/Android.mk
|
||||||
|
|
||||||
|
# Clear our private variables
|
||||||
|
LATINIME_DICTTOOL_AOSP_LOCAL_PATH :=
|
||||||
|
LATINIME_LOCAL_DIR :=
|
||||||
|
|
51
tools/dicttool/NativeLib.mk
Normal file
51
tools/dicttool/NativeLib.mk
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 The Android Open Source Project
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
# Need to define the name of the library in the caller in LATINIME_HOST_NATIVE_LIBNAME
|
||||||
|
|
||||||
|
LATINIME_DIR_RELATIVE_TO_DICTTOOL := ../..
|
||||||
|
|
||||||
|
ifneq ($(strip $(HOST_JDK_IS_64BIT_VERSION)),)
|
||||||
|
LOCAL_CFLAGS += -m64
|
||||||
|
LOCAL_LDFLAGS += -m64
|
||||||
|
endif #HOST_JDK_IS_64BIT_VERSION
|
||||||
|
|
||||||
|
LOCAL_CFLAGS += -DHOST_TOOL -fPIC
|
||||||
|
LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
|
||||||
|
|
||||||
|
LATINIME_NATIVE_JNI_DIR := $(LATINIME_DIR_RELATIVE_TO_DICTTOOL)/native/jni
|
||||||
|
LATINIME_NATIVE_SRC_DIR := $(LATINIME_DIR_RELATIVE_TO_DICTTOOL)/native/jni/src
|
||||||
|
LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(LATINIME_NATIVE_SRC_DIR)
|
||||||
|
# Used in jni_common.cpp to avoid registering useless methods.
|
||||||
|
|
||||||
|
LATIN_IME_JNI_SRC_FILES := \
|
||||||
|
com_android_inputmethod_latin_makedict_BinaryDictInputOutput.cpp \
|
||||||
|
jni_common.cpp
|
||||||
|
|
||||||
|
LATIN_IME_CORE_SRC_FILES :=
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES := \
|
||||||
|
$(addprefix $(LATINIME_NATIVE_JNI_DIR)/, $(LATIN_IME_JNI_SRC_FILES)) \
|
||||||
|
$(addprefix $(LATINIME_NATIVE_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
|
||||||
|
|
||||||
|
LOCAL_MODULE := $(LATINIME_HOST_NATIVE_LIBNAME)
|
||||||
|
|
||||||
|
include $(BUILD_HOST_SHARED_LIBRARY)
|
||||||
|
|
||||||
|
# Clear our private variables
|
||||||
|
LATINIME_DIR_RELATIVE_TO_DICTTOOL := ../..
|
|
@ -25,13 +25,13 @@ public class Log {
|
||||||
public static void d(final String tag, final String message) {
|
public static void d(final String tag, final String message) {
|
||||||
System.out.println(tag + " : " + message);
|
System.out.println(tag + " : " + message);
|
||||||
}
|
}
|
||||||
public static void d(final String tag, final String message, final Exception e) {
|
public static void d(final String tag, final String message, final Throwable e) {
|
||||||
System.out.println(tag + " : " + message + " : " + e);
|
System.out.println(tag + " : " + message + " : " + e);
|
||||||
}
|
}
|
||||||
public static void e(final String tag, final String message) {
|
public static void e(final String tag, final String message) {
|
||||||
d(tag, message);
|
d(tag, message);
|
||||||
}
|
}
|
||||||
public static void e(final String tag, final String message, final Exception e) {
|
public static void e(final String tag, final String message, final Throwable e) {
|
||||||
e(tag, message, e);
|
d(tag, message, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.latin.define;
|
||||||
|
|
||||||
|
public final class JniLibName {
|
||||||
|
private JniLibName() {
|
||||||
|
// This class is not publicly instantiable.
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String JNI_LIB_NAME = "latinime-dicttool-host";
|
||||||
|
}
|
|
@ -69,4 +69,4 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# might need more memory, e.g. -Xmx128M
|
# might need more memory, e.g. -Xmx128M
|
||||||
exec java -ea -classpath "$libpath":"$jarpath" "$classname" "$@"
|
exec java -ea -classpath "$libpath":"$jarpath" -Djava.library.path="$libdir" "$classname" "$@"
|
||||||
|
|
Loading…
Reference in a new issue