Android常用代码之普通及系统权限静默安装APK

本文主要介绍程序如何安装apk,包括普通模式安装和系统权限静默安装。

如果是非系统应用请直接查看:Android常用代码之APK root权限静默安装,查看更完美的解决方案。

1、普通模式安装,调用系统Intent,代码如下:

public static void install(Context context, String filePath) {

Intent i = new Intent(Intent.ACTION_VIEW);

i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(i);

}

2、静默安装

如果是非系统应用请移步:Android常用代码之APK root权限静默安装,查看更完美的解决方案。

分为如下三步

(1)、静默安装需要系统应用安装权限,需要在AndroidManifest.xml中添加

Java


1

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />

记得clear啊 一般会出错提示。

(2)、实现代码

静默安装代码如下,实际是通过pm install -r 命令安装。

注意:该函数最好在新建的线程中运行并通过handler发送安装结果给主线程,否则安装时间较长会导致ANR。

/**

* install slient

*

* @param context

* @param filePath

* @return 0 means normal, 1 means file not exist, 2 means other exception error

*/

public static int installSlient(Context context, String filePath) {

File file = new File(filePath);

if (filePath == null || filePath.length() == 0 || (file = new File(filePath)) == null || file.length() <= 0

|| !file.exists() || !file.isFile()) {

return 1;

}

String[] args = { "pm", "install", "-r", filePath };

ProcessBuilder processBuilder = new ProcessBuilder(args);

Process process = null;

BufferedReader successResult = null;

BufferedReader errorResult = null;

StringBuilder successMsg = new StringBuilder();

StringBuilder errorMsg = new StringBuilder();

int result;

try {

process = processBuilder.start();

successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));

errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String s;

while ((s = successResult.readLine()) != null) {

successMsg.append(s);

}

while ((s = errorResult.readLine()) != null) {

errorMsg.append(s);

}

} catch (IOException e) {

e.printStackTrace();

result = 2;

} catch (Exception e) {

e.printStackTrace();

result = 2;

} finally {

try {

if (successResult != null) {

successResult.close();

}

if (errorResult != null) {

errorResult.close();

}

} catch (IOException e) {

e.printStackTrace();

}

if (process != null) {

process.destroy();

}

}

// TODO should add memory is not enough here

if (successMsg.toString().contains("Success") || successMsg.toString().contains("success")) {

result = 0;

} else {

result = 2;

}

Log.d("installSlient", "successMsg:" + successMsg + ", ErrorMsg:" + errorMsg);

return result;

}

返回值0表示安装成功,1表示文件不存在,2表示其他错误。需要更丰富的安装失败信息(内存不足、解析包出错)可直接使用PackageUtils.installSlient。

(3) 、获取系统权限

完成了上面两步后,普通方式安装我们的应用仍然无法静默安装。需要我们的应用获得系统权限,编译应用并通过

adb push <your_apk_path> /system/app/

命令实现安装,即可拥有系统权限。


更多相关文章

  1. Android 系统资源(字体,声音,视频)的简介
  2. android系统目录说明
  3. 使用Docker编译Android系统源码
  4. Android中系统资源的查看
  5. Android编译系统三
  6. Android:android.git.kernel.org 无法访问时下载源代码的解决方法
  7. Android如何获得系统(system)权限 !!!

随机推荐

  1. Tween动画
  2. Android颜色小工具
  3. [Android] Otto源码简析
  4. Android(安卓)-- RecyclerView
  5. adb 指令
  6. PagerBottomTabStrip
  7. Android:dagger2让你爱不释手-重点概念讲
  8. android录音功能的实现
  9. Android组件——使用DrawerLayout仿网易
  10. android radioButton 动态设置背景