Android PinyinIME 源码笔记 -- 1. 底层服务接口简介

Android拼音输入法的底层服务PinyinDecoderService将运行在一个独立的进程里,上层Java应用运行在另一个进程,两个进程间通信需要通过aidl文件中定义的接口调用。
    如前文所述,在源码根目录下的lib/子目录中已经定义服务的接口IPinyinDecoderService。
    在Java源码src/com/android/inputmethod/pinyin/PinyinDecoderService.java重载并实现一个Android服务类PinyinDecoderService:
    public class PinyinDecoderService extends Service {
         .....
        private final IPinyinDecoderService.Stub mBinder = new IPinyinDecoderService.Stub() {
            ......
        };
    };
    PinyinDecoderService类内嵌了IPinyinDecoderService的实现并生成实例mBinder, 当外部系统调用服务的onBind()接口时,会返回这个实例,然后外部系统通过这个实例与之交互。
    PinyinDecoderService的静态初始化代码会加载jni/目录下C++代码编译出来的动态链接库(so文件),此后服务PinyinDecoderService的成员函数(包括内部类实例mBinder的成员函数)基本上都是转调动态链接库的接口完成输入法的各项功能。

    动态链接库可供拼音输入法服务PinyinDecoderService调用的接口都在文件jni/android/com_android_inputmethod_pinyin_PinyinDecoderService.cpp中:
     1. 动态链接库加载、及注册输出函数
JNIEXPORT jint JNICALL JNI_OnLoad (JavaVM *vm, void *reserved)
static int registerNativeMethods (JNIEnv *env, const char *className, JNINativeMethod *gMethods, int numMethods)
static int registerNatives (JNIEnv *env)
      2. 输入法功能服务函数
JNIEXPORT jint JNICALL nativeImAddLetter (JNIEnv *env, jclass clazz, jbyte ch)
JNIEXPORT jboolean JNICALL nativeImCancelInput (JNIEnv *env, jclass clazz)
JNIEXPORT jint JNICALL nativeImCancelLastChoice (JNIEnv *env, jclass clazz)
JNIEXPORT jint JNICALL nativeImChoose (JNIEnv *env, jclass clazz, jint choice_id)
JNIEXPORT jboolean JNICALL nativeImCloseDecoder (JNIEnv *env, jclass jclazz)
JNIEXPORT jint JNICALL nativeImDelSearch (JNIEnv *env, jclass jclazz, jint pos, jboolean is_pos_in_splid, jboolean clear_fixed_this_step)
JNIEXPORT jboolean JNICALL nativeImFlushCache (JNIEnv *env, jclass clazz)
JNIEXPORT jstring JNICALL nativeImGetChoice (JNIEnv *env, jclass clazz, jint candidateId) JNIEXPORT jint JNICALL nativeImGetFixedLen (JNIEnv *env, jclass clazz)
JNIEXPORT jstring JNICALL nativeImGetPredictItem (JNIEnv *env, jclass clazz, jint predict_no) JNIEXPORT jint JNICALL nativeImGetPredictsNum (JNIEnv *env, jclass clazz, jstring fixed_str) JNIEXPORT jstring JNICALL nativeImGetPyStr (JNIEnv *env, jclass jclazz, jboolean decoded) JNIEXPORT jint JNICALL nativeImGetPyStrLen (JNIEnv *env, jclass jclazz, jboolean decoded) JNIEXPORT jintArray JNICALL nativeImGetSplStart (JNIEnv *env, jclass jclazz)
JNIEXPORT jboolean JNICALL nativeImOpenDecoder (JNIEnv *env, jclass jclazz, jbyteArray fn_sys_dict, jbyteArray fn_usr_dict)
JNIEXPORT jboolean JNICALL nativeImOpenDecoderFd (JNIEnv *env, jclass jclazz, jobject fd_sys_dict, jlong startoffset, jlong length, jbyteArray fn_usr_dict)
JNIEXPORT void JNICALL nativeImResetSearch (JNIEnv *env, jclass jclazz)
JNIEXPORT jint JNICALL nativeImSearch (JNIEnv *env, jclass jclazz, jbyteArray pybuf, jint pylen) JNIEXPORT void JNICALL nativeImSetMaxLens (JNIEnv *env, jclass jclazz, jint max_sps_len, jint max_hzs_len)
    3. 输入法用户词条同步辅助函数
JNIEXPORT jboolean JNICALL nativeSyncBegin (JNIEnv *env, jclass clazz, jbyteArray dict_file) JNIEXPORT jboolean JNICALL nativeSyncClearLastGot (JNIEnv *env, jclass clazz)
JNIEXPORT jboolean JNICALL nativeSyncFinish (JNIEnv *env, jclass clazz) JNIEXPORT jint JNICALL nativeSyncGetCapacity (JNIEnv *env, jclass clazz)
JNIEXPORT jint JNICALL nativeSyncGetLastCount (JNIEnv *env, jclass clazz)
JNIEXPORT jstring JNICALL nativeSyncGetLemmas (JNIEnv *env, jclass clazz)
JNIEXPORT jint JNICALL nativeSyncGetTotalCount (JNIEnv *env, jclass clazz)
JNIEXPORT jint JNICALL nativeSyncPutLemmas (JNIEnv *env, jclass clazz, jstring tomerge)

     后文将集中分析第2部分输入法功能服务函数,第1部分是所有共享库都有的,第3部分只作为输入法的辅助性功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值