2012-04-17 57 views
0

我试图写我自己的Android应用程序将简单地位于/data/data/com.android.providers.telephony/databases/mmssms复制文件。 db到我的SD卡上的一个位置,/sdcard/test/mmssms.db备份mmssms.db从/数据/使用根权限

该设备已根并且该应用程序已被授予超级用户访问权限,但该文件从未被实际复制过。目标目录确实存在,应用程序的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"); 

以下权限的清单XML使用:

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

我只是想知道我能做些什么,能够复制该文件和其他人在/数据/目录。谢谢你的时间。

回答

0

我有完全相同的问题,我似乎无法得到这个在一个应用程序的工作。关于您的代码段,虽然一些有用的注意事项:

  • 运行这些命令作为单独调用调用Runtime.getRuntime()EXEC()是没有意义的,因为高管的每个invokation开始一个新的子进程具有相同priveledges作为你的应用。运行exec(“su”)不会为后面的命令(mount,chmod等)赋予根权限,因为它们是新进程。您需要改为执行exec(“su -c'command'”)

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

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