1. 程式人生 > >原生Android7.1 新增第三方輸入法

原生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