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();
    }

 

你可能感兴趣的:(android)