Android实践 -- App的静默安装和卸载

本文详细介绍了如何在Android系统中实现静默安装和卸载应用。首先,需要通过反射调用系统接口,并引入回调的空实现。接着,定义接口回调,实现安装和卸载方法,并添加必要的系统签名权限。最后,对apk进行系统签名并推送到设备上,以实现静默操作。文章还提供了安装卸载错误码的速查。
摘要由CSDN通过智能技术生成

App的静默安装和卸载

Android系统本身提供了安装卸载功能,但是api接口是@hide的,不是公开的接口,所以在应用级别
是无法实现静默安装和卸载的,要实现静默安装和卸载需要是系统应用,要有系统签名和相应的权限

简单思路如下:
1. 通过反射获得安装接口installPackage和 卸载接口 deletePackage
2. 在自己的包中引入两个接口IPackageInstallObserverIPackageDeleteObserver的空实现
3. 调用安装卸载的方法,回调上面的两个接口
4. 添加权限 <uses-permission android:name="android.permission.DELETE_PACKAGES"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
5. 进行系统签名
6. 将应用push到系统中,作为系统应用

PackageManager中的提供的接口如下
  1. 安装接口

    // @SystemApi
    public abstract void installPackage(
        Uri packageURI, IPackageInstallObserver observer, int flags,
        String installerPackageName);
  2. 卸载接口

    // @SystemApi
    public abstract void deletePackage(
        String packageName, IPackageDeleteObserver observer, int flags);
引入两个回掉的空实现

在自己应用的工程中新建一个包android.content.pm,并添加两个文件
* IPackageDeleteObserver.java

    package android.content.pm;
    public interface IPackageDeleteObserver extends android.os.IInterface {
   
    public abstract static class Stub extends android.os.Binder implements android.content.pm.IPackageDeleteObserver {
   
        public Stub() {
            throw new RuntimeException("Stub!");
        }

        public static android.content.pm.IPackageDeleteObserver asInterface(android.os.IBinder obj) {
            throw new RuntimeException("Stub!");
        }

        public android.os.IBinder asBinder() {
            throw new RuntimeException("Stub!");
        }

        public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags)
                throws android.os.RemoteException {
            throw new RuntimeException("Stub!");
        }
    }

    public abstract void packageDeleted(java.lang.String packageName, int returnCode)
            throws android.os.RemoteException;
  }
  • IPackageInstallObserver.java

    package android.content.pm;
    public interface IPackageInstallObserver extends android.os.IInterface {
         
    
    public abstract s
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值