android os有病毒卸载,Android APP中卸载其他APP的三种方法

方法一

直接使用Intent卸载

Uri uri = Uri.fromParts("package", "com.whty.demo", null);

Intent intent = new Intent(Intent.ACTION_DELETE, uri);

startActivity(intent);

这是最简单的方式,调用卸载方法系统会弹出卸载APP对话框,点击确定就会立即卸载,不需要额外权限

方法二

使用PackageManager静默卸载

谷歌认为该方法是不安全的行为,因此该接口是@hide的,不是公开的接口,调用此接口需要有系统签名和相应的系统级权限

具体来说就是需要权限,但 是系统级权限,普通APP根本无法获取到,如果在AndroidManifest.xml强行加入该权限编译也不会通过

5d98e468182de76ff2439250b451ada8.png

唯一的办法就是使用APK反编译工具在Android Studio之外修改权限,比如用apktool反编译工具先把apk文件解压出来,用编辑器在AndroidManifest.xml中加入上面的两个权限,然后在用工具apktool重新打包

获得权限后,定义PackageDeleteObserver实现类,实现packageDeleted方法

private class PackageDeleteObserver extends IPackageDeleteObserver.Stub {

private int position;

private int mFlag;

public PackageDeleteObserver(int index, int flag) {

position = index;

mFlag = flag;// 0卸载1个包,1卸载N个包 N>1

}

@Override

public void packageDeleted(String arg0, int arg1)

throws RemoteException {

// TODO Auto-generated method stub

Message msg;

msg = mHandle.obtainMessage();

msg.what = FLAG_DELETE_VIRUS;

msg.arg1 = position;

msg.arg2 = mFlag;

msg.sendToTarget();

}

}

获取PackageManager 对象,调用deletePackage方法

PackageManager pkgManager = mContext.getPackageManager();

PackageDeleteObserver observer = new PackageDeleteObserver(currVirus, 1);

pkgManager.deletePackage(pakName, observer, 0);

最后,还需要进行系统签名才能使用

对apk进行系统签名:

java -jar signapk.jar platform.x509.pem platform.pk8 test.apk test_signed.apk

将签名之后的文件 push到手机中,需要root权限

方法三

通过pm命令方式实现静默卸载

该方法直接对Android系统执行卸载命令,需要root权限

//pm命令可以通过adb在shell中执行,同样,我们可以通过代码来执行

public static String execCommand(String... command) {

Process process = null;

InputStream errIs = null;

InputStream inIs = null;

String result = "";

try {

process = new ProcessBuilder().command(command).start();

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int read = -1;

errIs = process.getErrorStream();

while ((read = errIs.read()) != -1) {

baos.write(read);

}

inIs = process.getInputStream();

while ((read = inIs.read()) != -1) {

baos.write(read);

}

result = new String(baos.toByteArray());

if (inIs != null)

inIs.close();

if (errIs != null)

errIs.close();

process.destroy();

} catch (IOException e) {

result = e.getMessage();

}

return result;

}

执行卸载命令

execCommand("pm","uninstall", "packageName");

编译生成apk时,要在manifest文件下添加Android:sharedUserId="android.uid.system"

package="com.xieyuan.mhfilemanager"

android:versionCode="1"

android:versionName="1.0"

android:installLocation="internalOnly"

android:sharedUserId="android.uid.system" >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值