SetupWizard调试技巧

原创 2016年05月31日 10:06:16

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 1

Set 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禁止掉,使它不可用。



版权声明:本文为博主原创文章,未经博主允许不得转载。

Android Provision(开机向导setupwizard程序)

转载请标明出处: http://blog.csdn.net/u011974987/article/details/50502769; 本文出自:【Xiho的博客】 先来说说我为什么写下...

Android ROM开发之定制Google SetupWizard

之前的博客Android ROM开发之预制GMS 给自己挖了一个坑——针对定制GMS会另写一篇,本篇补坑。定制GMS本身是一个很广泛的问题,简单的如根据需求取舍GMS包中的某些应用,复杂点的如定制Ch...

Android开机向导setupwizard,设置系统语言,WiFi向导

Android的框架设计有考虑到开机向导这一场景,因此我们实现开机向导参考Android的Provision.apk Provision: MSM8976/repo/packages/apps/Pro...

常见的WindowManager问题分析

1.UI hang and adb is still alive when running LGE compliant monkey test with DUT for 771 Minutes Win...

Android之 MTP框架和流程分析 (1)

本文的目的是介绍Android系统中MTP的一些相关知识。主要的内容包括:
  • kv110
  • kv110
  • 2014年09月21日 20:43
  • 5427

WRT54GS_SetupWizard.zip

  • 2014年10月12日 18:33
  • 1.79MB
  • 下载

setupwizard

  • 2014年09月02日 17:05
  • 708KB
  • 下载

关于Google应用SetupWizard.apk和ro.setupwizard.mode

最近产品集成了Google的相关应用SetupWizard.apk,但是很不是给力的是,这个开机导购式Wizard,让人感觉不是很舒服。OK,那就干掉它。干掉它,完了,google相关account相...

谷歌浏览器调试技巧

  • 2017年11月30日 10:01
  • 923KB
  • 下载

Delphi 调试技巧

  • 2017年06月03日 11:54
  • 50KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SetupWizard调试技巧
举报原因:
原因补充:

(最多只允许输入30个字)