GitHub 项目地址https://github.com/0pen1/android-sqlite3背景在 Android 设备上调试数据库时sqlite3命令行工具非常实用。它可以直接查看表结构、执行 SQL、验证数据、分析 App 私有目录里的数据库文件也适合在自动化测试和设备排障场景里快速定位问题。但现实情况是很多 Android 系统和厂商 ROM 并不默认提供sqlite3命令。即使设备有 root 权限进入adb shell后也经常会遇到/system/bin/sh: sqlite3: inaccessible or not foundandroid-sqlite3这个项目就是为了解决这个问题提供一个可验证、可复现、可以直接通过adb push放到 Android 设备上运行的sqlite3命令行构建方案。项目定位android-sqlite3不是 SQLite 的 fork也不维护修改版 SQLite 源码。项目的核心目标是从 SQLite 官方源码构建 Android 可执行文件。构建过程可追溯、可验证、可复现。通过 GitHub Actions 自动编译并发布 Release。产物可以直接在 Android 设备上通过adb shell使用。当前支持的 ABIarm64-v8a armeabi-v7a x86_64其中arm64-v8a适用于绝大多数现代 Android 手机。为什么不直接提交 SQLite 源码这个项目选择不把 SQLite 源码直接提交进仓库而是维护一个非常小的版本描述文件sqlite-version.env里面固定 SQLite 版本号、官方年份目录和官方 SHA3-256 校验值。构建时脚本会从SQLite 官方网站下载对应的 amalgamation 源码包然后先校验 SHA3-256校验通过后再进入编译阶段。这种方式有几个好处可以清晰证明构建源码来自 SQLite 官方发布包。避免手动同步源码造成偏差。仓库保持轻量只维护构建逻辑和版本元数据。每次构建都能重新验证源码完整性。构建流程项目中的构建流程分为两步scripts/download_sqlite.sh scripts/build_android.sh第一步下载并校验官方源码SQLite official amalgamation zip ↓ SHA3-256 verification ↓ build/sqlite-amalgamation-version/第二步使用 Android NDK 编译shell.c sqlite3.c ↓ Android NDK clang ↓ dist/abi/sqlite3 ↓ dist/sqlite3-android-version.zipGitHub Actions 会在 push、pull request、手动触发时自动执行构建。推送版本 tag时例如gittag v3.53.1gitpush origin v3.53.1工作流会额外创建 GitHub Release并上传编译好的压缩包。Android 上如何使用下载 Release 里的压缩包后选择对应 ABI 的sqlite3。大多数设备使用arm64-v8a/sqlite3推送到设备adb push arm64-v8a/sqlite3 /data/local/tmp/sqlite3 adb shellchmod755/data/local/tmp/sqlite3 adb shell /data/local/tmp/sqlite3--version打开普通数据库adb shell /data/local/tmp/sqlite3 /sdcard/Download/test.db执行 SQLadb shell/data/local/tmp/sqlite3 /sdcard/Download/test.db select sqlite_version();Root 调试场景如果设备有 root 权限可以查看 App 私有目录下的数据库adb shellsu-c/data/local/tmp/sqlite3 /data/data/package/databases/db-name .tables查询 schemaadb shellsu-c/data/local/tmp/sqlite3 /data/data/package/databases/db-name select * from sqlite_master;更推荐的做法是先复制数据库再做分析adb shellsu-ccp /data/data/package/databases/db-name /data/local/tmp/app.dbadb shellsu-cchmod 644 /data/local/tmp/app.dbadb pull /data/local/tmp/app.db.这样可以避免直接修改正在被 App 使用的数据库。已启用能力当前构建启用了常用 SQLite 功能SQLITE_THREADSAFE1 SQLITE_ENABLE_COLUMN_METADATA SQLITE_ENABLE_DBSTAT_VTAB SQLITE_ENABLE_EXPLAIN_COMMENTS SQLITE_ENABLE_FTS4 SQLITE_ENABLE_FTS5 SQLITE_ENABLE_MATH_FUNCTIONS SQLITE_ENABLE_RTREE SQLITE_ENABLE_UNLOCK_NOTIFY SQLITE_HAVE_ZLIB1这意味着它不仅能执行基本 SQL也支持 FTS5、RTREE、数学函数、dbstat 虚拟表和zlib 相关能力。为了减少 Android 设备上的依赖问题构建中关闭了 readline 依赖。真机验证当前版本已经在一台arm64-v8aAndroid 设备上验证通过SQLite 3.53.1 普通 shell 执行通过 root shell 执行通过 建表、插入、查询通过 FTS5 测试通过 JSON 函数测试通过 zlib 可用这说明产物不仅能启动也能覆盖实际调试中常见的 SQLite shell 能力。适合哪些人使用这个项目适合Android 逆向分析和安全研究人员。Android App 开发者。测试和自动化工程师。需要在 root 设备上查看 App 数据库的调试人员。希望维护自有 Android sqlite3 构建产物的团队。如果你只是临时在手机上使用 SQLite也可以选择 Termux。但如果你的工作流依赖adb shell、root 设备、自动化测试或 CI 发布产物那么这个项目会更直接。项目特点总结android-sqlite3的重点不是“又编译了一个 sqlite3”而是提供了一套清晰的构建和验证链路官方源码 ↓ 官方 SHA3-256 校验 ↓ Android NDK 编译 ↓ GitHub Actions 自动构建 ↓ GitHub Release 发布 ↓ adb push 后直接运行对于需要长期维护 Android 调试工具链的人来说这比从不明来源下载一个二进制文件更透明也更容易审计。项目地址https://github.com/0pen1/android-sqlite3