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

来源:互联网 发布:苹果声场测试软件 编辑:程序博客网 时间:2024/05/16 17:43
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 shellsu                                                  // 切换到 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    // 还原分区属性,只读。exitexit5.大功告成
0 0
原创粉丝点击