码迷,mamicode.com
首页 > 其他好文 > 详细

关于root 关于实现静默安装

时间:2015-07-14 18:20:14      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:android   内存   jni   

(文章最初写在有道笔记里面,所以排版不是很好,请原谅)

首先说一下静默安装,经过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的原理说了。我只是抽取了简短的一句。

原帖地址:  
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就很难了。

为避免法律问题,请听我说,以上内容纯属虚构,如有雷同纯属巧合。

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

关于root 关于实现静默安装

标签:android   内存   jni   

原文地址:http://blog.csdn.net/weizongwei5/article/details/46878705

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!