怎样向android手机/data/data/package_name/目录下拷贝文件

来源:互联网 发布:win10网络连接显示红叉 编辑:程序博客网 时间:2024/05/17 01:39

背景。

一个apk安装后,在android系统中有一个私有的目录供存储数据用,在/data/data/package_name/下。关于这个目录的说明,网上有很多说明。对于应用而言,操作这个目录是没有问题的。但对于一些必须手动创建的,比如程序初始化资源、认证资源,普通的做法还是直接把文件直接拷进去,这就必须能够访问这些目录才行。


在这种需求下,仅仅是把手机连上pc就办不到了。用以下的方式可以办到。


首先,手机必须root过。如何判断手机是否root过在网上有很多帖子,我就不写了。


第二,要在pc上安装android_usb_windows驱动。在xp下弄这个遇到点儿麻烦。从网上下载的安装包里面只有sys文件、dll文件、inf文件。右键点inf文件,然后选择“安装”,这个过程完成后,在系统的硬件管理中应该出现一个问题设备,也就是说,其实安装是失败了,所以看起来必须手动安装(是否直接手动安装也可以没试验过)。安装过程中,设备驱动描述文件还是选择刚才的inf文件。安装后必须重启。重启电脑后,要保持设备仍然连接在usb上,系统会提示找到新硬件,这时候,剩下的事情windows就能自己搞定了。


第三步,捣腾文件。这一步我弄的比较复杂,不知道有没有简单的办法。按理说用adb应该能搞,不过我遇到一些问题解决不了,所以就想其它的办法了。步骤是这样的:

a:把文件拷贝到手机里。做过第二步,手机连上pc,从pc里能够访问手机的存储卡,上面应该有个“download”目录。我就是直接把需要的文件拷贝到这个目录里面。

b:在手机上安装一个“终端模拟器”,google play商店里有,运行它,用linux命令就可以将放在download目录下的文件拷贝到需要的目录里面去。比如文件名是"abc.x",应用的包名是"com.x.app",那么命令就是这样的:

>su

>cp     /mnt/sdcard/download/abc.x         /data/data/com.x.app/files/

此时,文件abc.x应该已经出现在它应该出现的地方了。不过,接下来我还遇到了问题。可能因为拷贝文件使用su登录的,所以此时应用并不能访问abc.x,通过以下命令可以看到:

>cd        /data/data/com.x.app/files/

>ls     -l     abc.x

显示的结果是:

---------     root    root   ...............

说明这个文件属于root用户,或者说,至少应用不能用它。所以就想到把文件的所有者和权限给改一下。linux下修改文件的所有者和权限的帖子就太多了,很容易找。在android中,每个应用都有自己的用户,所以,改变文件的所有者和访问权限之前,必须知道要改成什么。那么用下面的命令:

>cd      /data/data/

>ls       -l      com.x.app

可能的数出结果是:

drwxrwx--x     u0_a57      u0_a57       2013-03-22       15:22       cache

drwxrwx--x     u0_a57      u0_a57       2013-03-22       15:22      files

............................

可以看出来,u0_a57就是应用com.x.app在系统中的用户。

那么,问题就变得简单了,用以下的命令修改文件权限:

>cd       /data/data/com.x.app/files

>chown            u0_a57:u0_a57                *

>chmod              700            *

做完这一步以后,应用运行就完全没有问题了。


写完了。这就是我的办法。我一直认为,用adb应该能完成以上所有的事情,就算没别的优势,至少能用键盘,不用在手机上一个一个的按字母,眼睛都看花了。


最后,感谢网上写帖子、博客帮助其他人的童鞋们。没有你们的帖子和博客,我也解决不了这个问题。


另:

今天又试验了下,用adb完全可以实现。命令都不变