Android app开发中,禁止访问/data/local/tmp

     

       


最近在做一个项目,希望能够将一些预编译好的bin,so等从assert目录中,拷贝到/data/local/tmp目录下面,然后在android app开发中调用

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);

      模拟adb shell命令的执行情况,出现的问题有如下几个:

      1)没有办法创建目录

      2) 没有办法使用chmod

     提示,都是表示权限不够。

    后面在https://stackoverflow.com/questions/23424602/android-permission-denied-for-data-local-tmp中找到了原因。因为在最新的Android版本(我们的是7.0.1),这样做是不允许的。虽然他曾经可以过。

     我这边参考文中给出的方案,把我的所有预编译的东西都拷贝到了getContext().getFilesDir() 。在实际的项目中,这个地址是:/data/data/com.***.***/files.

     而关于文件的拷贝,可以通过OutputStream来实现。

    private void copyBigDataToSD(String strOutFileName) throws IOException {
        Log.i(TAG, "start copy file " + strOutFileName);
        File sdDir =  mActivity.getFilesDir();//获取跟目录
        File file = new File(sdDir.toString()+"/L2Norm/");
        if (!file.exists()) {
            file.mkdir();
        }

        String tmpFile = sdDir.toString()+"/L2Norm/" + strOutFileName;
        File f = new File(tmpFile);
        if (f.exists()) {
            Log.i(TAG, "file exists " + strOutFileName);
            return;
        }
        InputStream myInput;
        java.io.OutputStream myOutput = new FileOutputStream(sdDir.toString()+"/L2Norm/"+ strOutFileName);
        Log.i(TAG, "cpu property " + cpu_abi);
        String input_path = cpu_abi + "/" + strOutFileName;
        Log.i(TAG, "file exists " + input_path);
        myInput = this.mActivity.getAssets().open(input_path);
        byte[] buffer = new byte[1024];
        int length = myInput.read(buffer);
        while (length > 0) {
            myOutput.write(buffer, 0, length);
            length = myInput.read(buffer);
        }
        myOutput.flush();
        myInput.close();
        myOutput.close();
    }

 

### 回答1: `adb shell`是Android Debug Bridge的命令行工具,用于与连接的Android设备进行交互。`su`是用于获取root权限,可以执行需要root权限的命令。`cd /data/local/tmp`是将当前工作目录切换到`/data/local/tmp`目录,该目录通常用于存储临时文件。因此,这个命令的作用是切换到`/data/local/tmp`目录并以root权限执行。 ### 回答2: adb shell是Android Debug Bridge(ADB)提供的命令行工具,用于与连接的Android设备进行通信。su是superuser的缩写,用于获取root权限。cd /data/local/tmp是切换当前工作目录到/data/local/tmp。 在使用adb shell命令之前,确保已经连接了Android设备,并且设备的USB调试已经打开。 当我们想要执行一些需要root权限的操作时,可以使用adb shell su命令获取root权限。su命令可以将当前用户切换为超级用户,以便执行需要root权限的操作。执行su命令后,需要在设备上进行授权确认,只有授权通过后,才能获得root权限。 在获取了root权限之后,可以使用cd命令切换当前工作目录。cd命令用于改变当前所在的目录,/data/local/tmp是一个常用的目录,通常用于保存一些临时文件或执行一些操作。 综上所述,adb shell su cd /data/local/tmp是一条命令序列,用于获取root权限并切换当前工作目录到/data/local/tmp。使用这个命令序列可以执行一些需要root权限的操作,而且在/data/local/tmp目录下进行操作。 ### 回答3: adb shell是一种Android Debug Bridge(ADB)命令,它允许用户以远程方式与Android设备进行交互。通过adb shell命令用户可以进入设备的命令行界面。 su命令是在Android设备上以超级用户(root)权限执行命令的命令。在执行su命令之前,设备必须已经具有root权限。一旦用户通过su命令获取了root权限,他们可以在设备上执行更高级的操作,例如修改系统文件或运行特权命令。 cd命令是用于更改当前工作目录的命令。在这个例子中,cd命令被用于将当前工作目录更改为/data/local/tmp目录。 综上所述,通过执行adb shell su命令,用户将以root权限进入Android设备的命令行界面。然后,使用cd /data/local/tmp命令,用户会将当前工作目录更改为/data/local/tmp目录。 需要注意的是,使用adb shell su命令和执行高级操作具有风险,并且可能会导致设备出现问题。在进行这些操作之前,用户应该确保了解相关风险,并在必要时备份重要的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值