博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android实现静默安装与卸载
阅读量:5236 次
发布时间:2019-06-14

本文共 1726 字,大约阅读时间需要 5 分钟。

一般情况下,系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装。

但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方式称为静默安装。

Android实现静默安装的方式有很多,这里只介绍一种比较简单易理解的方法,就是调用Android未公开的API(installPackage)来实现。

下面通过一种简单的Demo来简单实现静默安装,界面如下:

 

当点击"静默安装"的按钮时,会在后台安装360手机卫士的apk,安装成功后,会弹出Toast提示安装成功。

首先需要再AndroidManifest.xml声明下面的权限:

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

 

然后主要实现的代码如下:

 

 

从上面可以看出,事先需要再SD卡上放一个需要静默安装的apk(没有检测这个apk是否存在,只是简单实现)

上面的方法中涉及到了PackageInstallObserver类,实现代码如下:

 

 

代码部分已经基本实现完成,但是在eclipse里面,这个Demo是编译不过的,因为installPackage这个API没有公开,在上层是调用不到的,所以,需要在Android源码的环境下编译,在Demo根目录下新建Android.mk文件,内容如下:

 

Android.mk的写法有固定的格式和写法,如果不会写,可以参考Android源码中个系统应用mk文件的写法。

下面简单介绍下mk几个选项的含义:

下面的头和尾的写法都是固定的:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
......
LOCAL_SRC_FILES := $(call all-subdir--files)
......
include $(BUILD_PACKAGE)

 

LOCAL_MODULE_TAGS :=user eng tests optional
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
LOCAL_PACKAGE_NAME   需要编译项目的名称
如果你的APK依赖第三方jar包,还可以通过下面的选项来定义
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
Android.mk的洗发和规范有很多,具体可以在网上查查资料。
 
准备就绪后,就可以在Android源码环境下通过mmm编译这个Demo了,当然源码的编译环境需要自己配置。
另外,静默卸载也可以通过这种方式实现,与installPackage对应的还有个deletePackage的API,用法跟上面是一样的。

按照上面方法,有的人可能会出现下面的这个错误:

java.lang.SecurityException: Neither user 10034 nor current process has android.permission.INSTALL_PACKAGES.

这是因为只有系统应用才有android.permission.INSTALL_PACKAGES这个权限。出现这个问题的原因是,没有将自己的应用放在Android源码packages/app目录下就直接进行模块编译,这样编译出来的APK不是系统应用,没有系统的权限。解决这个问题有两种方法:

1. 将自己的应用放在packages/app目录下再进行模块编译

2. 直接安装out/target/product/generic/obj/APPS/应用名_intermediates/Package.apk.unaligned这个APK,就不会有这个问题。

转载于:https://www.cnblogs.com/exmyth/p/5535862.html

你可能感兴趣的文章
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>
使用C#交互快速生成代码!
查看>>
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书_2019年
查看>>
读书汇总贴
查看>>
微信小程序 movable-view组件应用:可拖动悬浮框_返回首页
查看>>
MPT树详解
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>