Copying a file from withing a apk to the internal storage

后端 未结 2 1720
感情败类
感情败类 2020-12-20 07:21

I would like to push a text document from the apk into the /system directory (Yes its a app for rooted users) and was wondering how i would do this :) My txt file is in the

相关标签:
2条回答
  • 2020-12-20 07:53

    You can try this function (found here):

    public String runSystemCommand(String cmd)
    {
        try {
            // Executes the command.
            Process process = Runtime.getRuntime().exec(cmd);
    
            // Reads stdout.
            // NOTE: You can write to stdin of the command using
            //       process.getOutputStream().
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));
            int read;
            char[] buffer = new char[4096];
            StringBuffer output = new StringBuffer();
            while ((read = reader.read(buffer)) > 0) {
                output.append(buffer, 0, read);
            }
            reader.close();
    
            // Waits for the command to finish.
            process.waitFor();
    
            return output.toString();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }       
    }
    

    I've tryed it myself in this way:

        String cmdoutput = this.runSystemCommand("/system/bin/ls .");
        Log.d("SampleAndroidInterfaceActivity", "runSystemCommand() returned: " + cmdoutput);
    

    and works well. This is my output:

    05-16 17:50:10.423: runSystemCommand() returned: acct
    05-16 17:50:10.423: cache
    05-16 17:50:10.423: config
    05-16 17:50:10.423: d
    05-16 17:50:10.423: data
    05-16 17:50:10.423: default.prop
    05-16 17:50:10.423: dev
    05-16 17:50:10.423: etc
    05-16 17:50:10.423: init
    05-16 17:50:10.423: init.goldfish.rc
    05-16 17:50:10.423: init.rc
    05-16 17:50:10.423: mnt
    05-16 17:50:10.423: proc
    05-16 17:50:10.423: root
    05-16 17:50:10.423: sbin
    05-16 17:50:10.423: sdcard
    05-16 17:50:10.423: sys
    05-16 17:50:10.423: system
    05-16 17:50:10.423: ueventd.goldfish.rc
    05-16 17:50:10.423: ueventd.rc
    05-16 17:50:10.423: vendor
    

    If you know the absolute path of your txt file, you can easily copy it with a cp.

    0 讨论(0)
  • 2020-12-20 07:57

    Place the text file in your project's assets directory and then extract it to the filesystem with code like the one in the following thread: How to copy files from 'assets' folder to sdcard?

    EDIT: Here is some code that I use. For sourceFileName, pass in the name of the assets file relative to the assets folder (e.g. if you have myFile.txt in the assets folder, pass myFile.txt). For the destination file, pass a full path (e.g. /data/data/com.mycompany/mypackage/myFile.txt). context is the current activity (e.g. MyActivity.this).

    private boolean copyFile(Context context, String sourceFileName, String destFileName)
    {
        AssetManager assetManager = context.getAssets();
    
        File destFile = new File(destFileName);
    
        File destParentDir = destFile.getParentFile();
        destParentDir.mkdir();
    
        InputStream in = null;
        OutputStream out = null;
        try
        {
            in = assetManager.open(sourceFileName);
            out = new FileOutputStream(destFile);
    
            byte[] buffer = new byte[1024];
            int read;
            while ((read = in.read(buffer)) != -1)
            {
                out.write(buffer, 0, read);
            }
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
    
            return true;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    
        return false;
    }
    

    EDIT2: Turns out that the /system partition is mounted as read-only, even on rooted devices. This may help: Android: how to mount filesystem in RW from within my APK? (rooted, of course)

    0 讨论(0)
提交回复
热议问题