Android 静默安装应用 Eclipse上编译通过

一、从Android的源码中获取aidl文件

     从frameworks/base/core/java/android/content/pm目录中获取两个aidl文件IPackageDeleteObserver.aidl和IPackageInstallObserver.aidl,并添加到Eclipse的工程中。

二、利用反射调用PackageManager的installPackage方法。

public boolean installPackage() {
        boolean ret = true;
        PackageManager pm = mContext.getPackageManager();
        try {
            //get class
            
            Debug.info("MyPackageInstaller", "========================installPackage======================");
            Debug.info("MyPackageInstaller", "Apk path = " + mApkPath);
            Debug.info("MyPackageInstaller", "Package name = " + mPackageName);
            Debug.info("MyPackageInstaller", "========================installPackage======================");
            Class<?> pmClass = Class.forName("android.content.pm.PackageManager");
            Class<?> getType[] = new Class[4];
            getType[0] = Uri.class;
            getType[1] = IPackageInstallObserver.class;
            getType[2] = int.class;
            getType[3] = String.class;
            Method method = pmClass.getMethod("installPackage", getType);
    
            Object arglist[] = new Object[4];
            arglist[0] = Uri.fromFile(new File(mApkPath));
            arglist[1] = myPIO;
            arglist[2] = 0x000000010;
            arglist[3] = mPackageName;
    
            Object receiver = new Object();
            
    
            Object returnvalue = method.invoke(pm, arglist);

            if (receiver != null)
            {
                String value = (String) returnvalue;
                Debug.info("MyPackageInstaller", "Call installPackage value: " + value);
            }
        } catch (Exception e) {
            e.printStackTrace();
            ret = false;
        }
        return ret;
    }
    public IPackageInstallObserver myPIO = new IPackageInstallObserver() {


        @Override
        public IBinder asBinder()
        {
            // TODO Auto-generated method stub
            return null;
        }


        @Override
        public void packageInstalled(String packageName, int returnCode)
                throws RemoteException
        {
            int code = EVENT_INSTALL_FAILED;
            if (returnCode == 1) {
                code = EVENT_INSTALL_SUCCESSED;
            }
            Debug.info("MyPackageInstaller", "Install package @@@" + packageName + "@@@ returnCode=" + returnCode);
            if(mListener != null) {
                mListener.onInstallEvent(packageName, mApkPath, code);
            }
        }
        
    };
三、在AndroidManifest.xml上设置权限

       首先,应用需要获取system权限。

                 

    android:sharedUserId="android.uid.system"

     其次,声明权限。

      

    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.DELETE_PACKAGES" />

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值