应用的安装方式:adb install或者下载安装
过程分析请参考老罗的blog,这里记录一下第三方应用程序安装apk的过程。
安装的过程主要是调用PackageInstaller这个App,源代码的位置在package/app/PackageInstaller
AndroidManifest.xml如下,<?xml version="1.0" encoding="utf-8"?>
package="com.android.packageinstaller">
android:allowBackup="false"
android:theme="@android:style/Theme.DeviceDefault.DialogWhenLarge.NoActionBar">
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true">
android:configChanges="orientation|keyboardHidden|screenSize">
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
android:theme="@android:style/Theme.DeviceDefault.Dialog.NoActionBar">
android:configChanges="orientation|keyboardHidden|screenSize">
安装和卸载APP主要用到了PackageInstallerActivity和UninstallActivity。
安装一个应用程序的过程如下:String fileName = Environment.getExternalStorageDirectory() + "/myApp.apk";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);
卸载一个应用程序的过程如下:Uri packageURI = Uri.parse("package:com.android.myapp");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
默认是不支持非市场安装的,这里可判断一下:int result = Settings.Secure.getInt(getContentResolver(),
Settings.Secure.INSTALL_NON_MARKET_APPS, 0);
if (result == 0) {
// show some dialog here
// ...
// and may be show application settings dialog manually
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);
startActivity(intent);
}