(4.6.12.3)Android属性allowBackup安全风险浅析
2016-05-25 10:55
731 查看
1.allowBackup安全风险描述
AndroidAPI Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是True。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。
Android属性allowBackup安全风险源于adb backup容许任何一个能够打开USB 调试开关的人从Android手机中复制应用数据到外设,一旦应用数据被备份之后,所有应用数据都可被用户读取;adb
restore容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他Android手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。
尤其是通讯录应用,一旦应用程序支持备份和恢复功能,攻击者即可通过adb backup和adb restore进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将allowBackup标志值设置为false来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。
2.allowBackup安全影响范围
Android API Level 8以及以上系统
3.allowBackup安全风险详情
1)allowBackup 风险位置:
AndroidMannifest.xml文件android:allowBackup属性;
2) allowBackup风险触发前提条件:
未将AndroidMannifest.xml文件中的android:allowBackup属性值设为false;
3) allowBackup风险原理:
当allowBackup标志值为true时,即可通过adb backup和adb restore来备份和恢复应用程序数据;
4.allowBackup风险POC
1) 不在AndroidManifest.xml文件设置allowBackup属性值,其默认值为”true”,则应用可通过adb命令进行备份整个应用的数据;AndroidManifest.xml文件内容:
<span class="pun" style="color: rgb(147, 161, 161);"><?</span><span class="pln" style="color: rgb(72, 72, 76);">xml version</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"1.0"</span><span class="pln" style="color: rgb(72, 72, 76);"> encoding</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"utf-8"</span><span class="pun" style="color: rgb(147, 161, 161);">?></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">manifest xmlns</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">android</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="color: rgb(72, 72, 76);"> package</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"com.alibaba.jaq.allowbackuppoc"</span><span class="pln" style="color: rgb(72, 72, 76);"> android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">versionCode</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"1"</span><span class="pln" style="color: rgb(72, 72, 76);"> android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">versionName</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"1.0"</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">uses</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">sdk android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">minSdkVersion</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"10"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">uses</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">permission android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"android.permission.READ_PHONE_STATE"</span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">application android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">label</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"@string/app_name"</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">activity android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"LoginActivity"</span><span class="pln" style="color: rgb(72, 72, 76);"> android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">label</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"@string/app_name"</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">intent</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">filter</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">action android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"android.intent.action.MAIN"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">category android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"android.intent.category.LAUNCHER"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">intent</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">filter</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">activity</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">activity android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">".HomeActivity"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">application</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">manifest</span><span class="pun" style="color: rgb(147, 161, 161);">></span>
该POC应用启动后如下左图所示与登录之后如下右图所示:
![](http://static.freebuf.com/images/ue/52771426223576.jpg)
通过adb命令备份该应用登录之后的应用数据:
![](http://static.freebuf.com/images/ue/21321426223576.png)
![](http://static.freebuf.com/images/ue/83381426223577.png)
通过作者Nikolay Elenkov写的解密程序Android Backup Extractor[3]解密出备份的文件”allowBackup.ab”,可得知该POC应用的数据(登录用户名和密码)如下图所示:
![](http://static.freebuf.com/images/ue/87251426223578.png)
在另外一台Android手机上,安装该POC应用,然后通过恢复上面备份的数据,可以使得新安装的应用达到登录状态:
![](http://static.freebuf.com/images/ue/83981426223578.png)
恢复数据之前:
![](http://static.freebuf.com/images/ue/28771426223579.jpg)
点击“恢复我的数据”,恢复数据之后,在没有输入用户名和密码的情况下,通过恢复数据,点击应用图标,直接进入登录状态:
![](http://static.freebuf.com/images/ue/52571426223580.png)
2) 在AndroidManifest.xml文件显示设置allowBackup属性值为false,即android:allowBackup="false",则Android应用不可通过adb命令进行备份和恢复整个应用的数据;
AndroidManifest.xml文件内容:
<span class="pun" style="color: rgb(147, 161, 161);"><?</span><span class="pln" style="color: rgb(72, 72, 76);">xml version</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"1.0"</span><span class="pln" style="color: rgb(72, 72, 76);"> encoding</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"utf-8"</span><span class="pun" style="color: rgb(147, 161, 161);">?></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">manifest xmlns</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">android</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="color: rgb(72, 72, 76);"> package</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"com.alibaba.jaq.allowbackuppoc"</span><span class="pln" style="color: rgb(72, 72, 76);"> android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">versionCode</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"1"</span><span class="pln" style="color: rgb(72, 72, 76);"> android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">versionName</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"1.0"</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">uses</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">sdk android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">minSdkVersion</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"10"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">uses</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">permission android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"android.permission.READ_PHONE_STATE"</span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">application android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">allowBackup</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"false"</span><span class="pln" style="color: rgb(72, 72, 76);"> android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">label</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"@string/app_name"</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">activity android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"LoginActivity"</span><span class="pln" style="color: rgb(72, 72, 76);"> android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">label</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"@string/app_name"</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">intent</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">filter</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">action android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"android.intent.action.MAIN"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">category android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">"android.intent.category.LAUNCHER"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">intent</span><span class="pun" style="color: rgb(147, 161, 161);">-</span><span class="pln" style="color: rgb(72, 72, 76);">filter</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">activity</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"><</span><span class="pln" style="color: rgb(72, 72, 76);">activity android</span><span class="pun" style="color: rgb(147, 161, 161);">:</span><span class="pln" style="color: rgb(72, 72, 76);">name</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="str" style="color: rgb(221, 17, 68);">".HomeActivity"</span><span class="pun" style="color: rgb(147, 161, 161);">/></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">application</span><span class="pun" style="color: rgb(147, 161, 161);">></span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);"></</span><span class="pln" style="color: rgb(72, 72, 76);">manifest</span><span class="pun" style="color: rgb(147, 161, 161);">></span>
该POC应用启动后如下左图所示与登录之后如下右图所示:
![](http://static.freebuf.com/images/ue/67981426223580.jpg)
通过adb命令备份该应用登录之后的应用数据:
![](http://static.freebuf.com/images/ue/49401426223581.png)
通过解密出备份的文件”allowBackup.ab”,通过如下图所示可得知该POC应用的备份的数据为空,因此备份不成功:
![](http://static.freebuf.com/images/ue/52151426223582.png)
在另外一台Android手机上,安装该POC应用,然后通过恢复上面备份的数据,可以使得新安装的应用达到登录状态:
![](http://static.freebuf.com/images/ue/48061426223582.png)
恢复数据之前:
![](http://static.freebuf.com/images/ue/25841426223583.jpg)
恢复数据之后,重新打开应用,发现没有直接进入登录状态:
![](http://static.freebuf.com/images/ue/81301426223584.png)
5.allowBackup风险修复建议
阿里聚安全建议将allowBackup属性值显示设置为false:
出于安全考虑,阿里聚安全建议关闭应用备份功能; 在AndroidMenifest.xml文件中,将相应组件的“android:allowBackup”属性设置为“false”,如下示例:<span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"><</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">application android</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">:</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">allowBackup</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">=</span><span class="str" style="color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">"false"</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> android</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">:</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">label</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">=</span><span class="str" style="color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">"@string/app_name"</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"><</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">activity android</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">:</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">name</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">=</span><span class="str" style="color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">"LoginActivity"</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> android</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">:</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">label</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">=</span><span class="str" style="color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">"@string/app_name"</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"><</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">intent</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">-</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">filter</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"><</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">action android</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">:</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">name</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">=</span><span class="str" style="color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">"android.intent.action.MAIN"</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">/></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"><</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">category android</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">:</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">name</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">=</span><span class="str" style="color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">"android.intent.category.LAUNCHER"</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">/></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"></</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">intent</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">-</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">filter</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"></</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">activity</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"><</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">activity android</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">:</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">name</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">=</span><span class="str" style="color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">".HomeActivity"</span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">/></span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"> </span><span class="pun" style="color: rgb(147, 161, 161); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;"></</span><span class="pln" style="color: rgb(72, 72, 76); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">application</span><span class="pln"><span style="font-family:Arial, Console, Verdana, Courier New;color:#333333;">></span></span>
相关文章推荐
- 关于Android Lollipop
- android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open dat
- Android小记-SQLiteOpenHelper正确使用避免leak
- android 保存Json数据到本地
- android view坐标系统
- 利用gradle构建android版本号、包名
- UWP-消息提示(仿Android)
- android处理拍照旋转问题及带来的对内存占用的思考
- android处理拍照旋转问题及带来的对内存占用的思考
- Android中的Volley通信框架
- PullToRefresh开源demo
- Android屏幕适配(三)适配文件的自动生成和系统适配
- android 事件分发机制,最简单详解
- intellij idea (Android studio )外部程序 打开某扩展名(格式)
- 这是我第一篇文章,不谈技术层,只谈Android发展
- Android Tombstone/Crash的log分析和定位
- Android的jni下c与java数据互传测试代码
- 生产者-消费者模型在Android开发中的应用
- Android Studio 2.1中的instant run功能 介绍
- Android Studio Gradle 对应的下载目录