Pri*_*han 94 sqlite android adb
我目前正在开发适用于Android的WiFi应用程序.我在尝试访问设备上的数据库时遇到问题.模拟器中的调试对我不起作用,因为模拟器中没有WiFi支持.我尝试使用将数据库文件从设备中拉出来
adb pull data/data/package-name/databases/database-name
Run Code Online (Sandbox Code Playgroud)
但我收到错误"Permission denied.".在这个答案Android:数据库文件存储在哪里?,Commonsware建议通过在调试模式下运行来提取数据库文件.但它也不起作用.任何有关如何调试数据库而不需要设备生根的帮助将非常感激.
Ido*_*lon 140
我将从另一个答案重复一遍:
从API级别8(Android 2.2)开始,如果您将应用程序构建为可调试的,则可以使用shell
run-as
命令将命令或可执行文件作为特定用户/应用程序运行,或者只需切换到UID
应用程序的应用程序即可访问其数据目录.
因此,如果您希望从设备中提取应用程序数据库,则应运行应用程序的调试版本,连接adb shell
并运行以下命令:
run-as com.yourpackage sh -c "cat ~/databases/db-file" > /sdcard/db-file.sqlite
Run Code Online (Sandbox Code Playgroud)
这会将您复制db-file
到SD卡/外部存储的根目录.现在,您可以使用文件管理器adb pull
或其他任何您喜欢的内容轻松地从中获取它.请注意,使用此方法,您的应用程序无需拥有WRITE_EXTERNAL_STORAGE
权限,因为复制由shell用户完成,该用户始终可以写入外部存储.
在Linux/Mac系统上,可以使用以下命令将数据库直接复制到您的计算机,无需输入adb shell即可使用:
adb shell 'run-as com.yourpackage sh -c "cat ~/databases/db-file"' > db-file.sqlite
Run Code Online (Sandbox Code Playgroud)
但是,由于CR/LF符号转换,这在Windows上无法正常工作.在那里使用前一种方法.
Tad*_*tis 23
我在我的MAC上使用这个shell脚本,将数据库直接复制到我的主文件夹.轻松一键解决方案,只需更改包名称(com.example.app)和数据库名称(database.sqlite)
简单的脚本
#!/bin/bash
adb -d shell 'run-as com.example.app cat /data/data/com.example.app/databases/database.sqlite > /sdcard/database.sqlite'
adb pull /sdcard/database.sqlite ~/
Run Code Online (Sandbox Code Playgroud)
接受参数的脚本[package_name] [database]
#!/bin/bash
REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"
if [ $# -ne $REQUIRED_ARGS ]
then
echo ""
echo "Usage:"
echo "android_db_move.sh [package_name] [db_name]"
echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
echo ""
exit 1
fi;
echo""
cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"
echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
then
echo ".........OK"
fi;
echo $cmd2
eval $cmd2
if [ $? -eq 0 ]
then
echo ".........OK"
fi;
exit 0
Run Code Online (Sandbox Code Playgroud)
san*_*h_p 14
查看和管理Android应用程序数据库的最佳方法是使用此库https://github.com/sanathp/DatabaseManager_For_Android
使用此库,您可以从应用程序本身管理您的应用程序SQLite数据库.您可以查看应用数据库中的表,更新,删除,向表中插入行.从您的应用程序中获取所有内容.
它是一个单独的java活动文件,只需将java文件添加到源文件夹中.当开发完成后,从你的src文件夹中删除java文件.
它给了我很多帮助.希望它也可以帮到你.
你可以在这里查看1分钟的演示:http://youtu.be/P5vpaGoBlBY
虽然,这是一个老问题,我认为它仍然相关,值得当前的州回答.有一些工具可供您直接检查数据库(无需从设备或模拟器中提取数据库).
我最近发现(并且最受青睐)的工具是Android调试数据库.
您只需要添加此依赖项:
debugImplementation 'com.amitshekhar.android:debug-db:1.0.3'
Run Code Online (Sandbox Code Playgroud)
无需其他代码.启动应用程序后,打开logcat并过滤"DebugDB",您会看到一条消息说明
D/DebugDB: Open http://192.168.178.XXX:8080 in your browser
Run Code Online (Sandbox Code Playgroud)
它适用于每个浏览器,您可以检查数据库表和共享首选项.
它也适用于默认和Genymotion模拟器.
我之前使用的工具是stetho.
缺点:您需要添加一些代码,并且您必须使用Chrome浏览器.
优点:您还可以选择检查网络流量.
在新的Android Studio 4.1中,有新的Database Inspector。
您可以从菜单栏中选择以下选项View > Tool Windows > Database Inspector
来打开它(App Inspector
在 Android Studio 4.2 中)。更详细的说明可以在这篇博客和Exploring the Database Inspector in Android Studio 中的文章中找到。
另一种方法是使用stetho。您添加依赖项,然后可以在设备插入时使用 Chrome DevTools ( chrome://inspect ) 检查数据库。
如果你得到
The system cannot find the path specified.
Run Code Online (Sandbox Code Playgroud)
尝试
adb -d shell "run-as com.yourpackage cat /data/data/com.yourpackage/databases/dbname.sqlite > /sdcard/dbname.sqlite"
Run Code Online (Sandbox Code Playgroud)
注意双引号!
归档时间: |
|
查看次数: |
75989 次 |
最近记录: |