您的位置:首页 > 其它

静默安装apk,静默卸载apk

2013-07-17 10:09 260 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: