AOSP内置搜狗输入并设置默认输入法
前期准备
AOSP分支:aosp13_r7
系统版本:Ubuntu 22.04.1 LTS
工具:手,vscode,winscp(因为我是用的服务器编译)
下载搜狗输入法
思路:
1.集成搜狗输入法到aosp
2.删除系统输入法
3.设置搜狗输入法为默认输入法
4.编译测试
5.问题整理
集成搜狗输入法到aosp
搜狗输入法的apk重命名为SougouInput.apk
连接上服务器,进入到
/packages/apps目录
cd /packages/apps/
新建一个命名为SougouInput的文件夹
mkdir SougouInput
将SougouInput.apk上传至SougouInput文件夹下

新建一个Android.mk文件
touch Android.mk
接着
vim Android.mk
将下面的内容粘贴到Android.mk里
LOCAL_PATH := $(my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := SougouInput
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRIVILEGED_MODULE := false
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MULTILIB :=64
LOCAL_PREBUILT_JNI_LIBS := \@lib/arm64-v8a/libaffinity.so \@lib/arm64-v8a/libbugly_dumper.so \@lib/arm64-v8a/libBugly_Native.so \@lib/arm64-v8a/libc++_shared.so \@lib/arm64-v8a/libcleanmmap.so \@lib/arm64-v8a/libcrash_collect.so \@lib/arm64-v8a/libCtaApiLib.so \@lib/arm64-v8a/libframesequence.so \@lib/arm64-v8a/libframesequence_doutu.so \@lib/arm64-v8a/libhttpdns.so \@lib/arm64-v8a/libluajava.so \@lib/arm64-v8a/libmarsxlog.so \@lib/arm64-v8a/libMMANDKSignature.so \@lib/arm64-v8a/libmmkv.so \@lib/arm64-v8a/libnative-sec.so \@lib/arm64-v8a/libopus_v1.so \@lib/arm64-v8a/libostar.so \@lib/arm64-v8a/libqmp.so \@lib/arm64-v8a/libSGMtlgShell.so \@lib/arm64-v8a/libsimple_vad.so \@lib/arm64-v8a/libsimplevadwrapper.so \@lib/arm64-v8a/libsogou_speex_nt_v01.so \@lib/arm64-v8a/libsogouime.so \@lib/arm64-v8a/libsogouupdcore.so \@lib/arm64-v8a/libtma_blowing_sound_detection.so \@lib/arm64-v8a/libtrace-canary.so \@lib/arm64-v8a/libturingga.so \@lib/arm64-v8a/libvivo_account_wave.so \@lib/arm64-v8a/libweibosdkcore.so \include $(BUILD_PREBUILT)
保存Android.mk文件
接着打开文件/build/make/target/product/aosp_product.mk
#
# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
## Includes all AOSP product packages
$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_product.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_product.mk)# Default AOSP sounds
$(call inherit-product-if-exists, frameworks/base/data/sounds/AllAudio.mk)# Additional settings used in all AOSP builds
PRODUCT_PRODUCT_PROPERTIES += \ro.config.ringtone?=Ring_Synth_04.ogg \ro.config.notification_sound?=pixiedust.ogg \ro.com.android.dataroaming?=true \# More AOSP packages
PRODUCT_PACKAGES += \messaging \PhotoTable \preinstalled-packages-platform-aosp-product.xml \WallpaperPicker \SougouInput \ #这里新加一行# Telephony:
# Provide a APN configuration to GSI product
PRODUCT_COPY_FILES += \device/sample/etc/apns-full-conf.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/apns-conf.xml
保存文件后,搜狗输入法已经被我们集成到aosp中了
删除系统输入法
刚刚我们在/packages/inputmethods文件夹下的LatinIME就是系统默认的输入法

既然我们把搜狗输入法内置进去了,那么LatinIME就没有存在的必要了,删除的话需要找到使用LatinIME的地方
这里为了提高效率,使用vscode远程连接到aosp代码目录,全局搜索 LatinIME

从这里看到有很多个,询问度娘后注释handheld_handle.mk里的LatinIME

设置搜狗输入法为默认输入法
接下来把搜狗输入法设置为默认输入法
打开defaults.xml文件
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
在最后加上配置
<!-- 设置默认输入法 --><string name="def_enabled_input_methods" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>

打开DatabaseHelper.java文件
framwork/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
搜索loadSecureSettings方法,定位到一个比较优雅的位置
private void loadSecureSettings(SQLiteDatabase db) {SQLiteStatement stmt = null;try {stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"+ " VALUES(?,?);");// Don't do this. The SystemServer will initialize ADB_ENABLED from a// persistent system property instead.//loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);省略.......loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,R.bool.def_accessibility_speak_password);//添加到这里loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,R.string.def_enabled_input_methods);省略.......
}
编译测试
回到aosp目录下,执行
source build/envsetup.sh
//这里的xxx自行选择,例如pixel4就选aosp_flame-userdebug
lunch xxx
//输入-j32之前心里要对电脑配置有点数,没数的话可以只输入m,它会自己选择适当的核数
m -j32
two thousand years later …

问题整理
- 在执行lunch后发现毛都没有

问题出在handheld_handle.mk中,#LatinIME \ 引起的错误,解决方法是把LatinIME \删掉

相关文章:
AOSP内置搜狗输入并设置默认输入法
前期准备 AOSP分支:aosp13_r7 系统版本:Ubuntu 22.04.1 LTS 工具:手,vscode,winscp(因为我是用的服务器编译) 下载搜狗输入法 思路: 1.集成搜狗输入法到aosp 2.删除系统输入法 3.设置搜狗输入法为默…...
ICCV 2023|通过慢学习和分类器对齐在预训练模型上进行持续学习
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 作者介绍 张耕维 悉尼科技大学在读博士生,研究方向为持续学习 报告题目 通过慢学习和分类器对齐在预训练模型上进行持续学习 内容简介 持续学习研究的目标在于提高模型利用顺序到达的数据进行学习的…...
蓝桥杯打卡Day5
文章目录 日志排序重复者 一、日志排序IO链接 本题思路:本题就是根据就是排序的知识点,在sort内部可以使用仿函数来改变此时排序规则。 #include <bits/stdc.h>const int N10010; int n; std::string logs[N];int main() {std::ios::sync_with_stdio(false)…...
QT for andriod
QT for andriod 开发 apk软件,因为一些特殊的原因,在这里简单的记录一哈自己开发apk的流程和心得。 首先说明我采用的环境有哪些? 1、QT的版本,个人建议5.15.2的版本及以上,我是用的5.15.2。 2、andriod studio 可以…...
【广州华锐互动】AR技术在配电系统运维中的应用
随着科技的不断发展,AR(增强现实)技术逐渐走进了我们的生活。在电力行业,AR技术的应用也为巡检工作带来了许多新突破,提高了巡检效率和安全性。本文将从以下几个方面探讨AR配电系统运维系统的新突破。 首先,AR技术可以实现虚拟巡检…...
TiDB 一栈式综合交易查询解决方案获“金鼎奖”优秀金融科技解决方案奖
日前,2023“金鼎奖”评选结果揭晓, 平凯星辰(北京)科技有限公司研发的 TiDB 一栈式综合交易查询解决方案获“金鼎奖”优秀金融科技解决方案奖 , 该方案已成功运用于 多家国有大行、城商行和头部保险企业 。 此次获奖再…...
《网络是怎样连接的》(六)
本文主要取材于 《网络是怎样连接的》 第六章。 目录 6.1 服务器概览 6.2 服务器的接收操作 6.3 Web服务器程序解释请求消息并作出响应 6.4 浏览器接收响应消息并显示内容 简述:本文主要内容是解释 网络包到达服务器之后,如何给客户端响应的。 服务…...
2023年高教社杯数学建模国赛 赛题浅析
2023年国赛如期而至,为了方便大家尽快确定选题,这里将对赛题进行浅析,以分析赛题的主要难点、出题思路以及选择之后可能遇到的难点进行说明,方便大家尽快确定选题。 难度排序 B>A>C 选题人数 C>A>B (预估结果&…...
使用QT操作Excel 表格的常用方法
VBA 简介 Microsoft Office软件通常使用VBA来扩展Windows的应用程序功能,Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言。 在VBA的参考手册中就可以看到具体函数、属性的用法,Qt操作Excel主要通过 QAxObj…...
vue前后端端口不一致解决方案
在config index.js文件中 引入如下代码即可 const path require(path) const devEnv require(./dev.env) module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: devEnv.OPEN_PROXY false ? {} : {/api: {target: http://localhos…...
springcloudSeata处理分布式事务之1.7.0
1.5.0之后版本发生了很大改变 1.seata安装 1.1官网地址 http://seata.io/zh-cn/ 1.2下载地址 https://github.com/seata/seata/releases 下载的是seata-server-1.7.0.zip 1.3seata相关配置的修改 seata-server-1.7.0\seata\conf下的application.yml进行修改 server:por…...
每日刷题|回溯法解决全排列问题
食用指南:本文为作者刷题中认为有必要记录的题目 前置知识:回溯法经典问题之组合 ♈️今日夜电波:爱人错过—告五人 1:11 ━━━━━━️💟──────── 4:52 …...
10-JVM调优工具详解
上一篇:09-JVM垃圾收集底层算法实现 前置启动程序 事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用 1.Jmap 此命令可以用来查看内存信息,实例个数以及占用内存大小 jmap -histo 14660 #查看历史…...
东方博易oj——3119 - 约瑟夫问题2(链表)
文章目录 题目题目描述输入输出样例输入 输出标签 AC代码 题目 题目描述 约瑟夫问题:有 n n n只猴子,按顺时针方向围成一圈选大王(编号从 1 1 1到 n &#…...
C++,day0907
#include <iostream>using namespace std; struct stu { private:int num; private:double score[32];public:void setNum(){cout <<"请输入学生人数:";cin >>num;}void input(){cout<<"请输入学生的成绩:"<<endl;for(int i…...
孤儿僵尸守护进程的简单理解
孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。 如何模仿一个孤儿进程: 答案是: kill 父…...
学习笔记——Java入门第一季
1.1 Java的介绍与前景 Java语言最早期的制作者:James Gosling(詹姆斯高斯林) 1995年5月23日,Sun Microsystems公司宣布Java语言诞生。 1.2 Java的特性与版本 跨平台 开源(开放源代码) Java代码ÿ…...
更改注册表exe值后的惨痛经历
装软件时由于执行性文件打不开,搜索教程更改了exefile的值,最后整个电脑崩了,所有EXE都打不开,折腾了5个小时,什么办法都试了,甚至重置电脑都不让,打算拿电脑城修电脑了,突然搜到了一…...
stable diffusion实践操作-LyCORIS
系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、LyCORIS是什么?二、使用步骤1.下载2.安装3 使用 二、整理模型1.LoHa-v1.0-pynoise 总结 前言 LyCORIS,可以理解为lora的加强版本。 LyCORIS - Lora beYond Conventional methods,…...
无需公网IP教你如何外网远程访问管家婆ERP进销存
文章目录 前言 1.管家婆服务2. 内网穿透2.1 安装cpolar内网穿透2.2 设置远程访问 3. 固定访问地址4. 配置固定公网访问地址 前言 管家婆辉煌系列产品是中小企业进销存、财务管理一体化的典范软件,历经十余年市场的洗礼,深受广大中小企业的欢迎ÿ…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
