原生Android7.1 新增第三方輸入法
平臺:msm8953_64
Android 7.1.2
Ubuntu 16.04
第一步,獲取輸入輸入法
(1)到訊飛輸入法官網下載xxx.apk檔案
(2)在packages/apps 目錄下新建FlyIMEjackw目錄,該目錄名字後面要用到
(3)將輸入法xxx.apk檔案拷貝到FlyIMEjackw目錄
(4) mv xxx.apk xxx.zip
unzip xxx.zip
第二步 將輸入法加入到系統編譯中
(1)在FlyIMEjackw目錄下,建立Android.mk檔案,把下面內容新增到Android.mk檔案
#add by jackw 20180908 for add FLYIME inputmethod
PREBUILT_PATH := $(call my-dir)
LOCAL_PATH := $(PREBUILT_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := FlyIMEjackw
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_SUFFIX := .apk
LOCAL_SRC_FILES := FlyIMEjackw.apk
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/app
LOCAL_PREBUILT_JNI_LIBS :=\
@lib/armeabi/libcom_iflytek_inputmethod_mmp.so \
@lib/armeabi/libcom_iflytek_inputmethod_ocr.so \
@lib/armeabi/libcom_iflytek_inputmethod_setting.so \
@lib/armeabi/libcom_iflytek_inputmethod_thirdbkservices.so \
@lib/armeabi/libcom_iflytek_inputmethod_translate.so \
@lib/armeabi/libdexopt.so \
@lib/armeabi/libencdec-jni-v1.so \
@lib/armeabi/liblwl.so \
@lib/armeabi/libMetaVAD-v1.so \
@lib/armeabi/libmsc-v8.so \
@lib/armeabi/libnalsocket.so \
@lib/armeabi/libNativeCrashCollect.so \
@lib/armeabi/libsmartaiwrite-jni-v30.so \
@lib/armeabi/libvadLib-v5.so \
@lib/armeabi/libvipfont.so
include $(BUILD_PREBUILT)
(2)build/target/product/core.mk 在PRODUCT_PACKAGES += \的最後加入需要編譯的APPS目錄FlyIMEjackw
PRODUCT_PACKAGES += \
BasicDreams \
BlockedNumberProvider \
BookmarkProvider \
Browser2 \
Calendar \
CalendarProvider \
CaptivePortalLogin \
CertInstaller \
Contacts \
DeskClock \
DocumentsUI \
DownloadProviderUi \
Email \
ExactCalculator \
Exchange2 \
ExternalStorageProvider \
FusedLocation \
InputDevices \
KeyChain \
Keyguard \
Launcher2 \
ManagedProvisioning \
MtpDocumentsProvider \
PicoTts \
PacProcessor \
libpac \
PrintSpooler \
PrintRecommendationService \
ProxyHandler \
QuickSearchBox \
Settings \
SharedStorageBackup \
StorageManager \
Telecom \
TeleService \
VpnDialogs \
MmsService \
FlyIMEjackw
第三步,修改系統預設輸入法
各種輸入法的ID
百度: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
(1) frameworks/base/packages/SettingsProvider/res/values/defaults.xml在下面2行原始程式碼中新增輸入法ID
<string name="def_enable_input_methods" translatable="false">(輸入法ID)</string>
<string name="def_input_method" translatable="false">(輸入法ID)</string>
新增後為
<string name="def_enable_input_methods" translatable="false">com.iflytek.inputmethod.FlyIME</string>
<string name="def_input_method" translatable="false">com.iflytek.inputmethod.FlyIME</string>
下面是我在defaults.xml新增後的可用程式碼:
<string name="def_enable_input_methods" translatable="false">com.iflytek.inputmethod.FlyIME</string>
<string name="def_input_method" translatable="false">com.iflytek.inputmethod.FlyIME</string>
<!--
Default Enable InputMethods, its value is from inputmethod's package name and main class
name such as "com.android.inputmethod.pinyin/.PinyinIME" ;This is a string
containing the IDs of all enabled input methods, each ID separated by ':'.
-->
<string name="def_enable_input_methods" translatable="false">com.iflytek.inputmethod.FlyIME</string>
<!--add by jackw 20180908 set zh_cn inputmethod -->
<!-- raw code未修改的程式碼
<string name="def_enable_input_methods" translatable="false"></string>
<string name="def_input_method" translatable="false"></string>
-->
(2)frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 增加下面1行程式碼
//add by jackw 20180908 for add zh_cn inputmethod
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,R.string.default_input_method);
第4步,make -j12 編譯
在target/product/msm8953_64/system/app目錄下,有FlyIMEjackw目錄,
ls FlyIMEjackw
FlyIMEjackw.apk oat