0

我正在尝试为自己编写一个 Android 应用程序,它将简单地将位于 /data/data/com.android.providers.telephony/databases/mmssms.db 的文件复制到我的 sdcard 上的某个位置,/sdcard/test/mmssms。 D b

设备已root,应用程序已被授予超级用户访问权限,但该文件从未实际复制过。目标目录确实存在,并且应用程序的 SDK 为 1.5。以下是用于执行备份的命令。

Runtime.getRuntime().exec("su");

Runtime.getRuntime().exec("mount -o rw,remount -t yaffs2 /data/data/com.android.providers.telephony/databases /data");

Runtime.getRuntime().exec("chmod -R 777 /data/data/com.android.providers.telephony/databases");

Runtime.getRuntime().exec("cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/test/mmssms.db");

Manifest xml 中使用了以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我只想知道我能做些什么来复制 /data/ 目录中的那个文件和其他文件。谢谢你的时间。

4

1 回答 1

0

我有完全相同的问题,我似乎无法让它在应用程序中工作。不过,关于您的代码片段的一些有用说明:

  • 将这些命令作为对 Runtime.getRuntime().exec() 的单独调用运行是没有意义的,因为每次调用 exec 都会启动一个具有与您的应用程序相同权限的新子进程。运行 exec("su") 不会为以下命令(mount、chmod 等)授予 root 权限,因为它们是新进程。您需要改为执行 exec("su -c 'command'")

  • 运行“mount -o rw ....”应该不是必需的,因为您只是从这个分区读取,而不是写入它。

我很想看看是否有人解决了这个问题。使用 ES 文件资源管理器(具有 root 访问权限)复制文件没有问题。我还可以通过 USB 使用来自 PC 的根 ADB shell 复制文件。我的应用程序还在 Manifest.xml 中设置了 WRITE_EXTERNAL_STORAGE 权限。

于 2012-12-04T23:07:49.847 回答