在android机上安装APK时一般都是借助PC端的91手机助手或者豌豆荚之类的工具;或者直接将APK下载到android机子上手动点击安装,手动安装时系统会弹出“是否要安装该应用程序?”的对话框让你选择是否安装,如果一次只安装一两个APK还可以在每次弹出对话框时选择“安装“,如果一次需要安装数十个时这是相当费力而且容易漏掉APK没有安装的。
能不能自己写个应用来实现一次批量安装所有APK呢?答案是肯定的,但是对于一个只熟悉android应用开发的人员是办不到的。因为google为了防止出于一些特殊目的的开发人员编写应用程序偷偷的在你的android机子上安装一些有特殊目的的APK,已经将静默安装APK的API屏蔽了,在官方发布的SDK中是没有这样的API给你调用的。但是对于系统开发人员还是很容易开发出这样的应用的,因为我们可以在编译系统时去编译我们调用了google隐藏了的API的应用。
先上个我写的批量安装APK应用的界面和批量安装APK时的效果图,该应用实现的功能是先扫描外置SD、TF卡下的所有APK,点击”安装APK“按钮后即开始一次批量安装完扫描到的APK,不需要用户去干预。
该应用主要用到的是android.content.pm.PackageManager类下的installPackage方法来实现静默安装所有APK的。
工程文件列表:
updatepackage
│ .classpath
│ .project
│ Android.mk
│ AndroidManifest.xml
│ MainActivity.apk
│
├─res
│ ├─drawable
│ │ back.jpg
│ │
│ ├─drawable-hdpi
│ │ ic_action_search.png
│ │ ic_launcher.png
│ │
│ ├─drawable-ldpi
│ │ ic_launcher.png
│ │
│ ├─drawable-mdpi
│ │ ic_action_search.png
│ │ ic_launcher.png
│ │
│ ├─drawable-xhdpi
│ │ ic_action_search.png
│ │ ic_launcher.png
│ │
│ ├─layout
│ │ activity_main.xml
│ │
│ ├─menu
│ │ activity_main.xml
│ │
│ ├─values
│ │ dimens.xml
│ │ strings.xml
│ │ styles.xml
│ │
│ └─values-large
│ dimens.xml
│
└─src
└─com
└─example
└─adnroid
└─updatepackage
ApkFile.java
ApkSearchUtils.java
MainActivity.java
UpdateBroadcastReceiver.java
android系统源代码下添加我们的updatepackage工程,工程下添加用于编译的Android.mk文件内容如下所示:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := MainActivity
LOCAL_DEX_PREOPT :=false
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height&#