在app中静默安装其它apk的方法

1.判断设备是否有root权限
    public static boolean hasRootPermission(){
        boolean result = false;
        try {
            result = new File("/system/bin/su").exists() || new File("/system/xbin/su").exists();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

2.静默安装
    这里要用exec("sh")而不是exec("su")!!!!!!!!!!!!!!!
    参考了很多静默安装的文章,不是要root权限或者Android源码环境,就是需要使用反射packageManager.installPackage(...)方法,但是该方法需要aidl文件,而导入相应的aidl文件又往往一堆报错。使用pm 
install 
-r 命令进行安装的方法也往往失败,区别就在su和sh这里。
public static boolean silentInstall(String apkPath){
    boolean result = false;
    Process process = null;
    OutputStream out = null;
    try {
        process = Runtime.getRuntime().exec("sh");
        out = process.getOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(out);
        dataOutputStream.writeBytes("chmod 777 " + apkPath + "\n");
        dataOutputStream.writeBytes("LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r " + apkPath);
        dataOutputStream.flush();
        dataOutputStream.close();
        out.close();
        int value = process.waitFor();
        if (value == 0) {//成功
            result = true;
        } else if (value == 1) { // 失败
            result = false;
        } else { // 未知情况
            result = false;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    return result;
}

3.在manifest文件中加入权限
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />

4.使用adb工具把apk安装到system/app/路径下(安装于该路径下的应用,可以相应的权限)
方法如下:
adb push appmarket.apk /sdcard/                               // 上传要安装的文件,为安装做准备。
adb shell
su                                                  // 切换到 root 用户。如果没有获得 Root 权限,这一步不会成功。
mount                                                //显示当前mount情况
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system    // 让分区可写。
cat /sdcard/appmarket.apk > /system/app/appmarket.apk         // 安装
mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system    // 还原分区属性,只读。
exit
exit

5.大功告成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值