1,用android SDK 提供的包操作进行apk的安装和卸载时总是弹出界面,需要人为干预;如果想弹出界面,不需要人为干预,进行安装和卸载就没有那么容易了,不过还所能做到的。
2,普通的安装和卸载方法:
private void install(String packagename){
String str = "/com.youdao.dict-1.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);
}
private void unInstall(String packagename){
Uri packageURI = Uri.parse("package:com.youdao.dict");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
}
3,无界面进行安装
方法一:
private void installquietly(String apk){
String fileName = Environment.getExternalStorageDirectory() + "/"+apk;
Uri uri = Uri.fromFile(new File(fileName));
int installFlags = 0;
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo("com.youdao.dict",
PackageManager.GET_UNINSTALLED_PACKAGES);
if(pi != null) {
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
}
} catch (NameNotFoundException e) {
}
PackageInstallObserver observer = new PackageInstallObserver();
pm.installPackage(uri, observer, installFlags, "com.youdao.dict");
}
class PackageInstallObserver extends IPackageInstallObserver.Stub {
public void packageInstalled(String packageName, int returnCode) {
}
};
方法二:
private void installQuietly2(String apk){
try{
String fileName = Environment.getExternalStorageDirectory() + "/"+apk;
Runtime.getRuntime().exec("pm install -r "+ fileName);
}catch(Exception e){
}
}
4:实现静默卸载:
private void unInstallQuietly(String packagename){
try{
Runtime.getRuntime().exec("pm uninstall -r "+ packagename);
}catch(Exception e){
}
}
5:AndroidManifest.xml 需要权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.UNINSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
6,以上修改需要在anroid 源码工程权限下编译。
把包放到 android工程/package/apps/下 初始化好android编译环境,用mm编译。
其中Android.mk的修改如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_PACKAGE_NAME := packgaemgr
LOCAL_MODULE_PATH := $(TARGET_OUT)/preloadapp
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
=========================================
If you want more detail ,please contact me
2,普通的安装和卸载方法:
private void install(String packagename){
String str = "/com.youdao.dict-1.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);
}
private void unInstall(String packagename){
Uri packageURI = Uri.parse("package:com.youdao.dict");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
}
3,无界面进行安装
方法一:
private void installquietly(String apk){
String fileName = Environment.getExternalStorageDirectory() + "/"+apk;
Uri uri = Uri.fromFile(new File(fileName));
int installFlags = 0;
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo("com.youdao.dict",
PackageManager.GET_UNINSTALLED_PACKAGES);
if(pi != null) {
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
}
} catch (NameNotFoundException e) {
}
PackageInstallObserver observer = new PackageInstallObserver();
pm.installPackage(uri, observer, installFlags, "com.youdao.dict");
}
class PackageInstallObserver extends IPackageInstallObserver.Stub {
public void packageInstalled(String packageName, int returnCode) {
}
};
方法二:
private void installQuietly2(String apk){
try{
String fileName = Environment.getExternalStorageDirectory() + "/"+apk;
Runtime.getRuntime().exec("pm install -r "+ fileName);
}catch(Exception e){
}
}
4:实现静默卸载:
private void unInstallQuietly(String packagename){
try{
Runtime.getRuntime().exec("pm uninstall -r "+ packagename);
}catch(Exception e){
}
}
5:AndroidManifest.xml 需要权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.UNINSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
6,以上修改需要在anroid 源码工程权限下编译。
把包放到 android工程/package/apps/下 初始化好android编译环境,用mm编译。
其中Android.mk的修改如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_PACKAGE_NAME := packgaemgr
LOCAL_MODULE_PATH := $(TARGET_OUT)/preloadapp
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
=========================================
If you want more detail ,please contact me