zoukankan      html  css  js  c++  java
  • Android对于静默安装和卸载

    在一般情况下,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文件,内容例如以下:



    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,就不会有这个问题。


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

  • 相关阅读:
    Leetcode 126.单词接龙II
    Leetcode 125.验证回文串
    Leetcode 124.二叉树中的最大路径和
    Leetcode 123.买卖股票的最佳时机III
    Leetcode 122.买卖股票的最佳时机II
    西子凌波回复集5(网友整理版)
    西子凌波回复集4(网友整理版)
    西子凌波回复集3(网友整理版)
    K杀(逻辑-标准-规则)
    西子凌波49:2018年11月29日微博解盘提示
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4816630.html
Copyright © 2011-2022 走看看