在Android Studio中查看数据库文件的内容
自从发布以来,我一直在使用Android Studio开发我的应用程序。
一切都很好,直到最近,我不得不一起debugging数据库文件。 由于我不知道如何直接查看数据库,所以当我debugging生成数据库文件时,我必须将数据库文件从手机导出到PC。
为了做到这一点,我必须打开DDMS > File Explorer
。 一旦我打开DDMS,我必须重新连接USB,我失去了我的debugging线程。 检查数据库文件后,必须closuresDDMS并重新连接USB才能返callback试模式。
这太复杂了。 有没有人有更好的方式在Android Studio中做到这一点(我知道在Eclipse中更容易)?
从Android Studio查看数据库:
编辑:要在仿真器上查看您的数据库,请按照以下步骤操作(对于实际设备,请滚动至底部):
- 下载并安装SQLiteBrowser 。
- 通过
Tools > Android > Android Device Monitor
打开DDMS - 点击左侧的设备 。
你应该看到你的应用程序:
- 转到文件资源pipe理器 (右侧的选项卡之一),转到
/data/data/databases
-
select数据库只需点击它。
-
转到Android设备监视器窗口的右上angular。 点击“ 从设备中拉出文件 ”button:
-
将打开一个窗口,询问您要保存数据库文件的位置。 把它保存在你的电脑上的任何地方。
-
现在,打开你安装的SQLiteBrowser 。 点击“ 打开数据库 ”,导航到保存数据库文件的位置,然后打开 。 您现在可以查看数据库的内容。
要在您的移动设备上查看您的数据库:
转到此 Github存储库,并按照自述文件中的说明,以便能够查看您的设备上的数据库。 你得到的是这样的:
而已。 不过,在发布您的应用程序之前,您应该撤消所有这些步骤。
通过ADB Shell连接到Sqlite3
我还没有find任何方式在Android Studio中这样做,但我用远程shell访问数据库,而不是每次都拉动文件。
在这里find所有信息: http : //developer.android.com/tools/help/adb.html#sqlite
1-在命令提示符下转到您的platform-tools文件夹
2-input命令adb devices
以获取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-导航到包含您的数据库文件的文件夹:
cd data/data/<your-package-name>/databases/
5运行sqlite3连接到你的数据库:
sqlite3 <your-db-name>.db
6-运行你喜欢的sqlite3命令:
Select * from table1 where ...;
注意:find更多命令在下面运行。
SQLite的cheatsheet
有几个步骤来查看SQLite数据库中的表:
-
列出数据库中的表格:
.tables
-
列出表格的外观:
.schema tablename
-
打印整个表格:
SELECT * FROM tablename;
-
列出所有可用的SQLite提示符命令:
.help
不使用模拟器时最简单的方法
$ adb shell $ run-as your.package.name $ chmod 777 databases $ chmod 777 databases/databse_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
注意事项:
我有一段时间没有testing过。 它可能不适用于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
说明:
第一个块configuration您的数据库的权限是可读的。 这利用了run-as
,它允许你模拟你的软件包的用户进行更改。
$ adb shell $ run-as your.package.name $ chmod 777 databases $ chmod 777 databases/databse_name $ exit # Closes the shell started with run-as
接下来我们将数据库复制到一个世界可读/可写目录。 这允许adb pull用户访问。
$ cp /data/data/your.package.name/databases/database_name /sdcard
然后,replace现有的读/写权限。 这对您的应用程序的安全性非常重要,但是在下次安装时将会replace这些权限。
$ 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
我真的很惊讶,没有人给出了这个解决scheme:
看看Stetho
我曾多次使用Stetho用于不同的目的(其中一个是数据库检查)。 在实际的网站上 ,他们还讨论了networking检查的function,并通过视图层次来查看。
它只需要一点点的设置:1个gradle dependency addition(你可以为生产版本注释掉),几行代码来实例化Stetho,还有一个Chrome浏览器(因为它使用了Chrome开发工具)。
更新 :现在可以使用Stetho来查看Realm文件(如果您使用的是Realm而不是SQLite数据库): https : //github.com/uPhyca/stetho-realm
更新#2 :您现在可以使用Stetho查看Couchbase文档: https : //github.com/RobotPajamas/Stetho-Couchbase
最后,我find了一个不需要打开DDMS的最简单的解决scheme。
实际上,解决scheme是基于@Distwo提到的,但不一定非常复杂。
首先 ,记住设备中数据库文件的path,它应该是一样的。 例如我的是: /data/data/com.XXX.module/databases/com.XXX.module.database
其次 ,执行这个命令把你的数据库文件拖到你的PC上
adb pull /data/data/com.XXX.module/databases/com.XXX.module.database /Users/somePathOnYourPC/
你需要做的只是复制和存储这个命令,然后你可以反复使用它。
第三 ,如果你有权限拒绝或类似的东西,只需在前一个命令之前运行adb root
。
要知道您在android studio中创build的sqlite数据库的存储位置,您需要执行以下简单步骤:
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.
欲了解更多信息,这个链接将是有用的。 http://www.c-sharpcorner.com/UploadFile/e14021/know-where-database-is-stored-in-android-studio/
要查看你在db文件中的数据,你需要下载sqlite浏览器或者在任何浏览器中添加相同的插件,所以你需要在浏览器中打开文件并查看你的数据。
从http://sqlitebrowser.org/下载浏览器;
这里是显示包含注册数据库的浏览器
谢谢,
试试这个android studio插件SQLScout 。 您可以实时查看和编辑您的应用程序数据库。
这可能不是你正在寻找的答案,但我没有更好的方式从手机下载数据库。 我会build议的是确保你使用这个小型的DDMS。 如果您不点击程序最左边的小型胶框,它将被超级隐藏。 (试图hover在上面,否则你可能会错过)
另外下拉,说没有filter(右上)。 它实际上有很多不同的方式,你可以通过PPID,名称等来监控不同的stream程/应用程序。 我一直使用这个来监控手机,但是请记住,我没有做那种需要120%正面的开发工作,数据库没有做一些不寻常的事情。
希望它有帮助
这是一个非常古老的问题,我的答案类似于上面的答案,但速度更快。 下面的脚本是Mac的,但我相信有人可以修改它的Windows。
1)在Mac上打开脚本编辑器(您可以在Spotlight中search脚本编辑器)
2)复制并粘贴下面的文本,并使用您的SDKpath,软件包名称等进行修改(见下文)
3)保存脚本!
就是这样! 只需按下顶部的播放button即可获取更新的数据库文件,该文件将位于桌面上。
replace下面的脚本中的以下内容:
path_to_my_sdk == >>把你的sdk的完整path
my_package_name == >>您的应用程序的包名称
myDbName.db == >>数据库的文件名
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
希望这有助于某人。
我正在使用Windows 7,我的设备是一个模拟的Android设备API 23.我想这是相同的任何真正的设备,只要它是根源,API不高于23
转到工具 – > Android – > Android设备监视器。 转到文件资源pipe理器。 在我的情况下,它是在数据/数据// app_webview / databases / file_0 / 1
我必须在名为“1”的文件末尾手动添加.db
我知道这个问题还比较老,但我相信这个问题还是存在的。
从浏览器查看数据库
我创build了一个开发工具,您可以将它作为一个lib集成到您的android应用程序项目中。 该工具将在您的应用程序中打开一个服务器套接字,以通过networking浏 您可以浏览整个数据库,并通过浏览器直接下载数据库文件。
可以通过jitpack.io完成整合:
项目build.gradle:
//... allprojects { repositories { jcenter() maven { url 'https://jitpack.io' } } } //...
应用程序build.gradle:
//... dependencies { //... debugCompile 'com.github.sanidgmbh:debugghost:v1.1' //... } //...
设置应用程序类
为了仅在某些构buildtypes或产品风格中编译DebugGhostLib,我们需要一个抽象的Application类,它将以特殊的风格派生。 将下面的类放在main
文件夹中(在java
> your.app.package
):
public class AbstractDebugGhostExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); // Do your general application stuff } }
现在,对于您的发布构buildtypes(或产品风格),将以下Application类添加到release
(或产品风格)文件夹(也在java
> your.app.package
):
public class MyApp extends AbstractDebugGhostExampleApplication { @Override public void onCreate() { super.onCreate(); } }
这是不会引用DebugGhostLib的应用程序类。
同时告诉你的AndroidManifest.xml
你正在使用你自己的应用程序类。 这将在您的main
文件夹中完成:
<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>
现在,对于您的debugging构buildtypes(或产品风格),您将以下Application类添加到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(); } }
你可以在这里find工具 。
我不得不把数据库从手机拉到电脑。 现在我使用这个非常好的和免费的应用程序,它有很多的function。 它只适用于具有Rooted设备的API 5.0+
(棒棒堂及以上API 5.0+
)。
让我知道如果你发现如何使它没有根源的工作。
https://play.google.com/store/apps/details?id=com.lastempirestudio.sqliteprime
我已经把这个过程的unix命令行自动化放在一起,并把代码放在这里:
https://github.com/elliptic1/Android-Sqlite3-Monitor
这是一个以包名和数据库名为参数的shell脚本,从附加的Android设备下载数据库文件,并针对下载的文件运行自定义脚本。 然后,使用像“watch”这样的unix工具,可以打开terminal窗口,并定期更新数据库脚本输出的视图。