我使用adb和以下命令连接到我的live设备:
C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied
Run Code Online (Sandbox Code Playgroud)
我惊讶地发现我有访问被拒绝.为什么我不能使用这样的命令行浏览目录?
如何在手机上获得root访问权限?
我在SQLite数据库中有一组数据.我需要在设备上查看数据库.我怎么做?
我已经检查了ddms模式.文件资源管理器中的数据为空.
在非root用户设备上,我可以使用run-as带有我的包名称的命令导航到包含数据库的数据文件夹.我满意的大多数文件类型只是查看,但我想从Android设备拉数据库.
是否有一个download copy或move亚行外壳,这部分命令?我想下载数据库文件并使用数据库浏览器查看其内容.
这里的一个答案涉及将整个应用程序包转换为压缩存档,但是一旦完成并移动到机器上,如何提取该存档就没有进一步的答案,当我可能有一个更直接的解决方案开始
是否可以从adb shell命令读取二进制stdout?例如,如何使用screencap的所有示例包括两个步骤:
adb shell screencap -p /sdcard/foo.png
adb pull /sdcard/foo.png
Run Code Online (Sandbox Code Playgroud)
但是,该服务支持写入stdout.例如,您可以执行以下操作:
adb shell "screencap -p > /sdcard/foo2.png"
adb pull /sdcard/foo2.png
Run Code Online (Sandbox Code Playgroud)
这同样有效.但是,如何阅读亚行的产出呢?我想做的是以下内容:
adb shell screencap -p > foo3.png
Run Code Online (Sandbox Code Playgroud)
并避免中间写入SD卡.这会生成看起来像PNG文件的strings foo3.png东西(正在运行生成带有IHDR,IEND等的东西)并且大小大致相同,但就图像阅读器而言,文件已损坏.
我也尝试在java中使用ddmlib来做到这一点,结果是一样的.我很乐意使用任何必要的图书馆.我的目标是减少获取捕获的总时间.在我的设备上,使用双命令解决方案,获取图像大约需要3秒钟.使用ddmlib和捕获stdout需要不到900毫秒,但它不起作用!
是否有可能做到这一点?
编辑:这是两个文件的hexdump.第一个,screen.png来自stdout并且已损坏.第二个,xscreen来自双命令解决方案并且有效.图像应在视觉上相同.
$ hexdump -C screen.png | head
00000000 89 50 4e 47 0d 0d 0a 1a 0d 0a 00 00 00 0d 49 48 |.PNG..........IH|
00000010 44 52 00 00 02 d0 00 00 05 00 08 06 00 00 00 6e |DR.............n|
00000020 ce …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码将备份副本写入SDCard,我得到了
java.io.IOException: Parent directory of file is not writable: /sdcard/mydbfile.db
private class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> {
private final ProgressDialog dialog = new ProgressDialog(ctx);
// can use UI thread here
protected void onPreExecute() {
this.dialog.setMessage("Exporting database...");
this.dialog.show();
}
// automatically done on worker thread (separate from UI thread)
protected Boolean doInBackground(final String... args) {
File dbFile =
new File(Environment.getDataDirectory() + "/data/com.mypkg/databases/mydbfile.db");
File exportDir = new File(Environment.getExternalStorageDirectory(), "");
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File file = new File(exportDir, dbFile.getName());
try …Run Code Online (Sandbox Code Playgroud) 我在Android设备上创建了一个SQLite数据库.程序可以读/写数据库,因此显然已经创建了数据库文件.SQLiteDatabase.mPath设置为
db.mPath = "/data/data/dev.client.android/databases/clientDB.db"
Run Code Online (Sandbox Code Playgroud)
但是当我浏览设备上的目录时,我找不到文件clientDB.db.我查看了数据目录,但似乎是空的.
有谁知道这里有什么不对吗?
我试图从代码中获取应用程序的debuggable属性值:
packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
int flags = packageInfo.applicationInfo.flags;
isDebugMode = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
Run Code Online (Sandbox Code Playgroud)
我注意到,当清单中未指定debuggable属性时,此代码将其定义为true.文档说它默认是假的.
怎么了?
我在手机上开发时遇到了访问数据库的问题.每当我执行
cd /data/data/com.mycompck/databases
然后运行ls我得到:"opendir failed, Permission denied"
或者每当我输入时,sqlite3我得到:"sqlite3: permission denied"
我究竟做错了什么?
是否有一些应用程序可以帮助我获得内容解析器值和/或SQLite数据库的人工视图?
我有一个android程序,它将其信息存储在sqlite数据库中.一旦设备通过USB插入,或者应该在程序本身中写入特殊功能以将db内容转储到/ sdcard目录下的文件中,是否可以将该db文件复制到PC?
谢谢
我正在后台编写一个带有 SQLite 数据库的 Android 应用程序。此数据库由应用程序创建,并存储在设备的默认目录中:
shell@android: ls /data/data/com.package.example/databases #
MyDb.db
MyDb.db-journal
Run Code Online (Sandbox Code Playgroud)
在开发过程中,我想测试行是否正确插入/更新,所以我需要查看数据库。有一个非常好的工具叫做SQLite 数据库浏览器(适用于 Win、Mac 和 Linux)。
使用这个工具,我可以打开数据库、浏览、插入和更新行等等......问题是,我首先需要将数据库从设备复制到我的本地机器:
# On Android Shell
# (Cannot pull directly from /data/-directory)
cp /data/data/com.package.example/databases/MyDb.db /sdcard/
# On developing machine
adb pull /sdcard/MyDb.db
Run Code Online (Sandbox Code Playgroud)
比我的机器上有数据库,我终于可以打开它了。
我的问题是:有更好/更快的方法吗?我可以以某种方式直接访问设备上的数据库吗?