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

我可以在sqlite管理器的帮助下从Eclipse中的AVD访问这个文件

但是我的安卓手机无法访问这个文件。 我谷歌了一下,它说我需要在我的手机上查找,但我不想这样做。

我如何访问我的data/data/.....目录在我的安卓手机“没有根它”?

是否可以更改目录data/data.....的用户权限没有生根?


当前回答

你可以像这样下载一个文件:

Adb执行run-as debug .app.package.name cat files/file.mp4 > file.mp4

在你下载之前,你可能不想看看你的App-Directory中的文件结构。要做到这一点,请按照上面THelper提到的步骤:

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

Shahidul提到的Android-Studio方式(https://stackoverflow.com/a/44089388/1256697)也可以。对于那些在菜单中没有看到DeviceFile资源管理器选项的人:请确保在Android Studio中打开/ Android - directory。 例如,react-native用户在他们的Project-Folder中有这个和/ios-Directory在同一级别。

其他回答

你也可以尝试使用根资源管理器应用程序获取db。如果这不起作用,那么你可以试试这个:

打开cmd 改变目录,进入“平台工具” 类型为“adb shell” 苏 在设备上按“允许” chmod 777 /数据/数据/数据/数据/数据/ com.application。包/数据/数据/ com.application.package / * 在Eclipse中打开DDMS视图,然后从那里打开“FileExplorer”以获得所需的文件

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

从Android备份到Desktop

打开命令行cmd并运行以下命令: adb backup -f C:\Intel\xxx。Ab -noapk你的。app.package。 不输入密码,点击备份我的数据。 确保不要保存在C根盘上。你可能会被拒绝。 这就是为什么我保存C:\英特尔。

来提取*。ab文件

点击这里下载:https://sourceforge.net/projects/adbextractor/ 解压缩下载的文件,并导航到解压缩的文件夹。 使用自己的文件名运行:java -jar abe.jar unpack c:\Intel\xxx英特尔ab c: \ \ xxx.tar

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

adb exec-out run-as package.name cat databases/file > file

您还可以尝试将文件复制到SD卡文件夹,这是一个公共文件夹,然后您可以将文件复制到您的PC上,在那里您可以使用sqlite访问它。

下面是一些你可以用来将文件从data/data复制到公共存储文件夹的代码:

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" />

SQLlite数据库存储在用户的手机,它隐藏在路径下:

/Data/Data/com.companyname.AppName/File/

你有两个选择:

你可以根你的手机,这样你就可以查看你的隐藏 db4文件 这不是解决方案,而是一种变通办法。为什么不直接创建测试呢 使用“select”语句在其中显示数据库表的页面。