|—原生态和ROOT实现过程
查看源码:app/PackageInstallerActivity里的五个类的安装过程。
//主要安装方法
Public static void install (Context context,String filePath){Intent it = new Intent(Intent . ACTION_VIEW);it.setDataAndType(Uri.parse("file://"+filePath)),"application/vnd..android.package-archive");it.addFlags(Intent.FLAG_ACTINITY_NEW_TASK);context.startActivity(it);}
静默安装如下:
1.
首先获得apk在SD卡中的路径String fileName = Environment.getExternalStorageDirectory() + "/UC.apk";
2.
获取包的管理者,代码如下:
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo("com.uc.browser",
PackageManager.GET_UNINSTALLED_PACKAGES);
if(pi != null) {
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
}
} catch (NameNotFoundException e) {
}
3.
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;这句的意思是强制安装,不管你的设备上面是否有曾经安装过apk,都强制在安装一次。
4
.
通过安装包的观察者PackageInstallObserver
5.
编写MK文件:mkd 的具体写法如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := user
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := InstallActivity
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
6.然后在linux中的android源码下编译, 生成apk后,push手机系统里面。
原生系统实现静默安装4.0以上系统可以实现
1.
//部分关键代码
//获取内置的sd卡里的uc.apk
String fileName = Environment.getExternalStorageDirectory()
+
"UCapk"
;
2. //命令权限
String[] args = {
"pm"
,
"install"
,
"-r"
, apkAbsolutePath }
3. //xml权限
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission android:name=
"android.permission.INSTALL_PACKAGES"
/>
<uses-permission android:name=
"android.permission.DELETE_PACKAGES"
/>
<uses-permission android:name=
"android.permission.CLEAR_APP_CACHE"
/>
<uses-permission android:name=
"android.permission.CLEAR_APP_USER_DATA"
/>
<uses-permission android:name=
"android.permission.READ_PHONE_STATE"
/>
4.mk文件编译
mk文件编译主要是安装的apk的文件,最主要的有一个唯一的命名,这个唯一名是生成应用的名字。
LOCAL_PATH:
=
$(call my-dir)
include
$(CLEAR_VARS)
LOCAL_MODULE_TAGS :
= optional
LOCAL_SRC_FILES :
=
$(call all-java-files-under)
LOCAL_PACKAGE_NAME :
= install
LOCAL_CERTIFICATE :
= platform
include
$(BUILD_PACKAGE)
5
.然后在linux中的android源码下编译, 生成apk后,push手机系统里面。