在一般情况下,Android系统安装apk会有一个安装界面,用户可以单击确定或取消apk设备。

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

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

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

当点击"静默安装"的button时。会在后台安装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文件,内容例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpbmVmbG93ZXJz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Android.mk的写法有固定的格式和写法。假设不会写,能够參考Android源代码中个系统应用mk文件的写法。

以下简介下mk几个选项的含义:

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

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

......

LOCAL_SRC_FILES := $(call all-subdir-java-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,就不会有这个问题。

版权声明:本文博主原创文章。博客,未经同意不得转载。

Android对于静默安装和卸载的更多相关文章

  1. Android实现静默安装与卸载

    一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装. 但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方 ...

  2. android 实现静默安装、卸载

    方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...

  3. Android随笔之——静默安装、卸载

    随笔之所以叫随笔,就是太随意了,说起来,之前的闹钟系列随笔还没写完,争取在十月结束之前找时间把它给写了吧.今天要讲的Android APK的静默安装.卸载.网上关于静默卸载的教程有很多,更有说要调用隐 ...

  4. Android的静默安装

    原文 Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安 ...

  5. Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)

    一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/ ...

  6. Android_实现静默安装和卸载应用

    转:http://www.cnblogs.com/ondream/archive/2012/04/13/2446138.html 前段时间做了一个批量安装卸载应用程序的小应用,由于安装卸载应用程序的部 ...

  7. android apk静默安装

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢 ...

  8. innosetup的静默安装与卸载

    静默安装,就是减少程序与用户的交互,一站式的安装过程(一气呵成) 1. 静默安装参数 innosetup的静默安装是通过参数来控制的 1.1.  /silent                     ...

  9. android程序的安装与卸载

    Android android在安装应用程序与卸载应用程序时都会发送广播,安装应用程序成功时会发送android.intent.action.PACKAGE_ADDED广播,可以通过intent.ge ...

随机推荐

  1. sql时间比较

  2. Android TextView里直接显示图片的三种方法

    方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般假设字体是在图片上重叠的推荐这样写.时间关系,这个不付源代码了. 方法二:利用Tex ...

  3. wpf做的3d滑动gallery

    原文:wpf做的3d滑动gallery wpf做的3d滑动gallery 随着iphone\ipad的流行及热捧,现在做移动产品不管是什么平台的,领导总想做成像ios系统的样子.自从微软发布了wind ...

  4. Codeforces 9A-Die Roll(意甲冠军)

    A. Die Roll time limit per test 1 second memory limit per test 64 megabytes input standard input out ...

  5. Hadoop学问Eclipse构建Hadoop工程

    在此之前的基础Hadoop在官方文件HDFS.MapReduce架构.配置管理是学习,但是,一些地方的官方文件相当含糊的解释. 我们没有发挥人可以体验,某种官方文件似业务规则或要求,但是,真正的细节还 ...

  6. jQuery照片伸缩效应,这不是一个简单的图像缩放,它不影响其它元素的布局

    之前在网上看到这样的效果,但我没有收藏夹网址,后来被我不知道如何来实现这种效果. 如今,互联网已收集有关专门.真是功夫不负有心人,被我发现. 我也努力过自己尝试着写: 但仅仅是单纯的图片放大.并且还影 ...

  7. yum简介(转)

    yum是什么yum = Yellow dog Updater, Modified 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题yum特点可 ...

  8. NAT( 网络地址转换) 实现

    NAT基本介绍: 网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术.是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 ...

  9. POJ 2405 Beavergnaw (计算几何-简单的问题)

    Beavergnaw Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6203   Accepted: 4089 Descri ...

  10. 【Bible for kids】 儿童圣经 App

    [Bible for kids] 儿童圣经App 除了<The Bible>这个由YouVersion团队开发的全球下载量和安装数目第一的圣经类.安装量已逾1亿8千万的App之外,YouV ...