App的静默安装和卸载
Android系统本身提供了安装卸载功能,但是api接口是@hide的,不是公开的接口,所以在应用级别
是无法实现静默安装和卸载的,要实现静默安装和卸载需要是系统应用,要有系统签名和相应的权限
简单思路如下:
1. 通过反射获得安装接口installPackage和 卸载接口 deletePackage
2. 在自己的包中引入两个接口IPackageInstallObserver和IPackageDeleteObserver的空实现
3. 调用安装卸载的方法,回调上面的两个接口
4. 添加权限 <uses-permission android:name="android.permission.DELETE_PACKAGES"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
5. 进行系统签名
6. 将应用push到系统中,作为系统应用
在PackageManager中的提供的接口如下
安装接口
// @SystemApi public abstract void installPackage( Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName);卸载接口
// @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 static

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

被折叠的 条评论
为什么被折叠?



