Android O版本如何在userdebug 版本上remount

本文介绍了解决因VERITY导致的系统修改后无法开机的问题。提供了两种解决方案:一种是在烧录前进行解锁操作;另一种是在编译前对特定文件进行修改。

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

[DESCRIPTION]

在需要对image文件(如system.img)等进行解压->修改->打包->烧录后,可能会出现无法开机的现象。

[SOLUTION]

这个问题主要是受到了VERITY的影响。

解决的方法有两种:

一.在烧录前进行unlock操作
1. MTK User load boot up to home screen
2. Please enable OEM unlocking in settings
3. Please enable USB debugging in settings
4. Press Volume up key + power key into fastboot mode
5. Connect phone to PC, input “fastboot flashing unlock” / “fastboot oem unlock”
6. fastboot flash system system.img
7. fastboot reboot

二.在编译前作一定的修改:

2.1 Android N之前有两种方法:
(1) 将build/target/product/verity.mk中的
PRODUCT_SUPPORTS_VERITY := true
改为:
PRODUCT_SUPPORTS_VERITY := false

   (2) 在vendor/mediatek/proprietary/hardware/fstab/{platform}/fstab.in中
    /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/vendor /vendor __MTK_VNDIMG_FSTYPE ro wait,verify,recoveryonly
     将"verify"去除。

2.2 Android O中需要进行如下改动:
(1)在build/target/product/verity.mk中,将
PRODUCT_SUPPORTS_VERITY := true
PRODUCT_SUPPORTS_VERITY_FEC := true
改为 :
PRODUCT_SUPPORTS_VERITY := false
PRODUCT_SUPPORTS_VERITY_FEC := false

(2) 在/device/mediateksample/{Project}/ProjectConfig.mk中,将
MTK_DM_VERITY_OFF = no
改为 :
MTK_DM_VERITY_OFF = yes

(3)在/kernel/{arch|arch64}/{arm|arm64}/configs/{Project}defconfig中,将

CONFIG_DM_VERITY=y
改为 :
CONFIG_DM_VERITY=n
同时,添加:
CONFIG_MTK_DM_VERITY_OFF=y

(4)
For O0:
在system/core/fs_mgr/Android.mk 中,将
ifneq (,(filtereng,(filtereng,(TARGET_BUILD_VARIANT)))
LOCAL_CFLAGS += -DALLOW_SKIP_SECURE_CHECK=1
endif
改为:
#ifneq (,(filtereng,(filtereng,(TARGET_BUILD_VARIANT)))
LOCAL_CFLAGS += -DALLOW_SKIP_SECURE_CHECK=1
#endif

For O1:
在/system/core/fs_mgr/Android.bp中,在
58    product_variables: {
前面添加:
cppflags: ["-DALLOW_SKIP_SECURE_CHECK=1"],
<think>我们正在处理一个Android系统定制问题,目标是在Android 7.1设备上用DBLauncher.apk替换默认Launcher。根据引用[1]和引用[3],替换系统Launcher需要将自定义Launcher预置到系统分区(如/system/priv-app)并正确配置AndroidManifest.xml。同时,引用[2]和引用[4]提到可能需要修改系统代码来改变HOME的category,但在Android 7.1上通常不需要这么复杂。 关键步骤: 1. 确保DBLauncher.apk声明了HOME category(如引用[3]所示)。 2. 将DBLauncher.apk预置为系统应用(使用系统签名并放到priv-app目录)。 3. 移除或禁用原有的Launcher(如Launcher3)。 4. 设置DBLauncher为默认启动器(可通过代码强制设置或让用户选择一次后设为默认)。 由于用户要求的是系统级替换(即一开机就是DBLauncher),我们需要通过系统编译的方式将DBLauncher内置到系统中。 详细步骤: 步骤1:验证DBLauncher的AndroidManifest.xml 确保DBLauncher的MainActivity包含以下intent-filter(引用[3]): ```xml <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <!-- 可选,用于支持monkey测试 --> <category android:name="android.intent.category.MONKEY"/> </intent-filter> ``` 步骤2:准备系统编译环境 将DBLauncher.apk放入AOSP源码树中的合适位置,例如:`vendor/your_company/apps/DBLauncher/` 在该目录下创建Android.mk文件,内容如下: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := DBLauncher LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := DBLauncher.apk LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := platform # 使用平台签名 LOCAL_PRIVILEGED_MODULE := true # 放入priv-app目录 include $(BUILD_PREBUILT) ``` 步骤3:将DBLauncher添加到产品配置文件 在设备的产品配置文件(通常是`device/<厂商>/<设备>/<设备>.mk`)中添加: ```makefile PRODUCT_PACKAGES += DBLauncher ``` 同时,移除原有的Launcher(如Launcher3): ```makefile PRODUCT_PACKAGES -= Launcher3 ``` 步骤4:重新编译系统并烧写 执行: ```bash source build/envsetup.sh lunch <your_device>-userdebug # 选择对应的设备 make -j8 ``` 编译完成后,烧写系统镜像。 步骤5:验证 设备启动后,应该直接进入DBLauncher。如果出现选择启动器的对话框,说明原有Launcher没有被完全移除或者DBLauncher的配置有误。 如果不想重新编译整个系统(例如在已有设备上替换),可以通过ADB命令替换,但需要root权限: 1. 将/system分区重新挂载为可读写: ```bash adb root adb remount ``` 2. 删除原有的Launcher(注意:如果删除系统Launcher可能会导致系统不稳定,建议先备份): ```bash adb shell rm -rf /system/priv-app/Launcher3 # 根据原有Launcher的目录名调整 ``` 3. 推送DBLauncher.apk到系统目录: ```bash adb push DBLauncher.apk /system/priv-app/DBLauncher/ ``` 4. 设置权限: ```bash adb shell chmod 755 /system/priv-app/DBLauncher adb shell chmod 644 /system/priv-app/DBLauncher/DBLauncher.apk ``` 5. 重启设备。 注意:直接推送APK需要DBLauncher.apk已经用平台密钥签名(与系统签名一致),否则无法正常安装。 如果设备启动后仍然出现选择启动器的对话框,可以通过以下命令设置默认启动器(需要root): ```bash adb shell su pm set-home-activity com.example.dblauncher/.MainActivity # 替换为实际的组件名 ``` 或者通过删除其他Launcher的HOME category(但这种方法需要修改系统,不推荐)。 引用[1]提到替换系统应用需要重新挂载/system分区为可写,在编译时不需要,但如果是临时替换则需要。 总结:在Android 7.1上替换默认Launcher的最佳实践是通过系统编译将自定义Launcher预置为系统应用,并移除原有Launcher。 相关问题: 1. 如何为DBLauncher.apk进行系统签名? 2. 在Android 7.1上,如果系统分区不可写(如无root权限)的情况下如何替换Launcher? 3. 替换Launcher后出现崩溃如何调试?</think>### 在 Android 7.1 上使用 DBLauncher.apk 替换默认 Launcher 的完整步骤 #### 步骤 1:准备系统环境(挂载 system 分区为可写) ```bash adb root adb remount # 重新挂载/system为可写 adb shell mount -o remount,rw /system # 手动挂载(如 remount 失败) ``` #### 步骤 2:替换系统 Launcher ```bash # 备份原厂启动器(重要!) adb shell cp /system/priv-app/Launcher3/Launcher3.apk /sdcard/Launcher3_backup.apk # 删除原厂启动器 adb shell rm -rf /system/priv-app/Launcher3 # 创建新目录并设置权限 adb shell mkdir -p /system/priv-app/DBLauncher adb shell chmod 755 /system/priv-app/DBLauncher # 推送并设置权限 adb push DBLauncher.apk /system/priv-app/DBLauncher/ adb shell chmod 644 /system/priv-app/DBLauncher/DBLauncher.apk ``` #### 步骤 3:验证 AndroidManifest.xml 配置 确保 `DBLauncher.apk` 包含正确的启动器声明(参考引用[3]): ```xml <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MONKEY"/> </intent-filter> ``` #### 步骤 4:强制设置默认启动器 ```bash # 清除旧启动器设置 adb shell pm clear com.android.launcher3 # 设置默认启动器(替换包名) adb shell cmd package set-home-activity com.example.dblauncher/.MainActivity ``` #### 步骤 5:重启并验证 ```bash adb reboot adb shell dumpsys window windows | grep mCurrentFocus # 应输出:mCurrentFocus=Window{... com.example.dblauncher/...} ``` ### 关键注意事项(Android 7.1 特有问题) 1. **签名要求** DBLauncher 必须使用**平台签名**(非 debug 签名): ```bash java -jar signapk.jar platform.x509.pem platform.pk8 DBLauncher.apk DBLauncher_signed.apk ``` 2. **权限修复** 若出现权限错误,手动修复 SELinux: ```bash adb shell restorecon -R /system/priv-app/DBLauncher ``` 3. **兼容性处理** 在 `AndroidManifest.xml` 中添加: ```xml <uses-feature android:name="android.software.home_screen" /> <!-- Android 7.1 特有 --> ``` ### 系统编译集成方案(推荐) 若需永久替换(参考引用[1][2]): 1. 在 AOSP 源码中创建目录:`vendor/your_project/apps/DBLauncher` 2. 添加 `Android.mk`: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := DBLauncher LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := DBLauncher.apk LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := platform # 关键! LOCAL_PRIVILEGED_MODULE := true include $(BUILD_PREBUILT) ``` 3. 在 `device.mk` 中: ```makefile PRODUCT_PACKAGES += DBLauncher PRODUCT_PACKAGES -= Launcher3 # 移除原启动器 ``` ### 常见问题解决 - **启动器选择弹窗**:执行 `adb shell pm set-home-activity` 后立即重启 - **黑屏无响应**:检查日志 `adb logcat | grep -E "ActivityManager|DBLauncher"` - **权限不足**:在 `AndroidManifest.xml` 添加: ```xml <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS"/> ``` > **提示**:在 Android 7.1 上,`priv-app` 目录权限比普通 `system/app` 更高,是存放系统启动器的推荐位置[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值