静默安装apk,静默卸载apk

来源:互联网 发布:网络出版社 编辑:程序博客网 时间:2024/05/19 04:04
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
原创粉丝点击