自从它发布以来,我一直在使用Android Studio来开发我的应用程序。
一切都很好,直到最近,我必须与检查数据库文件一起调试。由于我不知道如何直接查看数据库,当我调试生成数据库文件时,我必须将数据库文件从手机导出到PC。
为了做到这一点,我必须打开DDMS > File Explorer
。一旦我打开DDMS,我就必须重新连接USB,我就失去了调试线程。检查数据库文件后,我必须关闭DDMS并再次重新连接USB以返回调试模式。
这太复杂了。有没有人有更好的方法在Android Studio中执行此操作(我知道它在Eclipse中更容易)?
编辑:要在仿真器上查看数据库,请按照以下步骤操作(对于实际设备,请滚动到底部):
Tools > Android > Android Device Monitor
打开DDMS
点击左侧的设备。
你应该看到你的申请:
转到文件资源管理器(右侧的一个选项卡),转到/data/data/databases
只需单击它即可选择数据库。
转到Android Device Monitor窗口的右上角。点击“从设备中提取文件”按钮:
将打开一个窗口,询问您要保存数据库文件的位置。将它保存在PC上的任何位置。
Android Studio版本> = 3.0:
通过View > Tool Windows > Device File Explorer
打开设备文件资源管理器
转到data > data > PACKAGE_NAME > database
,其中PACKAGE_NAME是您的包的名称(在上面的示例中为com.Movie)
右键单击数据库并选择Save As...
。将它保存在PC上的任何位置。转到this Github存储库并按照自述文件中的说明操作,以便能够在您的设备上查看数据库。你得到的是这样的:
而已。但是,在发布应用程序之前,您应该撤消所有这些步骤。
最简单的方法是附加您的设备并运行Android Studio然后从工具栏:
另一种方法是使用Stetho库:
就是这样。你现在可以探索你的桌子。
注意:建议在转移到生产之前删除依赖关系。
如果你想从WITHIN ANDROID STUDIO浏览你的数据库,这就是我正在使用的:
转到文件/设置/插件并查找:
https://sqlitestudio.pl/index.rvt?act=download
这是一个非常古老的问题,我的回答类似于上面的一些答案,但做得更快。下面的脚本适用于Mac,但我确信有人可以为Windows修改它。
1)在Mac上打开脚本编辑器(您只需在Spotlight中搜索脚本编辑器) 2)复制并粘贴下面的文本,并使用您的SDK路径,包名等进行修改(见下文) 3)保存脚本!!
而已!只需按下顶部的播放按钮即可获取更新的数据库文件,该文件将位于您的桌面上。
在下面的脚本中替换以下内容:
path_to_my_sdk == >>将完整路径放到你的sdk上 my_package_name == >>您的应用程序的包名称 myDbName.db == >>数据库的文件名
希望这有助于某人。
我正在使用Windows 7,我的设备是模拟的Android设备API 23.我认为它对于任何真实设备都是相同的,只要它是root并且API不高于23
转到工具 - > Android - > Android设备监视器。转到文件资源管理器。就我而言,它位于数据/数据// app_webview / databases / file_0 / 1中
我必须在名为“1”的文件末尾手动添加.db
我知道问题相当陈旧,但我相信这个问题仍然存在。
我创建了一个开发工具,您可以将其作为lib集成到您的Android应用程序项目中。该工具在您的应用中打开服务器套接字,以通过Web浏览器进行通信。您可以浏览整个数据库并直接通过浏览器下载数据库文件。
set getLocalDb to "path_to_my_sdk/platform-tools/adb shell run-as my_package_name chmod 777 databases && path_to_my_sdk/platform-tools/adb shell run-as my_package_name chmod 777 databases/myDbName.db && path_to_my_sdk/platform-tools/adb shell run-as my_package_name cp databases/myDbName.db /sdcard/myDbName.db && path_to_my_sdk/platform-tools/adb pull /sdcard/myDbName.db /Users/User/Desktop/myDbName.db"
do shell script getLocalDb
可以通过jitpack.io完成集成:
project build.gradle:
app build.gradle:
//...
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
//...
为了只在某些构建类型或产品风格中编译DebugGhostLib,我们需要一个抽象的Application类,它将以特殊的风格派生。将以下类放在//...
dependencies {
//...
debugCompile 'com.github.sanidgmbh:debugghost:v1.1'
//...
}
//...
文件夹中(在main
> java
下):
your.app.package
现在,对于您的发布版本类型(或产品风格),您将以下Application类添加到public class AbstractDebugGhostExampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Do your general application stuff
}
}
(或product-flavor)文件夹(也在release
> java
下):
your.app.package
这是不会引用DebugGhostLib的应用程序类。
还告诉你的public class MyApp extends AbstractDebugGhostExampleApplication {
@Override
public void onCreate() {
super.onCreate();
}
}
你正在使用自己的应用程序类。这将在您的AndroidManifest.xml
文件夹中完成:
main
现在,对于您的调试构建类型(或产品风格),您将以下Application类添加到<manifest package="demo.app.android.sanid.com.debugghostexample" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- permissions go here -->
<application android:name=".MyApp"> <!-- register your own application class -->
<!-- your activities go here -->
</application>
</manifest>
(或product-flavor)文件夹(也在debug
> java
下):
your.app.package
你可以得到public class MyApp extends AbstractDebugGhostExampleApplication {
private DebugGhostBridge mDebugGhostBridge;
@Override
public void onCreate() {
super.onCreate();
mDebugGhostBridge = new DebugGhostBridge(this, MyDatabaseHelper.DATABASE_NAME, MyDatabaseHelper.DATABASE_VERSION);
mDebugGhostBridge.startDebugGhost();
}
}
。
我不得不将数据库从手机拉到PC。现在我使用这个制作精良且免费的应用程序,它具有很多功能。它适用于带有Root设备的tool here。 如果您发现如何在没有root的情况下使其工作,请告诉我。
API 4.1+
它是来自其他答案和加号的组合
这可能不是您正在寻找的答案,但我没有更好的方法从手机下载数据库。我建议的是确保你使用这个mini-DDMS。如果你没有点击程序最左边的非常小的camoflage框,它将是超级隐藏的。 (试图将鼠标悬停在它上面,否则你可能会错过它。)
还有没有过滤器的下拉(右上)。它实际上有很多不同的方法可以通过PPID,名称和更多来监控不同的流程/应用程序。我一直用这个来监控手机,但请记住,我没有做那种需要120%肯定的开发工作,数据库没有做一些与众不同的事情。
希望能帮助到你
我还没有找到任何方法在Android Studio中执行此操作,但我使用远程shell访问数据库而不是每次都拉取文件。
在这里找到所有信息:http://developer.android.com/tools/help/adb.html#sqlite
1-在命令提示符中转到platform-tools文件夹
2-输入命令adb devices
以获取设备列表
C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb devices
List of devices attached
emulator-xxxx device
3-将shell连接到您的设备:
C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb -s emulator-xxxx shell
4-导航到包含db文件的文件夹:
cd data/data/<your-package-name>/databases/
5-运行sqlite3连接到你的db:
sqlite3 <your-db-name>.db
6-运行你喜欢的sqlite3命令,例如:
Select * from table1 where ...;
注意:查找下面要运行的更多命令。
在SQLite数据库中查看表有几个步骤:
.tables
.schema tablename
SELECT * FROM tablename;
.help
我已经将这个过程的unix命令行自动化放在一起并将代码放在这里:
它是一个shell脚本,它将包名称和数据库名称作为参数,从附加的Android设备下载数据库文件,并针对下载的文件运行自定义脚本。然后,使用像'watch'这样的unix工具,可以打开一个终端窗口,定期更新数据库脚本输出视图。
我真的很惊讶没有人给出这个解决方案:
看看Stetho
我曾多次出于不同的目的使用Stetho(其中一种是数据库检查)。在实际的website上,他们还讨论了网络检查的功能并查看了视图层次结构。
它只需要一点设置:1个gradle依赖项添加(你可以为生产版本注释掉),几行代码来实例化Stetho,以及一个Chrome浏览器(因为它使用Chrome devtools来处理所有事情)。
更新:您现在可以使用Stetho查看Realm文件(如果您使用的是Realm而不是SQLite DB):https://github.com/uPhyca/stetho-realm
更新#2:您现在可以使用Stetho查看Couchbase文档:https://github.com/RobotPajamas/Stetho-Couchbase
更新#3:Facebook正致力于将所有Stetho功能添加到其新工具Flipper中。 Flipper已经拥有Stetho的许多功能。所以,现在可能是进行转换的好时机。 https://fbflipper.com/docs/stetho.html
不使用模拟器时最简单的方法
$ adb shell
$ run-as your.package.name
$ chmod 777 databases
$ chmod 777 databases/database_name
$ exit
$ cp /data/data/your.package.name/databases/database_name /sdcard
$ run-as your.package.name # Optional
$ chmod 660 databases/database_name # Optional
$ chmod 660 databases # Optional
$ exit # Optional
$ exit
$ adb pull /sdcard/database_name
我有一段时间没有测试过这个。它可能不适用于API> = 25。如果cp命令不起作用,请尝试以下操作之一:
# Pick a writeable directory <dir> other than /sdcard
$ cp /data/data/your.package.name/databases/database_name <dir>
# Exit and pull from the terminal on your PC
$ exit
$ adb pull /data/data/your.package.name/databases/database_name
第一个块将数据库的权限配置为可读。这利用了run-as
,它允许您冒充您的包的用户进行更改。
$ adb shell
$ run-as your.package.name
$ chmod 777 databases
$ chmod 777 databases/database_name
$ exit # Closes the shell started with run-as
接下来,我们将数据库复制到世界可读/可写目录。这允许adb pull用户访问。
$ cp /data/data/your.package.name/databases/database_name /sdcard
然后,替换现有的读/写权限。这对您的应用程序的安全性很重要,但是在下次安装时将替换这些权限。
$ run-as your.package.name
$ chmod 660 databases/database_name
$ chmod 660 databases
$ exit # Exit the shell started with run-as
最后,将数据库复制到本地磁盘。
$ exit # Exits shell on the mobile device (from adb shell)
$ adb pull /sdcard/database_name
最后,我找到了一个最简单的解决方案,不需要打开DDMS。
实际上,解决方案基于@Distwo所提到的,但它不一定非常复杂。
首先,记住设备中数据库文件的路径,它应该始终相同。例如我的是:qazxsw poi
其次,执行此命令将数据库文件拉到PC上
/data/data/com.XXX.module/databases/com.XXX.module.database
您需要做的只是复制并存储此命令,然后您可以反复使用它。
第三,如果你有权限被拒绝或类似的东西,只需在上一个命令之前运行 adb pull /data/data/com.XXX.module/databases/com.XXX.module.database /Users/somePathOnYourPC/
。
经过我将建议的所有解决方案
使用Stethos 让我们看看它有多简单
在build.gradle文件中添加以下依赖项
然后转到mainActivity onCreate方法添加以下行
compile 'com.facebook.stetho:stetho:1.5.0'
compile 'com.facebook.stetho:stetho-js-rhino:1.4.2'
这需要你
Stetho.initializeWithDefaults(this);
现在从Android工作室运行应用程序,打开Chrome和地址栏类型 铬://检查/
在资源选项卡> Web SQL中检查数据库和表格可以轻松实时播放
要知道你在android studio中创建的sqlite数据库存储位置,你需要按照简单的步骤:
import com.facebook.stetho.Stetho;
有关更多信息,此链接将非常有用。 1.Run your application
2.Go to Tools--->Android---->Device Monitor
3.Find your application name in left panel
4.Then click on File Explorer tab
5.Select data folder
6.Select data folder again and find your app or module name
7.Click on your database name
8.On right-top window you have an option to pull file from device.
9.Click it and save it on your PC
10.Use FireFox Sqlite manager to attach it to your project.
要查看db文件中存在的数据,您需要下载sqlite浏览器或在任何浏览器中添加相同的插件,因此您需要在浏览器中打开文件并查看数据。
从http://www.c-sharpcorner.com/UploadFile/e14021/know-where-database-is-stored-in-android-studio/下载浏览器
以下是显示包含注册数据库的浏览器
谢谢,