我有一个android项目,演示如何编写可以在模拟器或设备上执行的android测试用例。作为这些测试用例的结果,数据将填充到设备中,生成的SQLite *.db
文件可以从Android Studio的DDMS
屏幕下载。
NOTE:
我已在root user
shell中尝试adb
。我在访问*.db
文件时遇到的问题与模拟器中的adb
和DDMS
API 26
保持一致。
可以访问代码here。
我在AVD Manager中创建了2个模拟器(API 23
和API 26
)。
当我在两个模拟器上运行androidTest时,所有测试用例都成功通过。
使用Android Studio的DDMS
...
API 23
的模拟器上,我可以在*.db
下查看SQLite /data/data/<package-name>/databases/weather.db
文件并将其下载到我的桌面并通过http://inloop.github.io/sqlite-viewer/ API 26
的模拟器上,/data
文件夹是空的?我没有看到与使用*.db
的设备访问SQLite API 23
文件相同的层次结构。 android app和androidTest都在API 26
模拟器上成功运行,这意味着数据保存在android模拟器的某处,但新位置是什么?
是API 25/26之后的新行为,是否需要特殊权限才能访问DDMS
或adb shell
中的数据?
如果这是新行为,那么位于API 25/26之后的SQLite *.db
文件在哪里?
我已经在堆栈溢出和Android文档上搜索了它,但没有发现任何具体的内容,如果我遗漏了任何内容,请告诉我。
答案 0 :(得分:0)
答案 1 :(得分:0)
@jrg我一直在测试如何写入SD卡以及如何找到sqlite数据库的INTERNAL位置的路径以及如何使用Api 26或更高版本查看它。我不确定这会有所帮助,我很想知道一旦生根,可以通过从AVD管理器中删除设备来删除生根
这里有一些可能有帮助的代码
selection.draw
当我在模拟器和真实设备上弹出SD卡时,我使用此代码创建路径
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED) && (!state.equals(Environment.MEDIA_MOUNTED_READ_ONLY))) {
File removable = ContextCompat.getExternalFilesDirs(this, null)[1];
THE_PATH = String.valueOf(removable) + "/Documents/";
//System.out.println("ALL TRUE ==> " + THE_PATH);
} else {// if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
THE_PATH = "";
//System.out.println("ALL FALSE ==> "+ THE_PATH);
}
我认为Android不允许您在设备上没有文件管理器应用程序的情况下导航到内部存储。您是否考虑过在模拟器上安装文件管理器应用程序。对此我不认为你需要AS 2.4 beta才能做到这一点