Android恢复出厂设置

恢复出厂设置核心代码:

sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));

即发送一个广播,需要在AndroidManifest.xml配置

<receiver android:name="com.android.server.MasterClearReceiver"
          android:permission="android.permission.MASTER_CLEAR"
            android:priority="100" >
            <intent-filter>
            <!-- For Checkin, Settings, etc.: action=MASTER_CLEAR -->
            <action android:name="android.intent.action.MASTER_CLEAR" />

           <!-- MCS always uses REMOTE_INTENT: category=MASTER_CLEAR -->
            <category android:name="android.intent.category.MASTER_CLEAR_NOTIFICATION" />
            </intent-filter>
        </receiver>

并加入权限

<uses-permission android:name="android.permission.MASTER_CLEAR" />

基本上以上就可以实现恢复出厂设置的。系统的设置功能就是这样完成恢复出厂设置的,但是这个过程中有很多问题,主要是因为权限造成的。

最明显的问题是,添加android.permission.MASTER_CLEAR权限时会报错。

Permission is only granted to system apps

这里就说明了我们自己实现恢复出厂设置和系统设置恢复出厂的区别

这个错误很好解决,只需要 project\clean 一下就去掉错误了

但是运行程序时,当然不会恢复出厂啦,提示是权限不足,

E/AndroidRuntime(2562): java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MASTER_CLEAR_NOTIFICATION from pid=2562, uid=10027

根据提示可以看出是广播的权限,但是我们已经声明了权限

android:permission="android.permission.MASTER_CLEAR"

在frameworks/base/core/res/AndroidManifest.xml文件中,可以看到

<!-- ================================================ -->

<!-- Special broadcasts that only the system can send -->

<!-- ================================================ -->

<protected-broadcast android:name="android.intent.action.MASTER_CLEAR_NOTIFICATION" />

当然还有很多类似的

也就是说我们不能使用这个广播,但是没有其他办法的情况下只能铲除这块石头

直接把这条注释掉,然后重新编译系统,烧录,然后就能够前进一步

继续运行会发现新的错误

E/MasterClear(1060): Can‘t perform master clear/factory reset

E/MasterClear(1060): java.io.FileNotFoundException: /cache/recovery/command: open failed: EACCES (Permission denied)

依然是权限问题,即没有/cache/recovery/文件夹的操作权限

网上有好几种解决办法,我只说我最终解决问题的办法

(1)AndroidManifest.xml添加android:sharedUserId="android.uid.system"

(2)Android.mk添加LOCAL_CERTIFICATE := platform

此时,程序是不能安装的,提示错误:

Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

大概意思就是要给apk添加系统权限

我用系统自带

用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序

在platform/build/target/product/security/中找到platform.pk8 platform.x509.pem等签名文件

signapk.jar:由/platform/build/tools/signapk/编译产出,可以在/out/host/linux-x86/framework/中找到

把这几个文件与apk放到同一目录下,命令行执行

java -jar signapk.jar platform.x509.pem platform.pk8 MyDemo.apk MyDemo_signed.apk

把MyDemo_signed.apk安装后,发现任然不能安装,

错误Failure [INSTALL_FAILED_DEXOPT]

这是因为在system\app下面的apk是经过优化的,而dex文件不会打包到apk中,dex文件会被优化后,生成odex文件。

下面就是程序经编译之后,在workspace/out/target/product/generic/system/app/下生成的.odex和.apk两个文件

Install: out/target/product/generic/system/app/xxx.odex
Install: out/target/product/generic/system/app/xxx.apk

这样安装apk时,就会缺少dex文件,导致报错[INSTALL_FAILED_DEXOPT]。

找到未优化过的apk,即在out/target/product/generic/obj/APPS/下找到对应的APP:package.apk.unaligned

当然可以重命名一下 package.apk.unaligned ————>package.apk

安装后完成

时间: 2024-10-27 16:46:36

Android恢复出厂设置的相关文章

android 不打开Shared sdcard功能,内置SD卡中预制资源,删除资源,恢复出厂设置恢复

当有内置SD卡,且不打开shared sdcard功能的情况下,需要在SD卡中预置一些客户资源. 这些资源end user可见,也可删除.在资源被user删除之后,执行恢复出厂设置功能,需要恢复这些预置资源. 1. 预置同样的资源到user不可见的分区,如/system下. 在alps\vendor\mediatek\project_name\artifacts\out\target\product\your_project_name\system\ 下创建目录, 将预制资源放于此目录下,重新b

客制化“*#0*#”恢复出厂设置

客制化"*#0*#"恢复出厂设置 packages/apps/Dialer/src/com/android/dialer/SpecialCharSequenceMgr.java private static final String MMI_RESET_PHONE = "*#0*#";public static final String FORMAT_AND_FACTORY_RESET = "com.android.internal.os.storage.

enable密码重置及恢复出厂设置

捡回来一台 Cisco Catalyst 3560G-24TS Switch 三层交换,开始把玩 想恢复出厂设置,但有enable密码,接下来首先enable密码重置 1.断电 2.连接串口线 3.按着MODE键通电,等10秒左右松手 4.此时CLI进入Xmode # 载入flash flash_init # 重命名配置文件 rename flash:config.text flash:config.old # 启动 boot 启动后跳过向导,enable密码就没了. 其实此时就类似于恢复了出厂

Normal mode下,sensor校准数据,恢复出厂设置,不丢失

目前支持的ACC,GYRO,PS 三种sensor的校准数据,是保存在nvram中,并且也有加入到nvram binregion中,可以实现恢复出厂设置后,sensor校准数据的恢复. 但是nvram binregion中的sensor数据是要在产线上做校准并保存的,而且永远都是这个固定值. 但是客户实际上是在normal mode下,需要随时做校准,而且需要保存最近的校准值不丢失. 因nvram binregion和sensor daemon源码不开放,所以无法将sensor nvram保存在

恢复出厂设置后能找回手机数据吗?手机恢复出厂设置后还原数据的方法介绍

走在大街上,使用智能手机的用户随处可见,伴随着智能手机的普及,随之而来的"恢复出厂设置"问题也不容忽视.简单来说,恢复出厂设置就是将手机回到最原始的状态,比如说,你的手机软件太多了,并且因为这些软件老是出现一些问题,还占据了手机的很多存储,或者手机出现了小问题,这个时候就可以用它了. 在恢复出厂设置后,手机中原来的数据还能否还原?相信这是所有手机用户都关心的一个问题,如果我们在进行出厂设置的时候没有妥善的备份我们的数据,该如何是好呢?如何找回出厂设置后丢失的数据呢?不用担心,只需借助一

OpenWRT 恢复出厂设置命令

如果通过无线或者有线口无法连接到router,可以用恢复某些设置重新设置路由器. 1. 开机,等着一个工作灯亮的时候立即按下rest键2秒,然后就开始拼命闪烁,很好现在进入failsafe模式了. 2.设置电脑的ip为静态ip 192.168.1.x,并设置子网掩码(一般为点一下自动填充). 3.用网线连接路由器的有线口. 4.telnet到路由器,默认ip为192.168.1.1 5.若只是修改某些设置可以:(uci这个命令是很有用的) 进入后mount可以看到root是不给写的,所以还要解锁

设置禁用恢复出厂设置功能--系统恢复、还原

方案 —设置禁用恢复出厂设置功能--系统恢复.还原 参考方案一: 禁用系统恢复 运行 reagentc /disable 可禁用恢复环境: 如果点击恢复-重置此电脑则会出现以下情况: 如果禁用高级启动,则可以通过以下方式: 1.禁用大容量存储,SD卡 通过设置注册表实现, HKEY_Local_Machine\\SYSTEM\\CurrentControlSet\\Services\\USBSTOR 设置键“Start“值”3“表示启用,“4“表示禁用 2.禁用光驱 通过设置注册表实现, HKE

预置资源,恢复出厂设置保留

说明:由于厂商要求预置自定义资源,须在Gallery显示及恢复出厂设置后仍然保留,前期想法为直接预置到data分区下,这样Gallery就可以直接读取,但是恢复出厂设置之后整个分区都会被格式化,所以这个办法行不通,要想解决这个问题,资源就必须放到一个system分区里备份,为了开放资源让应用程序能够共享,最终还得把资源复制到data(storage/emulated/0/...)分区里,所以这里就分两步走,第一是把资源预置到系统分区,然后第一个开机后再把资源复制到指定目录. 1.预置资源 可以把

手机恢复出厂设置后如新机般好用吗?答案可能要让你们哭了!

长时间使用手机,手机渐渐地会出现卡顿,内存不够的现象.这个时候很多人为了让手机变得更加流畅便选择了恢复手机出厂设置的方法.但是这样手机就真的能如同新手机一样好用吗?当然肯定不是的,我们恢复出厂设置后手机确实流畅了很多,犹如新机般好用.但是这种好用的感觉持续不了多久,为什么呢?因为手机除了系统,它的硬件老化你是控制不了的.这就是为什么电池不如新的一般耐用了.还有越来越多的手机软件的升级更新,也会占据手机更多的内存空间.所以硬件的耗损和软件的更新这两大硬伤在这,想通过恢复手机出厂设置让手机如同新机一