首页 文章

如何访问Android设备中的数据/数据文件夹?

提问于
浏览
249

我正在开发一个应用程序,我知道我的数据库 *.db 将出现在 data/data/com.****.***

我可以在sqlite manager的帮助下从Eclipse中的AVD访问此文件

但我无法在Android手机中访问此文件 .
我谷歌它,它说我需要根我的手机来做它,但我不想这样做 . (新手机,保修问题和安全问题)

所以这是我的问题:如何在我的Android手机“ without rooting it ”中访问我的 data/data/..... 目录?

我可以在不生根的情况下更改目录 data/data..... 的用户权限吗?

17 回答

  • 60

    直接在手机上访问文件很困难,但您可以将它们复制到计算机上,在计算机上您可以随意执行任何操作 . 没有root,你有2个选择:

    • 如果应用程序是可调试的,您可以在adb shell中使用 run-as 命令
    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
    • 或者您可以使用Android的备份功能 .
    adb backup -noapk com.your.packagename
    

    现在将提示您'unlock your device and confirm the backup operation' . 它's best NOT to provide a password, otherwise it becomes more difficult to read the data. Just click on '备份我的数据'. The resulting ' backup.ab ' file on your computer contains all application data in android backup format. Basically it'是一个压缩的tar文件 . This page解释了如何使用OpenSSL的zlib命令解压缩它 . 您可以使用 adb restore backup.db 命令恢复备份 .

  • 0

    如果您使用的是Android Studio 3.0或更高版本,请按照以下步骤操作 .

    • 单击 View > Tool Windows > Device File Explorer .

    • 展开 /data/data/[package-name] 个节点 .

    您只能展开在非root设备上以调试模式运行的程序包 .

    Steps followed in Android Studio 3.0

  • 0

    您还可以尝试使用root explorer app获取数据库 . 如果这不起作用,那么你可以试试这个:

    • 打开cmd

    • 更改目录并进入'Platform tools'

    • 输入' adb shell '

    • su

    • 在设备上按'Allow'

    • chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*

    • 在Eclipse中打开DDMS视图,然后打开'FileExplorer'以获取所需文件

    在此之后,您应该能够浏览root设备上的文件 .

  • 80

    要执行上述任何操作(即从手机本身访问受保护的文件夹),您仍需要root . (包括更改/ data文件夹的安装权限并访问它)

    如果没有root,则无法直接访问 /data 以通过代码读取 except from within your 应用程序 . 因此,您可以尝试将该文件复制到SD卡或可访问的位置,然后,您应该能够正常访问它 .

    如果您有开发人员设备,生根不会使您的保修失效 . 对不起,AFAIK没有其他办法 .

  • 11

    在未经验证的Android 5.0设备上从可调试应用程序文件夹(例如 /data/data/package.name/databases/file )中提取文件的最简单方法(只需一个简单的步骤)就是使用以下命令:

    adb exec-out run-as package.name cat databases/file > file
    
  • 11
    • 打开命令提示符

    • 将目录更改为E:\ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools

    • 输入以下命令

    • adb -d shell

    • run-as com.your.packagename cat databases/database.db > /sdcard/database.db

    • 将目录更改为 cd /sdcard 以确保 database.db 在那里 .

    • adb pull /sdcard/database.db 或者只是您可以从设备复制database.db .

  • 0

    在eclipse中使用文件资源管理器 . 选择Windows =>显示视图=>其他... =>文件资源管理器 .

    另一种方法是通过adb拉取文件:

    adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
    
  • 4

    rooted 设备上,正确的解决方案是:

    Open cmd
    Change your directory and go into 'Platform tools'
    Type 'adb shell'
    su
    Press 'Allow' on device
    chmod 777 /data /data/data /data/data/*
    Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file
    

    原始解决方案有效,但chmod将返回未知目录 . 将chmod命令更改为/ data / data / *可以从Intellij中的DDMS访问数据目录中的所有子文件夹 . 我假设Eclipse DDMS也是如此 .

    UPDATE 那么,我在IntelliJ(Android设备监视器)中使用DDMS运行Nexus 6 . 我已经构建了一个小启动应用程序 . 所述应用程序将数据保存到data / data / com.example.myapp / files中的.csv文件中

    当我第一次尝试在Nexus 6上访问此文件时,我发现我必须根设备..我可以看到数据文件夹,但尝试打开它将无法正常工作 . 正如在其他地方在网上提到的那样,扩展会消失然后很快再次出现(注意,网上有解决方案声称允许访问这些文件夹而不生根,我没有发现它们为时已晚,我不是确定我是否还是不想root((我宁愿能够手动完成而不是依靠应用程序或命令提示符来提供我的解决方案))) . 我扎根了我的6并再次尝试了DDMS .

    此时,它向我展示了数据文件夹,我可以展开文件夹并查看com . 目录,但我无法打开它们中的任何一个 . 那是我发现上述解决方案的时候 . 初始说明不适用于此部分:

    chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*
    

    那时我尝试了我发布的解决方案:

    chmod 777 /data /data/data /data/data/*
    

    该解决方案似乎有效,但仅适用于某些文件夹 . 我现在可以扩展myapp文件夹,但无法展开其中的files目录 .

    在这一点上,我玩了一会儿,然后想出为什么不在我需要的目录上尝试它而不是尝试这些通配符条目 .

    chmod 777 /data /data/data /data/data/com.example.myapp/*
    

    其次是:

    chmod 777 /data /data/data /data/data/com.example.myapp/files
    

    这些命令允许我扩展和查看我的应用程序中的文件目录,以确认正确保存.csv .

    希望这有助于某人 . 我挣扎了好几个小时!

    (稍微复杂一点,奇怪的是,权限没有传递给传递给files目录的.csv文件 . 我的文件目录权限读取drwxrwxrwx和我的log.csv文件权限读取-rw-rw --- - ..只是fyi)

  • 1

    我曾经也遇到过同样的问题 . 除了adb shell或rooting device之外,无法直接访问android设备中的文件 .

    除此之外还有02种替代方案:

    1)

    public void exportDatabse(String databaseName)
       {
         try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();
    
            if (sd.canWrite()) {
                String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
                String backupDBPath = "backupname.db";
                File currentDB = new File(data, currentDBPath);
                File backupDB = new File(sd, backupDBPath);
    
                if (currentDB.exists()) {
                    FileChannel src = new FileInputStream(currentDB).getChannel();
                    FileChannel dst = new FileOutputStream(backupDB).getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                }
            }
        } catch (Exception e) {
    
        }
    }
    

    2)试试这个:https://github.com/sanathp/DatabaseManager_For_Android

  • 3

    从Android备份到桌面

    打开命令行cmd并运行它:adb backup -f C:\ Intel \ xxx.ab -noapk your.app.package . 不要输入密码,然后单击备份我的数据 . 确保不要保存在驱动器C root上 . 你可能会被拒绝 . 这就是我在C:\ Intel上保存的原因 .

    提取* .ab文件

  • 9

    其中一个简单的方法是在SD卡上创建数据库 . 因为您无法访问内部存储器中的手机数据文件夹,除非您使用手机 . 那么为什么不简单地在SD卡上创建数据库呢?

    此外,如果需要,您可以编写一些文件复制代码,将现有数据库文件(从内部存储器)复制到外部存储器,而无需任何根 .

  • 0

    adb backup didn 't work for me, so here' s我做了什么(小米Redmi Note 4X,Android 6.0):
    1.转到 Settings > Additional Settings > Backup & reset > Local backups .
    2.点击屏幕底部的'Back up' .
    3.取消选中'System'和'Apps'复选标记 .
    4.点击'Apps'单元格右侧的详细信息显示按钮以导航到应用程序选择屏幕 .
    5.选择所需的应用程序,然后点击确定 .
    6.备份完成后,需要以某种方式定位实际文件 . 我可以在 /MIUI/backup/AllBackup/FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE 找到我的 .
    7.然后我按照this answer中的步骤RonTLV将实际转换备份文件(在我的情况下为.bak)转换为tar(从原始答案中复制):

    a)到这里下载:https://sourceforge.net/projects/adbextractor/
    b)提取下载的文件并导航到解压缩的文件夹 .
    c)使用您自己的文件名运行:java -jar abe.jar unpack c:\ Intel \ xxx.ab c:\ Intel \ xxx.tar

  • 2

    您可以将此db文件复制到eclipse资源管理器中的某个位置(例如:sdcard或PC),并且可以使用sqlite访问和更新此db文件 .

  • 0

    问题是:如何访问-data-data-data-folder-in-android-device?


    如果android-device是Bluestacks * Root Browser APK显示数据/数据/ ..


    尝试从https://apkpure.com/root-browser/com.jrummy.root.browserfree下载Root Browser


    如果文件是文本文件,则需要单击“打开为”,“文本文件”,“打开为”,“RB文本编辑器”

  • 310

    可能是要访问此文件夹,您需要管理权限 .

    所以你有两个选择: -

    • root您的设备,然后尝试访问此文件夹

    • 使用模拟器

    附: :如果您使用以上两个选项中的任何一个,则可以按照以下步骤访问此文件夹

    打开DDMS透视图 - >您的设备 - >(从右侧窗口选项中选择文件资源管理器)选择包 - >数据 - >数据 - >包名 - >文件

    从那里你可以提取你的文件

  • 22

    您也可以尝试将文件复制到SD卡文件夹,这是一个公用文件夹,然后您可以将文件复制到PC,您可以使用sqlite访问它 .

    以下是一些可用于将文件从数据/数据复制到公共存储文件夹的代码:

    private void copyFile(final Context context) {
        try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();
    
            if (sd.canWrite()) {
                String currentDBPath =
                        context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
    
                String backupDBPath = "data.db";
    
                File currentDB = new File(currentDBPath);
                File backupDB = new File(sd, backupDBPath);
    
                if (currentDB.exists()) {
                    FileChannel src = new FileInputStream(currentDB).getChannel();
                    FileChannel dst = new FileOutputStream(backupDB).getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    表现:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
    
  • 1

    您可以下载这样的sigle文件:

    adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

    在下载之前,您可能不想查看App-Directory中的文件结构 . 为此,请执行以下上述步骤:

    adb shell
    run-as com.your.packagename 
    cd files
    ls -als .
    

    Shahidul提及的方式(https://stackoverflow.com/a/44089388/1256697)也有效 . 对于那些在菜单中没有看到 DeviceFile Explorer 选项的人:确保在Android Studio中打开/ android-Directory . 例如 . react-native用户将其内置在Project-Folder中与/ ios-Directory位于同一级别 .

相关问题