[Android]实现静默安装APK的两种方法

Android 静默安装apk方法--兼容了5.1, 6.0, 7.1, 10, 11等各安卓版本 系统级app需要实现静默安装apk的功能,且能兼容各安卓系统版本。 阅读详情

 Android上的静默安装似乎是个很诱人的功能,好多人都问这个问题。今天分享下实现静默安装的两种方法,但当看完这篇文章后,仍会让一些人失望滴。

      Android把所有的Permission依据其潜在风险(属性名为protectionLevel )划分为四个等级,即"normal "、 "dangerous "、 "signature "、"signatureOrSystem "。 INSTALL_PACKAGES属于后两者。让我们看一下官方文档对后两类的描述吧。

 

"signature ": A permission that the system grants only if the requesting application is signed with the same certificate as the application that declared the permission. If the certificates match, the system automatically grants the permission without notifying the user or asking for the user's explicit approval.

 

"signatureOrSystem ": A permission that the system grants only to applications that are in the Android system image   or   that are signed with the same certificates as those in the system image. Please avoid using this option, as thesignature   protection level should be sufficient for most needs and works regardless of exactly where applications are installed. The "signatureOrSystem " permission is used for certain special situations where multiple vendors have applications built into a system image and need to share specific features explicitly because they are being built together.

 

      所以,这儿介绍的两种方法各自需要的苛刻条件如下:

      1.内置到ROM。即APK包的安装位置是/system/app下。

      2.使用APK的目标安装系统同样的签名。

 

 

      好了,先不管这些苛刻的条件,下面讲下如何编写直接安装APK的代码,这儿使用pm install <apk_path>命令,而不是繁杂的未公开的PackageManager.install()方法。

[java]  view plain copy
  1. String[] args = { "pm", "install", "-r", apkAbsolutePath };  
  2. String result = "";  
  3. ProcessBuilder processBuilder = new ProcessBuilder(args);  
  4. Process process = null;  
  5. InputStream errIs = null;  
  6. InputStream inIs = null;  
  7. try {  
  8.     ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  9.     int read = -1;  
  10.     process = processBuilder.start();  
  11.     errIs = process.getErrorStream();  
  12.     while ((read = errIs.read()) != -1) {  
  13.         baos.write(read);  
  14.     }  
  15.     baos.write('/n');  
  16.     inIs = process.getInputStream();  
  17.     while ((read = inIs.read()) != -1) {  
  18.         baos.write(read);  
  19.     }  
  20.     byte[] data = baos.toByteArray();  
  21.     result = new String(data);  
  22. } catch (IOException e) {  
  23.     e.printStackTrace();  
  24. } catch (Exception e) {  
  25.     e.printStackTrace();  
  26. } finally {  
  27.     try {  
  28.         if (errIs != null) {  
  29.             errIs.close();  
  30.         }  
  31.         if (inIs != null) {  
  32.             inIs.close();  
  33.         }  
  34.     } catch (IOException e) {  
  35.         e.printStackTrace();  
  36.     }  
  37.     if (process != null) {  
  38.         process.destroy();  
  39.     }  
  40. }  
  41. return result;  

      代码执行后,如果安装成功的话获取到的result值是“        pkg: /data/local/tmp/Calculator.apk  /nSuccess”,如果是失败的话,则没有结尾的“Success”。

      安装代码有了,现在开始介绍第一种方法,将你自己的APK内置到ROM中。前提是,你这手机已经刷机过并且保留了recovery-windows.bat/recover-linux.sh 文件。

      针对HTC-Legend的具体操作步骤为:

      1.USB连接你的设备然后在命令行输入 "adb reboot recovery" ,机子重启,启动后将显示一个红色的三角形和箭头图标   

      2 .(在PC下)进入到你的刷机文件夹然后运行 './recover-linux.sh' ,屏幕将显示绿色的菜单

      3 .如果得到的结果是 "error:device not found" ,运行 "./adb-linux kill-server" 后再一次运行 './recovery-linux.sh' 直到显示绿色菜单.

      4 .执行 "adb shell mount /dev/block/mtdblock3 /system" ,至此,可对/system进行写操作。

      5.在PC上运行命令:adb push <your_apk_path> /system/<your_apk_name>。至此,内置成功。

 

 

      第二种方法,需要先打一个未签名的APK包,然后用系统签名对其进行签名。这个方面的东西在我之前的一篇博文已说明,这儿就不重复了。[Android]使用platform密钥来给apk文件签名的命令 

      由于HTC-Legend是“原装”的,所以静默安装倒是顺利。但对于一些MOTO或乐Phone的手机,一般上是不支持的。


      以上这两种方法都在AndroidManifest中声明android.permission.INSTALL_PACKAGES,有一点比较奇怪的是执行“ int result = checkCallingOrSelfPermission(Intent.ACTION_PACKAGE_INSTALL) ”,result的值为android.content.pm.PackageManager.PERMISSION_DENIED而不是PERMISSION_GRANTED。

android 11.0 12.0静默安装app和静默卸载app功能实现 在11.0 12.0的产品开发中,对于调用pm的系统api实现静默安装已经受限,并且在8.0 9.0以后由于系统对于权限控制越来越严格 所以说通过adb shell 来安装卸载app都受到了限制但是又不想通过调用系统接口 弹出对话框 让用户同意后在安装 就只能使用静默安装了。 阅读详情

相关推荐

android激活应用辅助功能,模拟点击静默安装apk

android激活应用辅助功能,模拟点击静默安装apk,免root安装apk

android 权限说明——(整理,以后有用)

访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 获取精确位置 android.

5031

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

主要介绍了Android无需root实现apk的静默安装 的相关资料,需要的朋友可以参考下

【最全面】Android静默安装的两种方案

如果没有root权限,方案一将无法实现,因此我们通过定制 PackageInstaller 来实现指定包名可以静默安装,并增加Intent参数来指定静默安装还是默认安装。支持通过属性配置需要静默安装的APP包名,只要是属性配置的包名就走静默安装,其它APP走默认安装。APP调用『pm』命令实现静默安装,此方案无须修改Android源码,但需要root权限。一些产品要求APP在升级时能够实现静默安装,而无需弹出安装界面让用户确认。配置全部APP走静默安装。所有APP都走静默安装。配置指定包名走静默安装。

工宗浩生财指南针 1万+

k8s学习笔记(3)--- kubernetes核心技术概念

kubernetes核心技术概念 1.API对象         API对象是K8s集群中的管理操作单元。K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作。例如副本集Replica Set对应的API对象是RS。 2.集群(Cluster)         集群是指由...

梦谜的博客 1291

visual studio 2017编译Triangle库遇到的问题和解决办法

这段时间因为一个项目需要使用到Triangle这个三角剖分工具,需要在windows环境下进行对源码编译,中间踩了很多坑,特此记录下。 1、下载 下载链接是下边这个,需要翻墙 http://www.cs.cmu.edu/~quake/triangle.html 2、编译。。超。。。级。。。麻。。。烦。。。 在ubutu下安装一切顺利,完全没遇到什么麻烦,但是换到windows下就麻烦不断...

csubai07的博客 2439

【Android】实现静默安装APK的两种方法

原文链接:http://www.devdiv.com/Android-_Android_%E5%AE%9E%E7%8E%B0%E9%9D%99%E9%BB%98%E5%AE%89%E8%A3%85APK%E7%9A%84%E4%B8%A4%E7%A7%8D%E6%96%B9%E6%B3%95-thread-52551-1-1.html         Android上的静默安装似乎是个很

好想睡觉…… 4468

4.7W防削顶单声道D类音频功率放大器HT6872介绍

HT6872是一款低EMI,防削顶失真,单声道免滤波D类音频功率放大器。在6.5V电源,10%THD+N,4Ω负载条件下,输出4.71W功率,在各类音频终端应用中维持高效率并提供AB类放大器的性能。

weichen_78的博客 4699

Android实现静默安装APK的两种方法

Android上的静默安装似乎是个很诱人的功能,好多人都问这个问题。今天分享下实现静默安装的两种方法,但当看完这篇文章后,仍会让一些人失望滴。       Android把所有的Permission依据其潜在风险(属性名为protectionLevel )划分为四个等级,即"normal "、 "dangerous "、"signature "、 "signatureOrSystem "。 

u010862673的博客 2135

ICM20948 DMP代码详解(54)

ICM20948 DMP代码详解(54)

phmatthaus的专栏 424

高通平台 Android T 蓝牙技术全解析:A2DP 与 AVRCP 核心代码路径与交互流程

A2DP 接收端 - 连接流程(AVDTP 打开)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 290

[Android]实现静默安装APK的两种方法(1)

Android上的静默安装似乎是个很诱人的功能,好多人都问这个问题。今天分享下实现静默安装的两种方法,但当看完这篇文章后,仍会让一些人失望滴。       Android把所有的Permission依据其潜在风险(属性名为protectionLevel )划分为四个等级,即"normal "、 "dangerous "、 "signature "、"signatureOrSystem "。 

Dijkstra的专栏 1850

20、微电网系统的系统框架、建模与控制架构解析

本文详细解析了微电网系统的系统框架、建模方法以及控制架构。文章首先介绍了在系统的系统(SoS)框架下,微电网如何通过微控制器(MC)和微电网中央控制器(MGCC)协调运行,并支持并网与孤岛模式下的高效能量管理。随后,针对微电网的关键组件,包括微涡轮机、光伏太阳能电池和风力涡轮机,提供了详细的数学建模分析。最后,探讨了微电网的控制架构设计,涵盖分层控制和共识控制策略,以实现系统的高效、稳定运行,满足日益增长的能源需求与市场要求。

elastic6hunter的博客 206
上一篇: js处理年月日下拉菜单变化
下一篇: android adb常用指令
meng0911
博客等级 码龄15年 15粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值