Android OTA升级后输入法异常和应用丢失的分析

在Android开发过程中,我们可能会遇到各种各样的问题。其中,OTA升级后的问题尤为棘手,因为它们可能与多个因素相关 因为同样的固件只有OTA会存在某些问题 会让你怀疑人生。本文将探讨一个具体的问题:OTA升级后输入法的异常,并提供可能的原因和解决方案。

同一版本固件,线刷不会 只有OTA升级后会存在一些异常BUG。这个问题很早之前就碰到过 当时没有记录习惯,现在又碰到了 所以很快就回忆起原因并解决。

-----0825补充开始-----


  1. 预置应用的消失

    • 使用Android.mk文件并设置LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall将应用预置到preinstall目录时,发现在OTA升级后,这些应用有概率会丢失。
    • 当设置LOCAL_PRIVILEGED_MODULE := true时(预置到system/priv-app),这些应用在OTA升级后能够保持完好。

    原因与猜测

    • 可能的原因是OTA升级脚本没有正确处理preinstall目录下的应用,导致它们在升级过程中被覆盖或删除。
    • 使用LOCAL_PRIVILEGED_MODULE可能为应用提供了更高的权限或保护级别,使其在OTA升级中不被影响。
  2. 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分区的处理,以确保系统的稳定性和功能完整性,另外提醒 我认为这种改法不是最佳改法,不排除这种改法会导致系统其他设置出现异常(但我没遇到过^^)。

猜你喜欢

转载自blog.csdn.net/SHH_1064994894/article/details/132470102
今日推荐