因为个人比较喜欢用搜狗输入法,顺便将输入法直接编译进内置包,示例源码包android_8.1.0_r1,机型Google Nexus 5x,
一、添加APK进系统目录
packages/apps目录下创建子目录,例如:packages/apps/sogou
在sogou目录下创建Android.mk,下载好的搜狗输入法APK,以及apk中用到的so文件,
目录结构如下
apk中用到的so文件直接解压apk将lib文件直接整个复制过来
二、使用Makefile进行编译管理
打开Android.mk,将以下代码复制进去
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := sogou
# 签名
LOCAL_CERTIFICATE := PRESIGNED
# 指定 src 目录
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_PREBUILT_JNI_LIBS := \
lib/armeabi/libA3AEECD8.so \
lib/armeabi/libac_checker.so \
lib/armeabi/libawp.so \
lib/armeabi/libc++_shared.so \
lib/armeabi/libcrash_collect.so \
lib/armeabi/libCtaApiLib.so \
lib/armeabi/libframesequence.so \
lib/armeabi/libhookmem.so \
lib/armeabi/libkoom-java.so \
lib/armeabi/libkwai-linker.so \
lib/armeabi/liblogan.so \
lib/armeabi/libluajava.so \
lib/armeabi/libmmkv.so \
lib/armeabi/libmultidex.so \
lib/armeabi/libnative-sec.so \
lib/armeabi/libopus_v1.so \
lib/armeabi/libQt.so \
lib/armeabi/libShell.so \
lib/armeabi/libSogouAgc_v1.so \
lib/armeabi/libsogouupdcore.so \
lib/armeabi/libsogou_speex_nt_v01.so \
lib/armeabi/libvivo_account_wave.so \
lib/armeabi/libweibosdkcore.so \
lib/armeabi/libwind.so \
lib/armeabi/libxhook.so \
lib/armeabi/libxhook_lib.so
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位没有那么多
在源码device/lge/bullhead(编译的机型代号)/device.mk文件下找到PRODUCT_PACKAGES添加上sogou目录
2.png三、修改默认输入法
- 删除build/target/product/core.mk 文件下的原生输入法:
PRODUCT_PACKAGES += \
BasicDreams \
BlockedNumberProvider \
#LatinIME \ 删除
Calendar \
CalendarProvider \
...
- 删除device/google/marlin/common/base.mk文件下的原生输入法
PRODUCT_PACKAGES += \
BasicDreams \
BlockedNumberProvider \
#LatinIME \ 删除
Calendar \
CalendarProvider \
...
- 打开frameworks/base/services/core/java/com/android/server/InputMethodManagerService.java下的buildInputMethodListLocked方法增加以下代码
// 内置搜狗输入法
String defaultIme = Settings.Secure.getString(mContext.getContentResolver(),
Settings.Secure.DEFAULT_INPUT_METHOD);
if (defaultIme == null) {
try {
Settings.Secure.putString( mContext.getContentResolver(),
Settings.Secure.DEFAULT_INPUT_METHOD, "com.sohu.inputmethod.sogou/.SogouIME");
} catch (Exception e) {
}
}
百度: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/.TouchPalIM
四、编译刷机
使用 mmm 命令来编译指定的模块:
mmm packages/apps/sogou
编译好模块后,还要重新打包一下 system.img 文件:
make snod
刷机烧录:
adb reboot bootloader
fastboot flush system system.img
fastboot reboot
网友评论