以前 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 Studio 上调试数据库 ( SQLite )

 

编辑值

在 Android Studio 上调试数据库 ( SQLite )

 

使用仿真器

  • 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

相关文章: