为Android系统添加config.xml 新配置的设置
作者:xcy2011sky 发布时间:2022-02-19 23:31:48
在日常系统开发中,经常需要在adroid的framework修改或添加自己的配置。例如在config.xml 添加一个新的变量。我这边测试发现如果只是简单的添加配置项,在代码里面怎么也访问不到。为了解决这个问题仔细看了一下代码,最终发现需要在public.xml 定义才可以。
下面用一个例子来说明一下。
1.在framework/base/core/res/res/valus/config.xml 添加默认输入配置:
<!--
set default inputmethod.
-->
<string translatable="false" name="config_def_input_method">com.taypo.android.trskb/.TRSoftKeyboard</string>
这是默认输入法为土耳其语。
修改后,需要在framework/base/core/res/res z执行mm 编译一下修改。
完成后,croot到根目录,执行make update-api 更新一下api。
2.如果使用这个配置项
我这边在framework/base/service/java/com/android/interanl/InputMethodManangerService.java 中的resetDefaultIMeLocked函数使用这个变量
private void resetDefaultImeLocked(Context context) {
// Do not reset the default (current) IME when it is a 3rd-party IME
if (mCurMethodId != null
&& !InputMethodUtils.isSystemIme(mMethodMap.get(mCurMethodId))) {
return;
}
InputMethodInfo defIm = null;
String id=context.getResources().getString(com.android.internal.R.string.config_def_input_method);
Slog.i(TAG, "internal.id: " + id);
for (InputMethodInfo imi : mMethodList) {
if(imi.getId().equals(id)) defIm=imi;
}
/* if (defIm == null) {
if (InputMethodUtils.isValidSystemDefaultIme(
mSystemReady, imi, context)) {
defIm = imi;
Slog.i(TAG, "Selected default: " + imi.getId());
}
}
}
if (defIm == null && mMethodList.size() > 0) {
defIm = InputMethodUtils.getMostApplicableDefaultIME(
mSettings.getEnabledInputMethodListLocked());
Slog.i(TAG, "No default found, using " + defIm.getId());
}
*/
if (defIm != null) {
setSelectedInputMethodAndSubtypeLocked(defIm, NOT_A_SUBTYPE_ID, false);
}
}
这样使用很简单吧,一开始我以为就是这样,查了很多资料大家都是这样使用的。最后编译吧报了如下错误
frameworks/base/services/java/com/android/server/InputMethodManagerService.java:726: 找不到符号
符号: 变量
config_def_input_method
位置: 类
com.android.internal.R.string
String id=context.getResources().getString(com.android.internal.R.string.config_def_input_method);
但是我明明定义了,为什么还是找不到呢。
解决方案:
1.在framework/base/core/res/res/values/public.xml文件里增加对这些string的声明。
2.framework/base/core/res/res/ 下mm编译
3.到根目录下执行make update-api 更新api。
<public type="string" name="config_def_input_method" id="0x01040018" />
注意在 里面的id时一个递增的值,在系统中是唯一的,千万不要重复。
到此,在变异inputmethodmanagerService.java 就可以pass啦。
补充知识:向config.xml中添加一个配置项
1. 在config.xml中添加一项(路径:frameworks/base/core/res/res/values/)
如:
<bool name="config_myValue">true</bool>
2. 在 frameworks/base/core/res/res/values/symbols.xml中,添加:
<java-symbol type="bool" name="config_myValue"/>
3. 在frameworks/base/core/res/res/values/android.xml中,添加
一带有id的项,但此id怎么生成呢?如下步骤:
首先:在frameowrks/base/tools/aapt/ResourceTable.cpp中
在addSymbols()函数中,把如下的注释去掉:
//printf("<android type=\"%\" name=\"%\" id=...>,
然后,在代码根目录下,执行:
make framework-res > res.txt
就可以把android原始资源输出到res.txt文件中。
然后,把其中的
<android type="bool" name="config_myValue" id="0x0111005b"/>
的代码拷贝出来放到android.xml文件中即可。
来源:https://blog.csdn.net/xcy2011sky/article/details/41009869


猜你喜欢
- 本文实例讲述了C#使用oledb操作excel文件的方法。分享给大家供大家参考。具体分析如下:不管什么编程语言都会提供操作Excel文件的方
- 【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1
- 以前的Android(4.1之前的版本)中,SDcard路径通过“/sdcard”或者“/mnt/sdcard”来表示,而在JellyBea
- 这篇文章主要介绍了java通过Jsoup爬取网页过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 概述基于java + swing + JFrame 的图书馆管理系统,租车,还车,管理员管理用户,付款等。部分代码public class
- List去重复,我们首先想到的可能是 利用List转Set集合,因为Set集合不允许重复。所以达到这个目的。 如果集合里面是简单对
- 开发过程中经常遇到需要用某些http://maven.apache.org/中没有的jar包,这个时候可以用maven命令自己添加通常这些j
- 前言可能很多情况下,我们都会有在activity中获取view 的尺寸大小(宽度和高度)的需求。面对这种情况,很多同学立马反应:这么简单的问
- 本文实例讲述了C#敏感词过滤实现方法。分享给大家供大家参考。具体如下:这两天突然想到了敏感词过滤 就结合网上找到的资料自己写了一个,脏字数量
- 以前只知道@在C#中为了写文件路径的\不要加转义符而在前面加上@标识符,没想到@还有其他的作用1.忽略转义字符例如string fileNa
- FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化
- 本文实例为大家分享了Java实现简单万年历的具体代码,供大家参考,具体内容如下1 要求1、输入年份;2、输入月份;3、输出某年某月的日历。2
- 同学们在开发过程中,经常需要查看程序与数据库之间的SQL语句,以便于调试和分析。本文将介绍如何在控制台中显示MyBatis的SQL语句,帮助
- /// <summary> /// 转义字符
- ArrayList中存放引用数据类型ArrayList中存放引用类型时,存放的是一个引用,因此在放入ArrayList之后再进行改动会影响到
- 前言上一篇我们认识了Kotlin编程语言,也搭建好开发环境。本篇就进入Kotlin的基础语法介绍,与其他编程语言一样,Kotlin也有自己的
- 前言作为Java开发者,我们每天都会创建大量的对象,但是,我们总是使用管理依赖系统(如Spring框架)来创建这些对象。其实还有其他方法可以
- 最近在做一个项目涉及到将包含图片的简单网页下载到本地,方便离线时观看,在这里分享一下,大家做下简单修改就可以用到自己的项目中了。(这里用到了
- 前言OpenTelemetry作为一个分布式追踪的项目,他支持非常多的语言,如Java,Golang,Python等,鉴于笔者的主力语言为J
- 类加载是什么把磁盘中的java文件加载到内存中的过程叫做类加载当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把