【Android】adb mount挂载sdcard,删除垃圾app

本文介绍了如何使用ADB工具挂载Android设备的SD卡,并删除不必要的应用程序。主要针对已root的设备,内容来源于KyleCe在优快云上的博客文章。

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

转载署源(By:KyleCe):http://blog.youkuaiyun.com/kyleceshen/article/details/50008185

之前做android root时,需要挂载sdcard,删应用,具体的批处理就不在这里做说明了

@d:
@cd \sdk\platform-tools
cmd
rem @adb push E:\projects4as\AdsPushPlus\build\outputs\apk\AdsPushPlus-hdx-release.apk /sdcard/ads.apk
rem @echo off
rem @adb shell su -c "mount -oremount,rw /system"
rem @adb shell su -c "rm /system/app/ads*.apk"
rem @adb shell su -c "cp /sdcard/ads.apk /system/app/ads.apk"
:: @adb shell su -c "chmod 777 /system/app/ads.apk"
:: @adb shell su -c "reboot"
rem echo su > temp.txt
rem echo su >> temp.txt
rem echo mount -oremount,rw /system > temp.txt
rem echo rm /system/app/ads*.apk >> temp.txt
rem echo cat /sdcard/ads.apk > /system/app/ads.apk >> temp.txt
rem echo chmod 777 /system/app/ads.apk >> temp.txt
rem echo reboot >> temp.txt
rem adb shell < temp.txt
rem del temp.txt
rem pause

转载署源:http://blog.youkuaiyun.com/kyleceshen/article/details/50008185
By:KyleCe

<think>我们正在解决一个特定问题:如何更新被标记为persistent的com.android.systemui应用。从用户的问题中,我们得知错误信息为:Failure[INSTALL_FAILED_INVALID_APK:Packagecom.android.systemuiisapersistentapp.Persistentappsarenotupdateable.]分析:com.android.systemui是系统UI的核心组件,通常在系统分区(/system/priv-app/SystemUI)中,并且在其AndroidManifest.xml中设置了android:persistent="true"。系统不允许通过普通的adbinstall命令更新这类应用,因为它们是系统启动的关键组件。解决方案:由于是系统应用,并且是persistent的,我们通常需要将其推送到系统分区,并设置正确的权限。以下步骤需要root权限,并且需要能够重新挂载系统分区为可写(remount)。步骤:1.准备一个已经正确签名的SystemUIAPK(必须和原系统使用相同的签名密钥,否则系统会拒绝安装)。如果是在开发调试中,可能使用的是测试密钥,但通常设备出厂时使用的是厂商的密钥,所以一般需要厂商签名。2.将设备连接到电脑,并确保adb有root权限(adbroot)。如果没有root权限,则无法进行以下操作。3.将新的APK推送到设备的临时目录,例如:/sdcard/或/data/local/tmp/4.将系统分区重新挂载为可写:adbremount如果remount命令失败,可以尝试:adbrootadbdisable-verity#如果设备有dm-verity保护,需要先禁用(可能需要重启)adbrebootadbrootadbremount5.备份原有的SystemUIAPK(可选,但强烈建议):adbshell#在shell中cp/system/priv-app/SystemUI/SystemUI.apk/sdcard/SystemUI_backup.apk6.将新的APK复制到系统目录(覆盖原文件):adbpushpath/to/your/SystemUI.apk/system/priv-app/SystemUI/如果原目录下有oat目录(包含优化后的文件),最好将其删除,因为系统会重新优化:adbshellrm-rf/system/priv-app/SystemUI/oat7.设置正确的权限:adbshellchmod644/system/priv-app/SystemUI/SystemUI.apk(注意:系统应用的权限通常是644,即rw-r--r--)8.重新启动设备:adbreboot注意事项:-如果设备重启后系统UI无法启动(出现黑屏或不断重启),则说明新的SystemUIAPK存在问题。这时需要进入recovery模式或通过adb在启动前恢复备份的APK。-由于SystemUI是系统核心组件,错误的APK可能导致系统无法正常启动。因此,在操作前最好确保有备份,并知道如何进入recovery恢复。替代方案(无需替换系统分区):如果是因为调试需要,并且设备是userdebug版本,可以考虑重新编译整个系统镜像,并刷入。但这通常更耗时,不是快速调试的方法。如果用户在没有root的设备上尝试,则无法更新。因为系统分区的写操作需要root。另外,也可以尝试修改应用的persistent标志,但是SystemUI作为系统核心应用,它的persistent标志不应该修改,否则可能影响系统启动顺序。所以,修改标志的方法在这里不可行。相关问题:1.如何确认一个应用是否是persistent应用?2.如何获取系统的签名密钥来签名自己的SystemUI?3.如果设备没有root权限,还有其他方法更新SystemUI吗?4.如何恢复因为更新SystemUI失败导致的黑屏问题?注意:本操作具有高风险,可能导致设备无法启动,请谨慎操作!</think> ### 解决`com.android.systemui`更新问题的分步指南 `com.android.systemui`作为Android核心组件,因其**持久化属性**和**系统分区安装**的特性,无法直接更新[^2][^5]。以下是安全有效的解决方案: --- ### 🔧 一、推荐方案(需root/system权限) ```bash # 1. 获取设备root权限 adb root adb remount # 解锁系统分区写入权限 # 2. 备份原SystemUI(关键预防措施) adb shell cp /system/priv-app/SystemUI/SystemUI.apk /sdcard/SystemUI_backup.apk # 3. 推送新版本到系统目录 adb push new_SystemUI.apk /system/priv-app/SystemUI/ # 4. 修正文件权限 adb shell chmod 644 /system/priv-app/SystemUI/new_SystemUI.apk # 5. 清理ART缓存(避免签名冲突) adb shell rm -rf /system/priv-app/SystemUI/oat # 6. 强制重启设备 adb reboot ``` > ✅ **验证成功**:重启后执行 > `adb shell dumpsys package com.android.systemui | grep version` > 确认版本号已更新 --- ### ⚠️ 二、高风险场景处理 #### 1. 遇到启动黑屏/循环重启(操作失误时) ```bash # 进入Recovery模式执行: adb shell mount /system adb shell cp /sdcard/SystemUI_backup.apk /system/priv-app/SystemUI/SystemUI.apk adb reboot ``` #### 2. 签名冲突解决(错误INSTALL_FAILED_INVALID_APK[^3][^4]) ```bash # 提取原厂签名密钥(需设备密钥库) adb pull /system/etc/security/otacerts.zip # 用原密钥签名新APK java -jar signapk.jar platform.x509.pem platform.pk8 new_SystemUI.apk signed_SystemUI.apk ``` --- ### 🔍 技术原理 SystemUI作为**PID=1000**的核心进程[^5]: 1. 声明于`AndroidManifest.xml`: ```xml <application android:persistent="true" .../> ``` 2. 系统启动时序: $$ \text{init.rc} \rightarrow \text{SystemUI} \rightarrow \text{Launcher} $$ 3. PackageManager的防护逻辑: ```java if (isPersistentApp && !isSystemUpgrade) { throw new PackageManagerException( "Persistent apps are not updateable" // 源码位置: PackageManagerService.java ); } ``` --- ### 📚 相关问题 1. 非root设备如何调试SystemUI? → 使用**模拟器编译自定义ROM**或**测试设备刷debug版本系统** 2. 如何验证APK是否具有`persistent`属性? → `aapt dump badging SystemUI.apk | grep persistent` 3. 系统签名与平台签名有何区别? → 平台签名使用厂商密钥,系统签名用`testkey` 4. 如何制作包含SystemUI更新的OTA包? → 在ROM编译时修改`/system/priv-app/SystemUI`目录内容 5. 频繁更新SystemUI导致系统不稳定的根本原因? → 违反持久化应用的启动时序约束[^5] > 💡 **最后建议**:SystemUI更新需谨慎,生产环境建议通过**OTA系统升级**实现,避免直接替换APK导致系统崩溃风险。调试时务必做好备份!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值