(文章最初写在有道笔记里面,所以排版不是很好,请原谅)
首先说一下静默安装,经过10天左右的研究,大概有如下几种方法:
一.
我们平时开发打包后,我们的ide(包括eclipse idea as ) 都会给我们自动安装到手机上。那么很多手机并没有显示安装界面,当然也有部分手机是他妈的,做了底层的binder,这里还是会显示出来安装界面。
这种方法是通过命令的方式,adb shell命令的方式只有连接电脑才能实现。而普通的应用就只能通过root权限,否则没法执行一些特殊的adb命令。
但是问题来了,root了之后又需要一个权限管理的的一个程序进行允许,我擦这个方法好那啥。
二.
访问隐藏的API方式进行静态的默认安装和卸载
隐藏的api,为何要做到ap然后还又隐藏呢,不给用就不做不就行啦。 原因你切听老夫来给你诉说:从前有座山山里有座庙,庙里有个老和尚,老和尚在干吗呢?老和尚在给老和尚讲故事,so,讲的是什么呢.........
咳咳
扯远了。 是这样的,android 在最早的版本是带这个功能的,当时没考虑那么多的安全性问题,垃圾软件胡乱安装问题,就跟我们现在需要静默安装这个功能的情况一样,i just need ,im not bad。 后来就为了像一些垃圾软件偷偷的安装apk就隐藏了这个api,把这个api开放给厂商用于厂商自己的内置app更新之类的操作。
所以这个使用隐藏的api的方式呢,大概实现方法如下:
大概需要如下几个类,
PackageManager.java IPackageDeleteObserver.aidl IPackagerInstallObserver.aidl IPackageMoveObserver.aidl
可以跑起来之后,需要赋给系统权限才能调用,所以在打包的时候需要打带有系统权限的包。
android:sharedUserId="android.uid.system" 然后签名需要用系统的签名,才能安装。
系统签名有两种方案,
1 . 在eclipse中导出未签名的apk包,导出后使用signapk.jar
和 两个系统签名文件,进行签名,即可,但是这个方法好像不太稳定,经过测试发现一堆的机器都装不上,而且他妈的,老子昨天晚上还能装上的机器,早上 竟然装不起来了,日了狗了,ok,原谅我如此的粗鲁,北方的汉子没办法。
2.在源码模式下打包,这个方法我不说了,没去操作,还要安装个ubuntu,还有他妈的一堆的android源码下载等等,问题不在于这个方法很烦,而在于就算你打包了,最后打包结束也他妈的不是所有的机器都能跑的起来,有些机器的系统的签名文件跟原版rom有出入。
三.
360手机助手的秒装功能实现
360的秒装功能就是root+静默安装 我拿到了一部分源码 在eclipse中运行的部分代码
虽然我不情愿用eclipse
看截图
就不公布源码了 太不道德
原理大概说下360手机助手的实现
先看下面root的原理
下文是我从知乎拷贝出来的一段回答,回答的很好,把android root的原理说了。我只是抽取了简短的一句。
原帖地址:
http://www.zhihu.com/question/21074979
Linux下su以后输入密码就可以root了,但Android里的su和Linux里的su是不一样的,Android里的su不是靠验证密码的,而是看你原来的权限是什么。…………………………………………需要把一个所有者是root的su拷贝到Android手机上,并且把su的权限标志位置成-rwsr-xr-x。能把这个事情搞定你就成功root了一个手机。
大概意思就是两行代码
cp /data/tmp/su /system/bin/ #copy su 到/system/分区 chown root:root su #su的所有者置成root chmod 4775 /system/bin/su #把su置成-rwsr-xr-x
熟悉Android的同学都知道,执行上面的每一行代码都需要root权限才能成功。
通过上面的这段话,可以理解root的原理,
大概也就是拷贝一个su文件到指定的目录即可root,我看源码的理解是他先用本地的.so文件去root,root失败后,
提交一些本机的一些信息,如版本号,还有一些其他的信息到360的服务器,获得这个手机对应的.so文件然后再root,成功就可以实现秒装,不成功则无法实现,具体秒装的实现我也没具体研究。
如果之前root成功过 ,就会读取上次root的保留的信息,直接root 即可,360采用的是临时root,不会导致机器真的就root,这个做法还是比较好的。
但是有一点我不理解的,我看360的代码,好像也是这么实现的root,但是他们的竟然没有下载所谓的su文件,而是.so文件。百思不得姐。
可能这个su文件支持 一个key的aes 加密的文件 吧,具体实现我也不清楚了。也可能就是这个so文件就是那个su文件吧。
但是总的来说360手机助手这个方法实现的 静默安装是最好的,有一点是说,这个360的临时root不能适配所有的机器,在nexus7上测试失败,在sony
L36H上测试失败,其他的机器都成功了,还好公司的机器是挺多的 ,够我测试的,哈哈哈。
PS:另外现在ARM架构的机器root的方便,非ARM就很难了。
为避免法律问题,请听我说,以上内容纯属虚构,如有雷同纯属巧合。
版权声明:本文为博主原创文章,未经博主允许不得转载。