以前 Eclipse 时代,调试 SQLite 都是将数据库文件导出到电脑,然后再用软件打开查看。现在我们用 Android Studio,有没有更方便的方法呢?
AndroidDebug数据库是一个强大的库,用于在Android应用程序中调试数据库和共享首选项
Android调试数据库可以做什么?
- 看看所有的数据库。
- 查看应用程序中使用的共享首选项中的所有数据。
- 在给定数据库上运行任何SQL查询以更新和删除数据。
- 直接编辑数据库值。
- 直接编辑共享首选项。
- 直接在数据库中添加一行。
- 直接在共享首选项中添加键值。
- 删除数据库行和共享首选项。
- 搜索你的数据。
- 对数据进行排序。
- 下载数据库。
- 内存数据库中的调试室。
所有这些功能都是在不需要根设备的情况下工作的->不需要有根的设备
在应用程序中使用Android调试数据库库
将此添加到应用程序的build.gradle中
debugImplementation 'com.amitshekhar.android:debug-db:1.0.6'
使用带有加密数据库的AndroidDebug数据库
debugImplementation 'com.amitshekhar.android:debug-db-encrypt:1.0.6'
使用debugImplementation这样,它将只在调试版本中进行编译,而不是在发布版本中进行编译。
仅此而已,只要启动应用程序,您将在logcat中看到一个条目,如下所示:
-
D/DebugDB:开放http://XXX.X.XXX:8080在你的浏览器里
-
还可以通过调用方法从代码中获取调试地址url。
DebugDB.getAddressLog();
现在浏览器中打开提供的链接。
重要:
- 你的Android手机和笔记本电脑应该连接到同一个网络(Wifi或LAN)。
- 如果您正在通过usb使用它,请运行
adb forward tcp:8080 tcp:8080
注意:如果您想使用8080以外的不同端口。在appbuild.gradle文件中的buildTypes中,执行以下更改
debug {
resValue("string", "PORT_NUMBER", "8081")
}
你会看到这样的东西:
编辑值
使用仿真器
- Android默认模拟器:在终端中运行命令-
adb forward tcp:8080 tcp:8080开放http://localhost:8080 - GenyMotion模拟器:从配置虚拟设备启用桥(在genyMotion中可用选项)
如果您错过了logcat中的地址日志,请使用土司获取地址。
由于这个库是自动初始化的,如果您想获得地址日志,添加以下方法并调用(为了避免版本构建中的构建错误,我们必须这样做,因为这个库将不包含在发行版构建中)。
public static void showDebugDBAddressLogToast(Context context) {
if (BuildConfig.DEBUG) {
try {
Class<?> debugDB = Class.forName("com.amitshekhar.DebugDB");
Method getAddressLog = debugDB.getMethod("getAddressLog");
Object value = getAddressLog.invoke(null);
Toast.makeText(context, (String) value, Toast.LENGTH_LONG).show();
} catch (Exception ignore) {
}
}
}
添加自定义数据库文件
由于此库是自动初始化的,如果要调试自定义数据库文件,请添加以下方法并调用
public static void setCustomDatabaseFiles(Context context) {
if (BuildConfig.DEBUG) {
try {
Class<?> debugDB = Class.forName("com.amitshekhar.DebugDB");
Class[] argTypes = new Class[]{HashMap.class};
Method setCustomDatabaseFiles = debugDB.getMethod("setCustomDatabaseFiles", argTypes);
HashMap<String, Pair<File, String>> customDatabaseFiles = new HashMap<>();
// set your custom database files
customDatabaseFiles.put(ExtTestDBHelper.DATABASE_NAME,
new Pair<>(new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME +
"/" + ExtTestDBHelper.DATABASE_NAME), ""));
setCustomDatabaseFiles.invoke(null, customDatabaseFiles);
} catch (Exception ignore) {
}
}
}
添加InMemory Room数据库
由于这个库是自动初始化的,如果您想调试内存存储间数据库,请添加以下方法并调用
public static void setInMemoryRoomDatabases(SupportSQLiteDatabase... database) {
if (BuildConfig.DEBUG) {
try {
Class<?> debugDB = Class.forName("com.amitshekhar.DebugDB");
Class[] argTypes = new Class[]{HashMap.class};
HashMap<String, SupportSQLiteDatabase> inMemoryDatabases = new HashMap<>();
// set your inMemory databases
inMemoryDatabases.put("InMemoryOne.db", database[0]);
Method setRoomInMemoryDatabase = debugDB.getMethod("setInMemoryRoomDatabases", argTypes);
setRoomInMemoryDatabase.invoke(null, inMemoryDatabases);
} catch (Exception ignore) {
}
}
}
项目地址:https://github.com/amitshekhariitbhu/Android-Debug-Database