MSetupWizard源码路径device/厂商/common/apps/MSetupWizard

MSetupWizard安装完android系统后第一次启东时出现的让用户选择系统语言等信息的一个apk。因此它很特殊,它只在两种情况下才会出现:

1.安装完系统后第一次启动系统时出现

2.reset(恢复出厂设置)后第一次启动出现

如果还有其他情况,请告诉我!

正因为这样,如果想修改该apk的源码,调试是一件很麻烦的事情,使用am命令启动不了它,怎么启动它是我调试它最大的问题了。

方法1: 方法其实非常简单,就是恢复出厂设置,然后系统会重启,重启后会弹出设置系统语言的选项,这个时候不要点下一步,让页面停止在这个页面,在这个页面做其他操作没有关系,就是不要让该页面退出就好了。然后安装自己修改后编译出来的apk,安装后的apk会自动打开(不知道为什么,我操作过程就是这样),这样反复调试即可。(我就是用的这种方法,感觉算是比较方便的)

方法2:当然,另外一种方法就是重新编译一版系统,该软件中把禁止该activity的代码注释掉。这就比较麻烦了。

方法3:如果我不想恢复出厂设置,也不想重烧系统,那怎么办呢?办法是改个包名就好啦!如果代码比较简单,推荐这种方法。改完包名后,还是要把禁止该activity的那部分代码注释掉,不然,这个包名一会又不可用啦!

这么大费周折的根本就是这个activity自己禁止了自己。以下是对各部分代码的简单介绍:

MSetupWizard之所以如此特殊,只会出现一次,原因是这样的:MSetupWizard的主acitivity是DefaultActivity,在该activity中:

    private void finishSetupWizard() {// Add a persistent setting to allow other apps to know the device has been provisioned.Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);// remove this activity from the package manager.PackageManager pm = getPackageManager();ComponentName name = new ComponentName(this, DefaultActivity.class);pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);finish();}

这个函数在退出该activity之前被调用,这个函数的功能就是: remove this activity from the package manager.注释中说的很清楚,核心代码就是

    pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
    文档中是这样解释这个函数的:
<span style="white-space:pre">  </span><pre name="code" class="java"> public abstract void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)Added in API level 1Set the enabled setting for a package component (activity, receiver, service, provider). This setting will override any enabled state which may have been set by the component in its manifest.
Parameters
componentName   The component to enable
newState    The new enabled state for the component. The legal values for this state are: COMPONENT_ENABLED_STATE_ENABLED, COMPONENT_ENABLED_STATE_DISABLED and COMPONENT_ENABLED_STATE_DEFAULT The last one removes the setting, thereby restoring the component's state to whatever was set in it's manifest (or enabled, by default).
flags   <span style="white-space:pre"> </span>Optional behavior flags: DONT_KILL_APP or 0. 

更加具体的信息可以在查阅api文档,它的作用就是把特定 Component禁止掉,使它不可用。

SetupWizard调试技巧相关推荐

  1. 转:Python 代码调试技巧

    Python 代码调试技巧 转载于:https://www.cnblogs.com/kira2will/p/4254754.html

  2. 你可能不知道的 IDEA 高级调试技巧

    作者:十光年 www.cnblogs.com/jun1019/p/9741224.html 一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图, ...

  3. Javascript调试技巧整理

    整理一下网上看到的实用调试技巧! 1. 不要使用alert 首先,alert只能打印出字符串,如果打印的对象不是String,则会调用toString()方法将该对象转成字符串(比如转成[object ...

  4. iphone XCode调试技巧之EXC_BAD_ACCESS中BUG解决

    http://mobile.51cto.com/iphone-279455.htm XCode调试技巧之EXC_BAD_ACCESS中BUG解决是本文要介绍的内容,在iphone开发的时候EXC_BA ...

  5. Flutter调试技巧总结——高效开发的秘密

    刚开始学前端的时候看到大家都是用的console.log()作为调试的手段,也可以说,很多人只会用console.log().在学习Flutter开发app的时候,我就在思考,除了使用print()来 ...

  6. [Cocoa]XCode的一些调试技巧

    XCode的一些调试技巧 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 XCode 内置GDB,我 ...

  7. 你所不知道的 Android Studio 调试技巧

    Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手.作为开发者,调试并发现bug,进而解决,可是我们的看家本领.正所谓,工欲善其事必先利其器,和其他开发工具一样, ...

  8. Postman 调试技巧

    Postman 调试技巧 最为一个最基础的猿,我相信你已经掌握的一般接口使用Postman请求了. 如果你还在为下面问题发愁,你可以读下去. 1.后台验证通过请求header中的动态token. 2. ...

  9. 反调试技巧总结-原理和实现(1)(2)(3)(4)(5)(6)......

    反调试技巧总结-原理和实现 -------------------------------------------------------------------------------------- ...

最新文章

  1. CSS中的id选择器和class选择器简单介绍
  2. NTFS磁盘的安全与管理
  3. 浅谈 翻硬币游戏【Nim博弈】
  4. 计算机桌面组成部分教案,计算机基础 教案设计(完整版).doc
  5. 3W+字的设计模式手册
  6. jwt重放攻击_JWT+ASP.NET MVC 时间戳防止重放攻击
  7. VB Listview导出到CSV文件函数
  8. Android-Splash
  9. UML中对关系的描述
  10. MFC总结之CListCtrl用法及技巧
  11. JAVA数据转换常用方法
  12. ActivityMq下载、安装、使用
  13. RouterOS 动态IP接入上网设置教程(超详细)
  14. 微信小程序实现智能识别名片
  15. YOLOv2论文中英文对照翻译
  16. python自动登录路由器_Openwrt路由器使用Python自动登录北航校园网
  17. 【转】如何检测wifi信号强度? -- 不错
  18. 新用户腾讯云国外服务器2核4G服务器使用攻略
  19. ug585-Zynq-7000中文文档阅读笔记
  20. 中心极限定理-通俗理解

热门文章

  1. 服务器怎么互传文件,服务器互传文件
  2. 关于Windows的dns修复
  3. 外国月亮也不圆?在硅谷,只有失败者才朝九晚五
  4. 安卓微信浏览器无法支持input multiple的h5属性多图上传
  5. 常微分方程(2):一阶线性微分方程
  6. python绘制单线图_如何绘制管道单线图
  7. 解读ORACLE数据库的统一命名与编码规范
  8. Python视频抽帧,视频转图片帧并保存
  9. 求二叉树根节点到叶节点的所有路径
  10. 当微信小程序遇上filter~