- 浏览: 663030 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yigeisme:
你好,不已.html和.jsp和.jpg结尾的正则表达式怎么写 ...
深入入门正则表达式(java) - 2 - 基本实例 -
su1216:
多谢指正yigeisme 写道1-12(小时,月份)正则:^( ...
深入入门正则表达式(java) - 2 - 基本实例 -
yigeisme:
1-12(小时,月份)正则:^(1[012]|\d)$应该改成 ...
深入入门正则表达式(java) - 2 - 基本实例 -
heikefangxianceshi:
小三将军 写道楼主,我想问下你给的Real.tar.gz是什么 ...
android手机root后的安全问题 (一) -
heikefangxianceshi:
这个程序运行的前提是手机root,但你的手机怎么root的呢? ...
android手机root后的安全问题 (一)
导读:我们以如何抢先开机启动为例,来说明接收无序广播的静态广播接收器的接收顺序
(注意,文本只是陈述结果,所以叫结果篇,之后的文章再给出源码分析)
首先先说一下android中的广播和广播接收器
广播可以分为有序、无序和sticky共三种
广播接收器可以分为静态和动态两种
首先我们要明确两个问题
1.接收无序广播的接收器接收到广播的顺序是有序的
2.接收无序广播的接收器也一样可以设置优先级的
这里主要说一下多个应用中的静态广播接收器(优先级都相同的情况下
)接收无序广播时的接收顺序
注意:这里主要描述结论,具体原理后续给出
注意:本文在提及的同时出现在同一设备的静态接收器默认具有相同的优先级,这点很重要
我们以开机时候发出的广播android.intent.action.BOOT_COMPLETED为例,这是个无序广播
如果应用想要开启自启动,那么就要监听这个广播,程序启动之前,动态广播接收器肯定是无法使用的,我相信大家对此没有什么疑问
如果先接收到,那么程序就会先启动,至于先启动的优势,我想那些迫不及待的人比谁都清楚
接收顺序到底与什么有关,说实话,我也不清楚,不过先别急着拍我,我也不是完全不知道……
顺序与解析应用的顺序是一致的,但是解析应用的顺序是怎样的呢?
首先要告诉大家的是,这和你apk的文件名没有关系!
比如a.apk、b.apk两个应用,结果并不能保证a能比b先接收到,或者b能比a先接收到
然后告诉大家,这和apk的文件名有关系!
没错,但是为什么这么说?
用户安装一个应用有这么几个步骤
1下载一款应用,假设下载下来的时候这个应用叫new.apk
2安装。一般情况下,用户会在手机中操作,点击文件,然后系统会安装页面……然后大家都知道。另一种情况程序猿可能喜欢使用adb install -r new.apk
大家都知道,第三方应用会存放在/data/app目录下
当安装完毕之后,我们去这里看看,发现一个严峻的问题,那就是,你找不到一个叫new.apk的文件!
那你会找到什么?你会找到一个文件,他的名字是以与new.apk这个应用包名开始的,然后可能会跟着"-数字.apk",比如:com.android.test-1.apk
接收的顺序与这个名字是有关的!那么关系是怎样的呢?
系统在开机的时候,会按着一个顺序解析apk
1.首先,会解析手机中的/system/framework这个目录,原生系统中,这下面就一个apk - framework-res.apk
当然各个厂商也会加入自己的内容,比如我的这个目录下就有com.htc.resources.apk
2.然后受到重视的文件夹按顺序分别为:
/system/app
/vendor/app
/data/app
/drm/app-private
(代码分析在下一篇博客给出)
那么每个文件夹下解析的顺序是怎样的呢
我们先只看/data/app,也就是用户安装的第三方应用的存放位置
这与下面代码返回结果的顺序是一致的
File file = new File("/data/app/"); String[] files = file.list();
也就是说,我们按顺序打印这个数组,就能知道哪个接收器会先接收到这个广播,哪个会后接收到(为什么与这个结果一致,下篇文章分析)
(记住:本文默认说的这些接收器假设具有相同的优先级,如果优先级不同,当然是高优先级的先接收到)
现在大家可能有这么几个疑问:
1.String[] java.io.File.list(),这个函数的返回结果是怎样的顺序呢?
2.如何执行上面那段代码呢?
首先回答问题1
我不知道!
我们来看看javadoc给出的说明
说的很清楚,人家不给你任何保证
听说在windows下执行的时候,结果会按着字母顺序排列,可惜,android是linux
但是我们可以耍赖,打印一下上面结果,如果自己的应用拍在后面,就改包名,直到你能排到前面,当然这不是什么好办法,但我也没有什么更好的办法了
现在回答问题2
执行这段代码需要root权限,因为一般应用是没有这个目录的读取权限的
如果手机没有root怎么办?你不会找一个root过的来查看结果吗……
我做了一个实验,我写了几个只有receiver的应用,把他们的包名分别设置为大家常用的、关系的应用包名
飞信:cn.com.fetion
LBE隐私卫士:com.lbe.security.lite
Handsent:com.handsent.nextsms
金山手机卫士:com.ijinshan.mguard
360手机卫士:com.qihoo360.mobilesafe
QQ手机管家:com.tencent.qqpimsecure
一个测试应用:com.example.boottest
File file = new File("/data/app/"); String[] files = file.list(); for (int i = 0; i < files.length; i++) { System.out.println("/data/app/:files["+(i+1)+"]:" + files[i]); }
结果为:
/data/app/:files[8]:com.tencent.qqpimsecure-1.apk
/data/app/:files[9]:com.qihoo360.mobilesafe-1.apk
/data/app/:files[10]:com.ijinshan.mguard-1.apk
/data/app/:files[11]:cn.com.fetion-1.apk
/data/app/:files[12]:com.lbe.security.lite-1.apk
/data/app/:files[13]:com.handsent.nextsms-1.apk
/data/app/:files[14]:com.example.boottest-1.apk
实际接收顺序为:
12-06 15:19:58.187: I/System.out(1880): getPackageName:com.tencent.qqpimsecure
12-06 15:19:58.288: I/System.out(1893): getPackageName:com.qihoo360.mobilesafe
12-06 15:19:58.378: I/System.out(1906): getPackageName:com.ijinshan.mguard
12-06 15:19:58.488: I/System.out(1920): getPackageName:cn.com.fetion
12-06 15:19:58.608: I/System.out(1933): getPackageName:com.lbe.security.lite
12-06 15:19:58.718: I/System.out(1946): getPackageName:com.handsent.nextsms
12-06 15:19:58.908: I/System.out(1959): getPackageName:com.example.boottest
如果其中一个优先级较高,比如cn.com.fetion,那么实际的接收顺序为
getPackageName:cn.com.fetion
getPackageName:com.tencent.qqpimsecure
getPackageName:com.qihoo360.mobilesafe
getPackageName:com.ijinshan.mguard
getPackageName:com.lbe.security.lite
getPackageName:com.handsent.nextsms
getPackageName:com.example.boottest
最后注意:
上面只是一个简单测试,并不是这些应用就是按着这个顺序,因为他们优先级也许不一致,也许在/data/app下的文件名不一致,导致顺序不一致
不过,看到这里,你应该知道如何去先于他们开机启动了
对于ROOT后的机器
留给大家一个问题,如果我是病毒,那我应该怎样去做呢?
显然,最理想的方式就是找个壳子应用,把实体病毒apk放到/system/framework目录中去,当然别忘了把自己的优先级设置成最高,不然也是白费
请大家不要用root的手机随意下载软件,更不要以任何借口制造任何病毒!
转贴请保留以下链接
本人blog地址
评论
filelist返回的顺序也可能是对的,但我前面的观点是 每个系统返回的都不一样。
data/app下面的文件名是什么,并不取决于你安装前文件的名字,也不完全和你应用包名一致
没发现我list出来的结果很多有带有“-1”吗
list的结果和字母顺序无关,所以多了个“-1”,list的结果就和之前不一样了
最近加班,又忙着搬家,所以还没来得及写“原因篇”
包名-1.apk
包名-1.apk
也不一定都是这样
所以list顺序结果每个手机上可能不一致,即使是同一个rom
filelist返回的顺序也可能是对的,但我前面的观点是 每个系统返回的都不一样。
data/app下面的文件名是什么,并不取决于你安装前文件的名字,也不完全和你应用包名一致
没发现我list出来的结果很多有带有“-1”吗
list的结果和字母顺序无关,所以多了个“-1”,list的结果就和之前不一样了
最近加班,又忙着搬家,所以还没来得及写“原因篇”
包名-1.apk
filelist返回的顺序也可能是对的,但我前面的观点是 每个系统返回的都不一样。
data/app下面的文件名是什么,并不取决于你安装前文件的名字,也不完全和你应用包名一致
没发现我list出来的结果很多有带有“-1”吗
list的结果和字母顺序无关,所以多了个“-1”,list的结果就和之前不一样了
最近加班,又忙着搬家,所以还没来得及写“原因篇”
filelist返回的顺序也可能是对的,但我前面的观点是 每个系统返回的都不一样。
我上面说的data/app目录那段你看了没有
这个目录下,文件的名字,和我列出的是不一样的
我之前说过,结果和什么有关和什么没有关系
filelist返回的顺序也可能是对的,但我前面的观点是 每个系统返回的都不一样。
第二,虚拟机通过ddms发短信;真机用其它号码发送到本机,通过logcat查看log打印。
我不管什么filelist什么的,通过接收短信来看的。你对我实验环境还有什么看法
环境没啥问题
结果也没啥问题
我不知道你想表明什么呢
filelist返回的顺序也可能是对的,但我前面的观点是 每个系统返回的都不一样。
第二,虚拟机通过ddms发短信;真机用其它号码发送到本机,通过logcat查看log打印。
我不管什么filelist什么的,通过接收短信来看的。你对我实验环境还有什么看法
com.lbe.security.lite com.tencent.qqpimsecure com.qihoo360.mobilesafe com.betalee.ccSMSBlocker
这个log是如何打出来的
我上面说过,顺序是和File.list的返回值一样,前提是他们的优先级相同
对你的data/app执行File.list
com.lbe.security.lite com.tencent.qqpimsecure com.qihoo360.mobilesafe com.betalee.ccSMSBlocker
然后呢
com.lbe.security.lite com.tencent.qqpimsecure com.qihoo360.mobilesafe com.betalee.ccSMSBlocker
本人手机打印LOG
12-30 22:49:50.701: E/name(2526): com.qihoo360.mobilesafe 12-30 22:49:51.201: E/name(2544): com.tencent.qqpimsecure 12-30 22:49:51.701: E/name(2552): org.ijinshan.mguard 12-30 22:49:51.701: E/name(2562): com.ijinshan.mguard 12-30 22:49:51.701: E/name(2570): org.betalee.ccSMSBlocker 12-30 22:49:51.701: E/name(2578): com.betalee.ccSMSBlocker 12-30 22:49:52.201: E/name(2586): com.lbe.security.lite 12-30 22:49:52.201: E/name(2594): com.handsent.nextsms
虚拟机的log
com.lbe.security.lite com.qihoo360.mobilesafe com.tencent.qqpimsecure com.betalee.ccSMSBlocker
这要看你的测试方法了
如果只测试两个,恰好接收顺序又是安装顺序……
我不知道系统会记录安装顺序,接收广播顺序也和这完全没有关系
发表评论
-
android 第三方app截图
2017-08-17 15:18 1169将View生成相应的图片 ... -
android截图事件监听
2017-07-20 18:37 2007android系统没有对用户截屏行为提供回调的api,所以我 ... -
android widget(桌面小部件)实现
2017-06-30 13:02 1993本文介绍如何自己实现一个widget以及各种注意事项。 ... -
acra简析
2016-07-31 23:54 0版本4.9.1 acra是用来在 ... -
android版本差异
2016-07-28 14:42 0这里只列出部分开发相关内容 notification ... -
android系统提供的常用命令行工具
2016-06-21 13:17 5009本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
标示与掩码
2015-10-21 23:00 0掩码(英语:Mask) ... -
通过蓝牙调试(穿戴设备app) - 开发文档翻译
2015-09-30 11:43 2569由于本人英文能力实在 ... -
打包穿戴设备app - 开发文档翻译
2015-09-29 17:19 1788由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
弧形进度条(动画版)
2015-07-23 17:00 5843本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接 ... -
使用canvas与Paint在View中居中绘制文字
2015-07-15 23:03 8903本博客只要没有注明 ... -
android 关于提高第三方app的service优先级
2014-06-23 23:14 3109本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
android <application> 开发文档翻译
2014-05-24 23:47 5105由于本人英文能力实 ... -
android中各种log的抓取
2013-12-23 13:15 01.logcat的使用 2.内存快照的抓取 ... -
android多语言项目中字符串的移植(bash工具)
2013-11-11 13:31 2437有时候我们会遇到这样一种情况: 一些字符串资源要从原始项 ... -
android 高效显示Bitmap - 开发文档翻译
2013-09-13 17:59 2588由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 在你的UI中显示Bitmap - 开发文档翻译
2013-09-06 19:33 6563由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 管理Bitmap内存 - 开发文档翻译
2013-08-27 15:39 4107由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 缓存Bitmap - 开发文档翻译
2013-08-25 13:01 3144由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有 ... -
android 在UI线程之外处理Bitmap - 开发文档翻译
2013-08-12 13:30 3365由于本人英文能力实 ...
相关推荐
android开机启动android开机启动service android开机启动android开机启动service android开机启动android开机启动service android开机启动android开机启动service
因项目需要,综合网上资源,对android开机启动速度优化的一些总结
Android应用程序可以实现开机时启动相关应用 如service等 Android系统在开机启动时会发出一个系统广播"android intent action BOOT COMPLETED" 在接收到这个广播就可以实现开机自启动功能 下面就是一个...
Android 开机自启动应用, BOOT_COMPLETED
客户需要开机后自动启动wifi-adb服务,所以就在程序里加了一下,开机后会自动打开wifi-adb连接服务,前提是的设备wifi是ok的,就可以通过wifi 来连接adb了。
可以实现手机开机重启的时候自启动,程序简单易懂,有注释,是利用广播实现的
【Android】开机自启动Demo 相关文章:http://blog.csdn.net/etzmico/article/details/6848465
Android 开机启动, 设置开机启动选项。
ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar 要是需要最新的,下载地址: http://code.google.com/p/ksoap2-android/
现在大多数的android手机系统都默认禁止第三方安装的APP开机自启动,只有系统APP(system/app)才默认有这个权限,所以一般都需要去安全中心或者手机管家中去设置为允许。这里说个题外话,手机软件除非特殊情况,不然...
android-support-v4-v7-v13-v14-v17(官方最新完整版),官方最新版的,压缩包内包含android-support-v4、android-support-v7-appcompat,android-support-v7-cardview,android-support-v7-gridlayout,android-support-...
android开机启动服务代码。开机启动进行android录音。实现android的后台录音。
delphi XE6 android 开机启动代码,开机应用程序启动
Android_开机启动流程Android_开机启动流程
Android应用开机自动启动代码Demo,下载后直接放在Android Studio里运行就可以
展锐Android11.0开机启动流程介绍V1.0-nowatermark
android最好的开机自启动项管理软件,软件暂用资源小,功能强大,绿色无广告~~极力推荐
安卓应用开机启动功能的演示示例,原理:当Android系统完成BOOT阶段之后,就会发送一条名为 ACTION_BOOT_COMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启动我们的Activity或者Service!
一款实用Android平台上的应用开机启动项管理