android-sqlite3:从官方 SQLite 源码自动构建 Android 可用的 sqlite3

GitHub 项目地址:https://github.com/0pen1/android-sqlite3

背景

在 Android 设备上调试数据库时,sqlite3 命令行工具非常实用。它可以直接查看

表结构、执行 SQL、验证数据、分析 App 私有目录里的数据库文件,也适合在自动化测试

和设备排障场景里快速定位问题。

但现实情况是,很多 Android 系统和厂商 ROM 并不默认提供 sqlite3 命令。

即使设备有 root 权限,进入 adb shell 后也经常会遇到:

text 复制代码
/system/bin/sh: sqlite3: inaccessible or not found

android-sqlite3 这个项目就是为了解决这个问题:提供一个可验证、可复现、可以直接

通过 adb push 放到 Android 设备上运行的 sqlite3 命令行构建方案。

项目定位

android-sqlite3 不是 SQLite 的 fork,也不维护修改版 SQLite 源码。

项目的核心目标是:

  • 从 SQLite 官方源码构建 Android 可执行文件。
  • 构建过程可追溯、可验证、可复现。
  • 通过 GitHub Actions 自动编译并发布 Release。
  • 产物可以直接在 Android 设备上通过 adb shell 使用。

当前支持的 ABI:

text 复制代码
arm64-v8a
armeabi-v7a
x86_64

其中 arm64-v8a 适用于绝大多数现代 Android 手机。

为什么不直接提交 SQLite 源码?

这个项目选择不把 SQLite 源码直接提交进仓库,而是维护一个非常小的版本描述文件:

text 复制代码
sqlite-version.env

里面固定 SQLite 版本号、官方年份目录和官方 SHA3-256 校验值。构建时脚本会从

SQLite 官方网站下载对应的 amalgamation 源码包,然后先校验 SHA3-256,校验通过后

再进入编译阶段。

这种方式有几个好处:

  • 可以清晰证明构建源码来自 SQLite 官方发布包。
  • 避免手动同步源码造成偏差。
  • 仓库保持轻量,只维护构建逻辑和版本元数据。
  • 每次构建都能重新验证源码完整性。

构建流程

项目中的构建流程分为两步:

sh 复制代码
scripts/download_sqlite.sh
scripts/build_android.sh

第一步下载并校验官方源码:

text 复制代码
SQLite official amalgamation zip
        ↓
SHA3-256 verification
        ↓
build/sqlite-amalgamation-<version>/

第二步使用 Android NDK 编译:

text 复制代码
shell.c + sqlite3.c
        ↓
Android NDK clang
        ↓
dist/<abi>/sqlite3
        ↓
dist/sqlite3-android-<version>.zip

GitHub Actions 会在 push、pull request、手动触发时自动执行构建。推送版本 tag

时,例如:

sh 复制代码
git tag v3.53.1
git push origin v3.53.1

工作流会额外创建 GitHub Release,并上传编译好的压缩包。

Android 上如何使用

下载 Release 里的压缩包后,选择对应 ABI 的 sqlite3。大多数设备使用:

text 复制代码
arm64-v8a/sqlite3

推送到设备:

sh 复制代码
adb push arm64-v8a/sqlite3 /data/local/tmp/sqlite3
adb shell chmod 755 /data/local/tmp/sqlite3
adb shell /data/local/tmp/sqlite3 --version

打开普通数据库:

sh 复制代码
adb shell /data/local/tmp/sqlite3 /sdcard/Download/test.db

执行 SQL:

sh 复制代码
adb shell '/data/local/tmp/sqlite3 /sdcard/Download/test.db "select sqlite_version();"'

Root 调试场景

如果设备有 root 权限,可以查看 App 私有目录下的数据库:

sh 复制代码
adb shell su -c '/data/local/tmp/sqlite3 /data/data/<package>/databases/<db-name> ".tables"'

查询 schema:

sh 复制代码
adb shell su -c '/data/local/tmp/sqlite3 /data/data/<package>/databases/<db-name> "select * from sqlite_master;"'

更推荐的做法是先复制数据库,再做分析:

sh 复制代码
adb shell su -c 'cp /data/data/<package>/databases/<db-name> /data/local/tmp/app.db'
adb shell su -c 'chmod 644 /data/local/tmp/app.db'
adb pull /data/local/tmp/app.db .

这样可以避免直接修改正在被 App 使用的数据库。

已启用能力

当前构建启用了常用 SQLite 功能:

text 复制代码
SQLITE_THREADSAFE=1
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_ZLIB=1

这意味着它不仅能执行基本 SQL,也支持 FTS5、RTREE、数学函数、dbstat 虚拟表和

zlib 相关能力。为了减少 Android 设备上的依赖问题,构建中关闭了 readline 依赖。

真机验证

当前版本已经在一台 arm64-v8a Android 设备上验证通过:

text 复制代码
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",而是提供了一套清晰的构建和

验证链路:

text 复制代码
官方源码
  ↓
官方 SHA3-256 校验
  ↓
Android NDK 编译
  ↓
GitHub Actions 自动构建
  ↓
GitHub Release 发布
  ↓
adb push 后直接运行

对于需要长期维护 Android 调试工具链的人来说,这比从不明来源下载一个二进制文件

更透明,也更容易审计。

项目地址:

text 复制代码
https://github.com/0pen1/android-sqlite3
相关推荐
凡人叶枫5 小时前
Effective C++ 条款39:明智而审慎地使用 private 继承
java·数据库·c++·嵌入式开发
基德爆肝c语言5 小时前
MySQL表的操作
前端·数据库·mysql
TDengine (老段)5 小时前
TDengine 连接算子 — Inner/Outer/ASOF/Window Join 的实现与使用
大数据·数据库·物联网·哈希算法·时序数据库·tdengine·涛思数据
ltlovezh5 小时前
ROI 编码学习指南:Android 与 FFmpeg 的真实实现边界
android·ffmpeg·音视频开发
Keano Reurink5 小时前
搜索API与GSC数据对比:发现数据盲区
数据库·python·数据挖掘
shushangyun_5 小时前
汽车服务行业B2B平台+AI解决方案哪家专业:2026年最新测评
java·运维·网络·数据库·人工智能·汽车
大黄说说6 小时前
深入理解 Go 协程 Goroutine:并发编程的核心精髓
java·数据库·python
sulikey6 小时前
数据库系统概论4 - 更新与视图 期末速成课笔记
数据库·笔记·考试·期末速成·数据库系统概论
锋行天下6 小时前
数据库安全并发控制详解:乐观锁 vs 悲观锁 vs 原子操作
前端·数据库·后端
2601_961875246 小时前
花生十三公考课程|网课|视频
数据库·windows·git·svn·eclipse·github