Android 将文件写入不同的应用程序文件夹
Android Write file to a different application folder
- 我的设备已获得 root 权限
- 目标受众(如果共享应用)将仅限获得 root 权限的设备
我正在尝试通过修改一些图像文件来稍微自定义另一个应用程序。所以objective就是简单地覆盖微小的jpg文件(根据需要一次一个)
/data/data/com.otherapp/files/somefile.jpg
例如需要覆盖
在我尝试写入方法之前,p = Runtime.getRuntime().exec("su");
已经 运行。
我也按照类似问题的建议在写代码前添加了Runtime.getRuntime().exec("chmod 077 " +myFile.getAbsolutePath());
我的权限被拒绝了。
java.io.FileNotFoundException: /data/data/com......jpg: open failed: EACCES (Permission denied)
我手头的写代码是:
//myDir is /data/data/com.......
File myFile = new File (myDir.getAbsolutePath(), fname);
try {
//myFile.createNewFile();//tried with and without this
FileOutputStream out = new FileOutputStream(myFile);
btbmp.compress(Bitmap.CompressFormat.JPEG, 60, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
我该怎么做?
好吧,花了一整天,但我已经达到了预期的结果:
- 在 SD 卡上创建文件
- 然后将文件复制到根目录
src_file = "somefile/on/sdcard.jpg"
dest_file = "/data/data/com.anotherapp/files/abcde.jpg"
使用上下文获取路径
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("rm "+dest_file + "\n"); //removes destination file -might not be required - haven't tested
os.flush();
os.writeBytes("cat "+src_file+" > "+dest_file + "\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
// Waits for the command to finish.
process.waitFor();
}
catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
注意 在某些情况下,我必须更改根文件夹 777 才能正常工作。我确信这不是好的做法,这样做意味着使用该文件夹的应用程序可能无法访问它。在我的情况下,在我使用 ES Explorer
纠正它之前发生了这种情况
- 我的设备已获得 root 权限
- 目标受众(如果共享应用)将仅限获得 root 权限的设备
我正在尝试通过修改一些图像文件来稍微自定义另一个应用程序。所以objective就是简单地覆盖微小的jpg文件(根据需要一次一个)
/data/data/com.otherapp/files/somefile.jpg
例如需要覆盖
p = Runtime.getRuntime().exec("su");
已经 运行。
我也按照类似问题的建议在写代码前添加了Runtime.getRuntime().exec("chmod 077 " +myFile.getAbsolutePath());
我的权限被拒绝了。
java.io.FileNotFoundException: /data/data/com......jpg: open failed: EACCES (Permission denied)
我手头的写代码是:
//myDir is /data/data/com.......
File myFile = new File (myDir.getAbsolutePath(), fname);
try {
//myFile.createNewFile();//tried with and without this
FileOutputStream out = new FileOutputStream(myFile);
btbmp.compress(Bitmap.CompressFormat.JPEG, 60, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
我该怎么做?
好吧,花了一整天,但我已经达到了预期的结果:
- 在 SD 卡上创建文件
- 然后将文件复制到根目录
src_file = "somefile/on/sdcard.jpg"
dest_file = "/data/data/com.anotherapp/files/abcde.jpg"
使用上下文获取路径
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("rm "+dest_file + "\n"); //removes destination file -might not be required - haven't tested
os.flush();
os.writeBytes("cat "+src_file+" > "+dest_file + "\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
// Waits for the command to finish.
process.waitFor();
}
catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
注意 在某些情况下,我必须更改根文件夹 777 才能正常工作。我确信这不是好的做法,这样做意味着使用该文件夹的应用程序可能无法访问它。在我的情况下,在我使用 ES Explorer
纠正它之前发生了这种情况