1.下载需要的输入法apk
建议去官网,没有奇奇怪怪的东西
2.更改apk的后缀名为.7z(部分不需要改,可以直接拿压缩软件打开),解压拿到lib库
会发现里面有两个文件夹
而我们只需要其中一个文件的.so文件,上面的是对应64位,下面的是32位,按需求创建一个lib文件夹去存放.so文件
3.在packages\apps创建文件夹,文件夹名字与输入法一致
在文件夹内放置lib库和apk
4.在文件夹内创建Android.mk文件,内容为:
LOCAL_PATH := $(call my-dir)
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := iFlyIME
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#LOCAL_PRIVILEGED_MODULE := true
#LOCAL_DEX_PREOPT := false
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MULTILIB :=64
LOCAL_PREBUILT_JNI_LIBS := \
lib/libEVad.so \
lib/libNativeCrashCollect.so \
lib/libcom_iflytek_inputmethod_aitalk.so \
lib/libcom_iflytek_inputmethod_clt.so \
lib/libcom_iflytek_inputmethod_effects.so \
lib/libcom_iflytek_inputmethod_minigame.so \
lib/libcom_iflytek_inputmethod_mmp.so \
lib/libcom_iflytek_inputmethod_mmrec.so \
lib/libcom_iflytek_inputmethod_ocr.so \
lib/libcom_iflytek_inputmethod_search.so \
lib/libcom_iflytek_inputmethod_security.so \
lib/libcom_iflytek_inputmethod_settingsnew.so \
lib/libcom_iflytek_inputmethod_skindiy.so \
lib/libcom_iflytek_inputmethod_speechnote.so \
lib/libcom_iflytek_inputmethod_themedetail.so \
lib/libcom_iflytek_inputmethod_thirdbkservices.so \
lib/libcom_iflytek_inputmethod_wk.so \
lib/libdexopt.so \
lib/libempty.so \
lib/libgeneralcore-jni-v1001.so \
lib/libiFlyNLI.so \
lib/libiflytek-opus.so \
lib/libintentengine.so \
lib/liblwl.so \
lib/libmaxengine.so \
lib/libmsaoaidauth.so \
lib/libmsaoaidsec.so \
lib/libspeechlib.so \
lib/libspeex_fyj2.so \
lib/libvipfont.so
include $(BUILD_PREBUILT)
################################################################################
LOCAL_MODULE指代的文件夹,我这里改了apk的名字,对应apk文件夹的名字也是如此
(注:apk包名的改变不影响实际应用的名称)
LOCAL_MULTILIB :=64 这里很显然是用来写多少位的
LOCAL_PREBUILT_JNI_LIBS :这个是用来引用.so文件的,你的lib库有啥,就做对应的修改
5.在项目中添加
路径:
device\mediatek\system\common\device.mk
内容:
PRODUCT_PACKAGES += iFlyIME
这个加入的位置不唯一,主要是让这个包能在系统中编译出来
6.添加字符串资源
路径:
vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml
(这个路径可能有的没有,是公司弄的,个别修改需要对照自己公司,可以通过命令:
find -name “defaults.xml” 去自己项目找,主要是在SettingsProvider下面的)
修改:
<string name="enabled_input_methods">com.google.android.googlequicksearchbox/com.google.android.voicesearch.ime.VoiceInputMethodService:com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME:com.iflytek.inputmethod/.FlyIME</string>
<string name="default_input_method">com.iflytek.inputmethod/.FlyIME</string>
说明一下,上面的是指安装的所有输入法,一般同一种输入法的语音和手写用 / 分离,不同种的输入法用 : ,我这里写了3个的输入法,讯飞是最后一个的,至于怎么写,前面那个是包名,可以用反编译软件去读取AndroidMainfest.xml文件中的package就是了,后面就不知道了
7.在loadSecureSettings(SQLiteDatabase db)添加对字符串资源的引用
路径:
vendor\mediatek\proprietary\packages\apps\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
(路径找对应的次级目录就好了,全部路径肯定是多少有区别的)
修改:
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.default_input_method);
8.烧录和检验成果
成果可以直接设置里面看,但咱们no,用命令
win+R 打开cmd 输入指令:
adb shell settings get secure default_input_method