eclipse无法访问genymotion模拟器下/data/data文件解决方案

来源:互联网 发布:mac 如何编写html 编辑:程序博客网 时间:2024/05/16 10:27

     在学习android下SQLite数据库编程的时候,我们通常会在eclipse的File Explorer视图中导出数据库文件(后缀名为.db.db3),然后可能会在可视化的数据库软件(比如SQLite Expert)中查看。这个操作在我们使用android官方模拟器时是很常见的。但是,官方的模拟器运行起来又卡又慢,让人难以忍受。所以和很多人一样,我也选择了genymotion这个神器。启动运行,怎一个快字了得。

下载地址:https://cloud.genymotion.com/page/launchpad/download/ 

链接可能会失效,所以大家百度到genymotion的官网去下载就可以了。

        但是有个问题就是如果用这个模拟器测试数据库应用,在eclipse里面的文件管理器的视图中,是不能打开data文件夹的。相信很多人也都遇到过这个问题。其实问题的原因只是eclipse没有访问这个文件夹的权限而已。说到这里,因为Android是基于Linux的,所以我们要了解一下Linux中关于文件的知识了。

        首先,我们要运行一个genymotion的模拟机。注意只运行一个。在把你的应用部署到该模拟机之后。我们打开Windos的命令行窗口。输入 adb shell。来运行一个Android的迷你Linux 终端环境。

  • 我们可以通过ls -al命令来查看模拟机中文件的详细信息。

        

        我们以其中一行为例,比如data那一行。

        

        注意红线标注的地方:

0123456789drwxrwx--x

        第0位的字符表示的是文件的类型,用 d 代表的是文件夹(directory),用 - 表示文件。剩余的九位分作三组,三位一组。第一组 rwx 表示的是所有者的权限,第二组 rwx 表示的是所有者所在的组,所拥有的权限,第三组 - -x 表示的是其他人的拥有的权限。其中,r 表示 read ,即可读的权限,w 表示 write ,即可写的权限,x 表示 execute ,即可执行的权限。如果没有某一权限,则对应的位置为 - ,减号表示。同样的,我们可以在eclipse的文件管理器视图中查看。

        

        当你点击的时候,你会发现你,没有反应。data文件夹不会展开。其实并不是因为这是空文件夹,只是你没有这个权限而已。因为eclipse对于这个文件来说是“其他人”的身份。它的权限是 - - x 。也就是说没有可读(r)的权限。不过我们在命令行adb shell里面是所有者的身份。现在我们修改这个文件夹的访问权限。要修改,我们要切换到root的模式,在命令行输入
su 
。默认是没有密码的,所以我们直接成为了root用户。

        

        当前导符 $ 变成了 # 就说明,你现在是root用户了。然后还要了解的是 权限的数字表示方法。刚才不是三位为一组嘛,可以用4 2 1来表示对应权限。比如 r w x 就是 421。- - x 就是 0 0 1。所以r w x r w x - - x,就是4 2 1 4 2 1 0 0 1。简化版就是三位相加。表示为 7 7 1.(7 =4 +2 +1)。我们只需要该文件夹对 “其他人” 可读,就行了。所以只需将 - - x 变成 r - x,也就是4 0 1,即5。所以可执行修改访问模式的命令
chmod  775 data 
 ,然后再通过 ls -al命令查看一下。

        

        可以看出权限已经修改了。在看eclipse的文件管理器。data文件夹已经可以展开了。

        

        到了这里,只是data文件件可以访问。里面的子目录的权限并没有相应的改变。我们可以进入通过 cd命令,进入data文件夹,再按照上面的 命令去依次修改你要访问的文件夹的权限。我们接着要修改子目录data的属性。方法同上。然后进入第二个data文件夹,可以看到各个应用的文件夹。

        

        找到自己的刚才安装的应用的文件夹。再依次对子目录修改权限就能看到你的数据库文件了。然后你可以选择导出这个文件。

        

        如果你觉得,这样一步一步的太麻烦。你也可以批量修改文件夹及其子文件夹的属性。比如在最开始的data文件夹。你可以使用命令 chmod -R 775 data 其中参数-R的意思就是
递归(Recursive)的意思。这个递归在linux里面还是很常用的。比如删除非空的文件夹的时候。

0 0