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()方法。
String[] args = { "pm", "install", "-r", apkAbsolutePath };
String result = "";
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = null;
InputStream errIs = null;
InputStream inIs = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
process = processBuilder.start();
errIs = process.getErrorStream();
while ((read = errIs.read()) != -1) {
baos.write(read);
}
baos.write('/n');
inIs = process.getInputStream();
while ((read = inIs.read()) != -1) {
baos.write(read);
}
byte[] data = baos.toByteArray();
result = new String(data);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (errIs != null) {
errIs.close();
}
if (inIs != null) {
inIs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
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。
转自:http://blog.csdn.net/sodino/article/details/6238818
分享到:
相关推荐
标题与描述均提到了“Android实现静默安装APK的两种方法”,这表明文章将探讨在Android设备上不经过用户交互就能自动安装APK(应用包)文件的技术。这一功能对于自动化部署、企业级应用更新或系统级软件管理场景尤为...
android apk 的安装方式,看了这篇文档,希望对你有点帮助!
静默安装APK的方法主要分为两种:通过Adb(Android Debug Bridge)和通过自定义服务。Adb是Android开发工具包中的一个重要组成部分,它允许开发者通过USB或网络连接与设备进行通信,执行各种操作,包括安装应用。 *...
总结,通过AIDL调用Android源码实现静默安装卸载APK涉及到创建AIDL接口、实现服务端、绑定服务、处理权限和API兼容性等问题。这个过程需要对Android系统有深入的理解,并且要注意安全性和最佳实践。在实际应用中,...
如果用过一些手机助手的朋友都知道,手机助手下载其他软件的更新程序后会自动静默更新。APK静默安装是指实现了在APK...压缩包里有两种实现apk静默安装的方法说明和详细的操作文档与源码。 涉及模块&技术 静默安装 ...
本文将探讨两种实现Android静默安装的方法。 1. **root权限静默安装** 这种方法适用于设备已经获取root权限的情况。通过执行shell命令`su pm install -r filePath`,可以在后台静默安装APK。具体实现的Java代码...
不过,通过理解Android系统内部的安装机制,我们可以找到一种方法来实现静默安装。 首先,要明确的是,静默安装通常需要高权限,尤其是`INSTALL_PACKAGES`权限,这是一个签名或系统级别的权限,意味着只有系统进程...
在Android系统中,静默安装APK是一种不需用户交互就能自动完成安装应用的方法,它通常用于企业级设备管理或自动化测试场景。本教程通过"静默安装APK Demo.zip"压缩包,将向您展示如何利用Java反射机制实现这一功能。...
在较低版本的Android中,有两种常见的静默安装方法:通过shell调用`pm`命令或者反射调用`PackageManager`的`install`方法。但在Android 9.0(Pie)及更高版本,这些方法已经不再适用。 Android 9.0引入了一个新的...
在Android平台上,应用程序的安装方式主要有两种:普通安装和静默安装。这两种方式在更新应用版本时有不同的特性和应用场景。接下来我们将深入探讨这两种安装方法及其在版本更新中的应用。 普通安装,即用户交互式...
在Android系统中,静默安装(Silent Install)和智能安装是两种自动化处理APK安装过程的方法,尤其适用于批量部署或者设备管理场景。静默安装指的是在用户无感知的情况下完成APK的安装,而智能安装则涉及到自动处理...
实现静默安装一般有两种方法: - **Adb命令行工具**:通过连接设备的ADB(Android Debug Bridge),发送特定的安装命令。例如,`adb install -r -t -g <apk_path>`,其中`-r`表示更新已有应用,`-t`表示允许测试...
2. **直接调用安装接口**:这是一种静默安装方法,需要Android源码环境。首先,获取到APK文件的Uri,然后创建一个`PackageInstallObserver`监听安装过程,最后通过`PackageManager`的`installPackage()`方法进行安装...
APK绑定安装与静默安装是Android应用自动化部署和管理中的两种技术,它们在系统集成、测试和批量分发场景中尤为常见。下面将详细解释这两种技术的原理、实现方式以及相关的安全和权限问题。 首先,APK绑定安装是指...
如果用过一些手机助手的朋友都知道,手机助手下载其他软件的更新程序后会自动静默更新。APK静默安装是指实现了在APK文件...压缩包里有两种实现apk静默安装的方法说明和详细的操作文档与源码。 涉及模块&技术 静默安装
在Android系统中,静默安装(Silent Installation)和智能安装是两种自动化处理应用程序安装的方式,它们主要用于批量管理和部署应用,特别是在企业环境中。静默安装允许在用户无感知的情况下自动完成应用的安装过程...
在Android系统中,静默安装(Silent Install)和自动安装是两种特殊的安装方式,它们主要用在批量部署或者后台服务中,以便在用户无感知的情况下进行应用的部署和更新。这里我们将深入探讨这两个概念,并结合提供的...
默认情况下,非系统应用无法进行静默安装,但以下两种方式可以尝试: 1. **使用SystemServer接口**:如果你的应用是系统应用,可以调用系统的`PackageInstaller`服务来进行静默安装。首先,需要获取到`Package...