在Android系统中,每个APP都由Makefile管理着,目的是将该模块添加进整个系统编译
2.1 SogouInput目录下新建Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sogouinput5.1.2
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := SogouInput.apk
LOCAL_PREBUILT_JNI_LIBS := \
@lib/armeabi/libNinepatch.so \
@lib/armeabi/libsogouupdcore.so \
@lib/armeabi/libwebp.so \
@lib/armeabi/libweibosdkcore.so
LOCAL_MULTILIB :=32
include $(BUILD_PREBUILT)
需要关注的宏:
LOCAL_MODULE := 输入法APK名称
LOCAL_SRC_FILES := 系统编译之后APK的名称
LOCAL_PREBUILT_JNI_LIBS := \ 解压APK lib路径下的.so动态链接库,一般使用JNI的API都会有这个路径,一定要添加进Mkfile里面LOCAL_MULTTLIB := 32 so库是32位还是64位,64位lib目录下面会有很多文件夹,32位没有那么多
2.2 inputmethod目录下新建inputmethod.mk(这个文件名随意,但是得取得有意义)
PRODUCT_PACKAGES += \
SogouInput
endif
PRODUCT_PACKAGES +=\ 这个宏经常用在多个APP目录最外面一层,目的是等下将他包含在主要的编译文件里面,进行管理。这里的目的就是为了管理SogouInput文件夹里面的那个Makefile。注意我这边为了演示只给这个宏加了一个文件夹,实际项目可能有多个,以\换行来间隔,最后一个不用加\
2.3 inputmethod目录下新建inputmethod.mk(这个文件名随意,但是得取得有意义)
2.4 将inputmethod.mk添加到系统编译中
$(call inherit-product, packages/package/inputmethod/inputmethod.mk)
添加的地方是在某个Makefile,一套代码可以编译N个项目出来,具体需求根据项目来进行
三、将输入法添加进Settings可选项
Settings -> (个人)语言和输入法 -> (键盘和输入法)里面一般有包含谷歌拼音输入法、Android键盘(AOSP)可是并没有搜狗输入法选项,所以我们要添加进来
修改路径:
frameworks/base/packages/SettingsProvider/res/values/customize.xml
<string name="def_enable_input_methods" translatable="false">com.iflytek.inputmethod/.FlyIME:com.android.inputmethod.latin/.LatinIME:com.sohu.inputmethod.sogou/.SogouIME</string>
com.sohu.inputmethod.sogou/.SogouIME是新增进去的,以:(分号间隔),这个是官方规定的规范,可上网查阅
这里提供几个常用的:
百度:com.baidu.input/.ImeService
讯飞:com.iflytek.inputmethod/.FlyIME
腾讯:com.tencent.qqpinyin/.QQPYInputMethodService
谷歌:com.google.android.inputmethod.pinyin/.PinyinIME
搜狗:com.sohu.inputmethod.sogou/.SogouIME
触宝:com.cootek.smartinput5/.TouchPalIME
最后就可以编译了,一定要全编!单编这个模块不能将Makefile包含进来。其实任何APK都可以以这种方式进行内置,最终安装在手机system/app/目录下面