美文网首页
AOSP源码编译-系统内置第三方输入法

AOSP源码编译-系统内置第三方输入法

作者: 故里_b612 | 来源:发表于2021-03-01 00:45 被阅读0次

因为个人比较喜欢用搜狗输入法,顺便将输入法直接编译进内置包,示例源码包android_8.1.0_r1,机型Google Nexus 5x,
一、添加APK进系统目录
packages/apps目录下创建子目录,例如:packages/apps/sogou
在sogou目录下创建Android.mk,下载好的搜狗输入法APK,以及apk中用到的so文件,
目录结构如下

1.png

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
三、修改默认输入法
  1. 删除build/target/product/core.mk 文件下的原生输入法:
PRODUCT_PACKAGES += \
    BasicDreams \
    BlockedNumberProvider \
    #LatinIME \  删除
    Calendar \
    CalendarProvider \
    ...
  1. 删除device/google/marlin/common/base.mk文件下的原生输入法
PRODUCT_PACKAGES += \
    BasicDreams \
    BlockedNumberProvider \
    #LatinIME \  删除
    Calendar \
    CalendarProvider \
    ...
  1. 打开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

相关文章

网友评论

      本文标题:AOSP源码编译-系统内置第三方输入法

      本文链接:https://www.haomeiwen.com/subject/ietofltx.html