关于root 关于实现静默安装

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

首先说一下静默安装,经过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就很难了。

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

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

时间: 2024-11-24 04:46:18

关于root 关于实现静默安装的相关文章

Android 请求root权限实现静默安装

这几天在做一个新的功能,需要用到静默安装,所以在网上找了一些静默安装的资料就在这里记录一下吧.其实实现静默安装的原理就是请求Android手机的root权限,通过执行Linux命令来安装APK到手机系统,其实代码不是很多,就在这里列一下吧,以后用的时候可以直接翻出来: 1 public class MyThread extends Thread { 2 private String path; 3 4 public MyThread(String path) { 5 // TODO Auto-g

关于安卓root过手机静默安装与卸载

用到一个工具类AndroidCommon  详细了解地址:http://www.open-open.com/lib/view/open1385174381198.html   ,其中为我们提供了root后静默安装的工具类PackageUtils,其中包含安装与卸载. 走下思路,首先静默安装要用到adb命令,所以手机必须root(至于360手机助手静默安装,无需root也可以静默安装,具体我也不清楚,哪位大牛清楚希望可以探讨下),在adb命令中执行pm install -r即可,具体可以参考And

Android 无需root实现apk的静默安装

转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/50533137 Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk: Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFi

Android静默安装实现方案,仿360手机助手秒装和智能安装功能

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢?所谓的静默安装,就是不用弹出系统的安装界面,在不影响用户任何操作的情况下不知不觉地将程序装好.虽说这种方式看上去不打搅用户,但是却存在着一个问题,因为Android系统会在安装界面当中把程序所声明的权限展示给用户看,用户来评估一下这些权限然后决定是否要安装该程序,但如果使用了静默安装的方式,也就没

centos下静默安装oracle11g

一.安装依赖包 yum -y install gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elfutils-libelf-devel-static elfutils-libelf-devel ksh libaio libaio-devel numactl-devel sysstat unixODBC unixODBC-devel pcre-devel 二.创建用户名 groupadd oinstall g

Android系统Root与静默安装2

Android系统Root与静默安装 静默安装,指的是安装时无需任何用户干预,直接按默认设置安装应用.因为,它的无需用户干预,很多情况下变成了用户压根不知道,应用不知不觉就安装上了.是在推广上极为流氓的手段,很类似PC上的捆绑安装.正因为静默安装时极为流氓的推广行为,所以,其推广价格也极其高. Android应用安装有如下四种方式 安装形式 完成方式 系统应用安装 开机时完成,需要... http://atvq7204.jiluyisheng.com http://dksm1040.jiluyi

静默安装/ 普通安装与root权限获取相关

静默安装 有时候使用第三方的插件时我们需要静默安装其提供的apk包,静默安装时我们需要获取root权限,如下代码 Process process = Runtime.getRuntime().exec("su"); 然后此时获取到的root权限不是整个个应用的,而是Process这个进程 所以此时要进行的root权限相关的操作,就必须通过Process这个进程来获取 ps:file为sd卡中的文件File类型 如下 DataOutputStream dataOutputStream =

非ROOT实现静默安装的一些思考与体会,AIDL获取IPackageManager,反射ServiceManager,系统签名

非ROOT实现静默安装的一些思考与体会,AIDL获取IPackageManager,反射ServiceManager,系统签名 最近自家的系统要做一个升级服务,里面有三个功能,第一个是系统升级,也就是下载OTA包推送到recovery里升级的,而第二个是MCU升级,这就涉及到我们自家系统的一些情况了,而第三个就是应用升级了,领导要求不要骚扰用户,于是我就想到了静默安装了,因为我们的系统是在wifi环境下工作的,所以不担心流量哈,而且我们系统是没有ROOT的,所以我们肯定野不能使用RunTime方

Android 静默安装/后台安装& Root permission

Android 静默安装/后台安装& Root permission 静默安装其实很简单,今天在网上找资料找半天都说的很复杂,什么需要系统安装权限.调用系统隐藏的api.需要系统环境下编译.需要跟systemUI同进程什么的.我不知道他们真的实现了静默安装实现方式,亲测效果跟豌豆荚一样,并且实现起来非常简单: 1.支持静默安装的机器必须Root,这个不需要我多讲了. 2.使用pm指令安装即可.     3.特别注意 PM指令不支持中文,也就说路径中有中文会导致安装失败! 关键代码如下: exec