在Android开发过程中,我们可能会遇到各种各样的问题。其中,OTA升级后的问题尤为棘手,因为它们可能与多个因素相关 因为同样的固件只有OTA会存在某些问题 会让你怀疑人生。本文将探讨一个具体的问题:OTA升级后输入法的异常,并提供可能的原因和解决方案。
同一版本固件,线刷不会 只有OTA升级后会存在一些异常BUG。这个问题很早之前就碰到过 当时没有记录习惯,现在又碰到了 所以很快就回忆起原因并解决。
-----0825补充开始-----
- 预置应用的消失:
- 使用
Android.mk
文件并设置LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall
将应用预置到preinstall
目录时,发现在OTA升级后,这些应用有概率会丢失。 - 当设置
LOCAL_PRIVILEGED_MODULE := true
时(预置到system/priv-app),这些应用在OTA升级后能够保持完好。
- 原因与猜测:
- 可能的原因是OTA升级脚本没有正确处理
preinstall
目录下的应用,导致它们在升级过程中被覆盖或删除。 - 使用
LOCAL_PRIVILEGED_MODULE
可能为应用提供了更高的权限或保护级别,使其在OTA升级中不被影响。
- latin输入法失效:
- 尽管latin输入法是预置在
system/app
目录下的,但在OTA升级后它变得不可用。 - 具体表现为:
/data/data/
目录下缺少对应的应用目录。
- 原因与猜测:
- 这可能是因为OTA升级过程中清除了某些应用数据,导致latin输入法失去了其必要的数据文件(实际查看/data/data/目录下没有com.android.inputmethod.latin)。
- 另一个可能性是权限问题,导致latin输入法在OTA升级后无法访问其数据目录。
另外输入法和应用不能用的原因我猜测是全志平台系统安装preinstall和/system/app 部分应用存在滞后性 , 然后没有安装完成/完整之后 流程就跑完了? 目前分析就这样后续有时间分析 有进展再补充
-----0825补充结束-----
问题描述
在进行OTA升级后,发现输入法不生效。具体表现为:
- 使用
settings get secure default_input_method
命令返回为空。 - 在Android的设置应用中,输入法选项中看不到预置的输入法。
- 在
/data/data/
目录下可以看到输入法的数据,但尝试手动设置默认输入法也无效。
对比分析
通过进一步的测试和对比,发现:
- 使用相同的固件进行线刷时,输入法正常。
- 但通过OTA方式升级时,出现上述的输入法异常。
这种差异表明,问题可能与OTA升级过程中某些特定的步骤或设置有关。
原因猜测
OTA升级和线刷的一个主要区别是:OTA升级通常不会清除/data
分区,而线刷可能会。因此,我们可以猜测问题的原因可能是:
- OTA升级不会清除
/data
分区,导致某些设置或配置在OTA升级后不一致或丢失。 - 默认的输入法配置存储在
/data
分区,OTA升级后,系统可能无法正确读取或更新这些配置。
解决方法
为了解决这个问题,可以考虑在每次开机时重新加载/data/system/users/0/settings_secure.xml
文件。这个文件存储了用户的安全设置,包括默认输入法。通过这种方法,我们可以确保默认输入法的设置在每次开机时都被正确更新。
具体的实现方法是修改SettingsProvider.java
文件,使其在每次开机时都重新加载settings_secure.xml
文件。
+++ b/android/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -1858,9 +1858,9 @@ public class SettingsProvider extends ContentProvider { // Every user has secure settings and if no file we need to migrate. final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId); File secureFile = getSettingsFile(secureKey); - if (secureFile.exists()) { + /*if (secureFile.exists()) { return; - } + }*/
总结
OTA升级是一个复杂的过程,可能会涉及多个系统组件和设置。当我们遇到OTA升级后的问题时,需要进行详细的分析和对比测试,以确定问题的原因并找到合适的解决方案。本文探讨的输入法异常问题只是其中的一个例子,提醒我们,在进行OTA升级时,需要特别注意/data
分区的处理,以确保系统的稳定性和功能完整性,另外提醒 我认为这种改法不是最佳改法,不排除这种改法会导致系统其他设置出现异常(但我没遇到过^^)。