Android9判断第一次启动或者ota升级后第一次启动

这篇博客探讨了Android系统如何通过`SystemServer`类中的`startBootstrapServices`方法判断设备是否是首次启动,并将状态写入`persist.sys.isfirstboot`系统属性。`isFirstBootOrUpgrade`方法检查`isFirstBoot`和`isUpgrade`,如果为真则设置属性为`1`,否则为`0`。在C++代码中,可以使用`property_get`来读取该属性并据此执行相应操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将是否第一次启动状态写入系统属性persist.sys.isfirstboot,其他地方获取属性值判断是否第一次启动。

    frameworks/base/services/java/com/android/server/SystemServer.java
    private void startBootstrapServices() {
    Slog.i(TAG, "Reading configuration...");mFirstBoot = mPackageManagerService.isFirstBoot();
    mFirstBoot = mPackageManagerService.isFirstBoot();
+    if(isFirstBootOrUpgrade()){
+       SystemProperties.set("persist.sys.isfirstboot","1");
+         Slog.w(TAG, "isFirstBootOrUpgrade");
+     }else{
+        SystemProperties.set("persist.sys.isfirstboot","0");
+     }
    mPackageManager = mSystemContext.getPackageManager();

private boolean isFirstBootOrUpgrade() {
    return mPackageManagerService.isFirstBoot() || mPackageManagerService.isUpgrade();
}

在c++代码中使用,例子如下:

   #include <cutils/properties.h>
    char isfirstboot[PROPERTY_VALUE_MAX] = { 1 };
    property_get("persist.sys.isfirstboot", isfirstboot, "");
    if ( strcmp(isfirstboot,"1") == 0){
        xxxx
    }
### Android 设备 OTA 升级回滚方法 对于 Android 设备而言,在执行 OTA (Over-The-Air) 升级后如果遇到问题,可能需要进行回滚操作来解决问题或将系统恢复至先前更稳定的版本。然而值得注意的是,并不是所有的设备都支持直接的 OTA 回滚功能;这通常取决于制造商的具体实现以及所使用的 Android 版本。 #### 利用内置选项尝试自动修复或回滚 部分较新的 Android 手机和平板电脑提供了内建机制用于处理更新失败的情况。当检测到新固件存在问题时,这些装置可能会自动触发一次重启并试图回到之前的软件状态[^1]。此过程一般无需用户干预即可完成。 #### 使用官方渠道获取旧版ROM包手动降级 假如上述自动化流程未能生效,则可考虑通过如下途径实施人工干预下的回退动作: - **联系客服**:访问手机品牌的官方网站寻找客户支持服务,询问是否能够获得指定编号的安全补丁级别较低但仍保持安全性的正式 ROM 文件。 - **下载适合的固件**:一旦取得授权许可后的历史镜像链接地址,按照指引说明选取与当前硬件相匹配的目标安装包。 - **进入恢复模式准备刷写**:依据不同品牌机型特性,通常是组合按键(如电源键加音量减小按钮)启动 recovery 模式[^5]。 - **清除Dalvik缓存/数据(视情况而定)**:为了确保最佳兼容性和性能表现,有时还需要在此阶段清理某些特定目录内的残留记录项。 - **传输并应用ZIP档案**:借助 USB 数据线连接 PC 后利用ADB命令推送本地存储介质中的压缩包到目标位置,再经由`adb sideload`指令发起传送任务[^2]。 请注意,在整个过程中务必遵循官方文档指示行事,切勿擅自选用未经验证来源不明的第三方资源以免造成不可逆损害。 ```bash # 假设已经处于fastboot模式下并且有权限执行相应操作 $ adb devices # 查看设备连接状况 $ adb reboot bootloader # 如果不在引导加载程序界面则切换过去 $ fastboot flash boot old-boot.img # 替换为实际路径名 ... ``` > 温馨提示:以上代码片段仅作为示意用途,请读者参照具体环境调整参数设置。 #### 预防措施的重要性重申 无论采取哪种形式来进行 OTA 更新前后的管理活动,始终强调做好充分准备工作十分必要。比如提前备份个人资料、确认电池剩余容量足够支撑全程运作等预防性举措均有助于减少意外风险发生的概率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值