因?yàn)閭€(gè)人比較喜歡用搜狗輸入法蚤假,順便將輸入法直接編譯進(jìn)內(nèi)置包特石,示例源碼包android_8.1.0_r1荐糜,機(jī)型Google Nexus 5x宋舷,
一绪撵、添加APK進(jìn)系統(tǒng)目錄
packages/apps目錄下創(chuàng)建子目錄,例如:packages/apps/sogou
在sogou目錄下創(chuàng)建Android.mk祝蝠,下載好的搜狗輸入法APK音诈,以及apk中用到的so文件,
目錄結(jié)構(gòu)如下
apk中用到的so文件直接解壓apk將lib文件直接整個(gè)復(fù)制過(guò)來(lái)
二绎狭、使用Makefile進(jìn)行編譯管理
打開(kāi)Android.mk,將以下代碼復(fù)制進(jìn)去
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名稱(chēng)
LOCAL_SRC_FILES := 系統(tǒng)編譯之后APK的名稱(chēng)
LOCAL_PREBUILT_JNI_LIBS := \ 解壓APK lib路徑下的.so動(dòng)態(tài)鏈接庫(kù)细溅,一般使用JNI的API都會(huì)有這個(gè)路徑,一定要添加進(jìn)Mkfile里面
LOCAL_MULTTLIB := 32 so庫(kù)是32位還是64位坟岔,64位lib目錄下面會(huì)有很多文件夾谒兄,32位沒(méi)有那么多
在源碼device/lge/bullhead(編譯的機(jī)型代號(hào))/device.mk文件下找到PRODUCT_PACKAGES添加上sogou目錄
三、修改默認(rèn)輸入法
- 刪除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 \
...
- 打開(kāi)frameworks/base/services/core/java/com/android/server/InputMethodManagerService.java下的buildInputMethodListLocked方法增加以下代碼
// 內(nèi)置搜狗輸入法
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
四社付、編譯刷機(jī)
使用 mmm 命令來(lái)編譯指定的模塊:
mmm packages/apps/sogou
編譯好模塊后承疲,還要重新打包一下 system.img 文件:
make snod
刷機(jī)燒錄:
adb reboot bootloader
fastboot flush system system.img
fastboot reboot