Android对于静默安装和卸载

时间:2023-02-24 21:00:29

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

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

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

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

Android对于静默安装和卸载Android对于静默安装和卸载

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

首先须要再AndroidManifest.xml声明以下的权限:

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

Android对于静默安装和卸载

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

Android对于静默安装和卸载

Android对于静默安装和卸载

Android对于静默安装和卸载

从上面能够看出。事先须要再SD卡上放一个须要静默安装的apk(没有检測这个apk是否存在,仅仅是简单实现)

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

Android对于静默安装和卸载

Android对于静默安装和卸载

Android对于静默安装和卸载

代码部分已经基本实现完毕。可是在eclipse里面,这个Demo是编译只是的,由于installPackage这个API没有公开,在上层是调用不到的,所以,须要在Android源代码的环境下编译。在Demo根文件夹下新建Android.mk文件,内容例如以下:

Android对于静默安装和卸载

Android对于静默安装和卸载

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpbmVmbG93ZXJz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">Android对于静默安装和卸载

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&lowbar;实现静默安装和卸载应用

    转: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. jquery 面板拖拽

    在网上找了好多的例子 都不满足我所需要 在网上找了一篇关于easyui是一个拓展的demo  然后根据demo 把我所需要的东西进行再次拓展 满足我的需求 也不多说了 上代码 首先 你肯定是要导eas ...

  2. JQuery基础一

    1.在浏览器点击F12,调出源码设置端点F11进行调试 2.要操作DOM对象,首先要把DOM对象封装成juery对象: jQuery(document).ready(function () { ale ...

  3. &lbrack;BZOJ 1042&rsqb; &lbrack;HAOI2008&rsqb; 硬币购物 【DP &plus; 容斥】

    题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...

  4. GIT入门笔记(18)- 标签创建和管理

    git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id: git tag -a <tagname> -m "blablabla ...

  5. Imcash&colon;比特币减半 四年机遇你能否抓住?

    减半到底是什么? 2010来,比特币已有4次下跌幅度达70%或更高. 2012年的11月份比特币减半,诞生了一次上涨10倍有余的超级牛市. 2016年7月,历史又是如此的相似,比特币产量又迎来了减半, ...

  6. scrapy-redis爬取豆瓣电影短评,使用词云wordcloud展示

    1.数据是使用scrapy-redis爬取的,存放在redis里面,爬取的是最近大热电影<海王> 2.使用了jieba中文分词解析库 3.使用了停用词stopwords,过滤掉一些无意义的 ...

  7. WebForm - 文本框回车事件

    document.getElementById("Pwd").onkeyup = function (e) { ) { fun_Login(); } };

  8. Ruby:线程实现经典的生产者消费者问题

    运行结果: ProAndCon 0 produced 1 produced consumed 0 2 produced 3 produced consumed 1 consumed 2 consume ...

  9. clipboard异步复制文本(动态获取文本)

    1.需求描述: 点击“分享”按钮的时候,发送 ajax 请求获得动态邀请连接,成功取得数据后复制到剪贴板 2.解决重点: > Clipboard 动态设置文本的使用 > Ajax请求设置为 ...

  10. Spring Boot中使用Websocket搭建即时聊天系统

    1.首先在pom文件中引入Webscoekt的依赖 <!-- websocket依赖 --> <dependency> <groupId>org.springfra ...