如何使用自定义 NDK/SDK 从源码构建 KOReader Android 包(android-arm64 等目标)
2026/9/12 4:02:17 网站建设 项目流程

如何使用自定义 NDK/SDK 从源码构建 KOReader Android 包(android-arm64 等目标)

【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreader

KOReader 的 Android 安装包可以在本地从源码构建出来。默认情况下,构建系统会自动下载并配置一套兼容的 Android NDK 和 SDK;如果你本地已经安装了 NDK/SDK(比如公司内网环境、或已有其他项目复用的工具链),可以让构建系统直接使用你自己的版本。本文说明在 Linux 下如何用自定义 NDK/SDK 执行./kodev release android-arm64等命令,产出一个可安装的 APK,以及如何验证结果。以下构建说明面向 Linux 系统,macOS 和 Windows 用户建议在 Linux VM 中开发(见 doc/Building_targets.md)。

准备条件

Linux 构建环境

先按 doc/Building.md 准备好基础构建环境,包括autoconfautomakecmake(>= 3.17.5)、支持 C11/C++17 的gcc/g++clangmesonninjapython(>= 3.10)、gitmake等,文档中给出了 Debian/Ubuntu、Arch、Alpine、Fedora 等发行版的具体安装命令。各目标平台需要交叉编译工具链,文档要求 GCC 至少为 4.9 版本——使用自定义 NDK 时这一条件由你的 NDK 自带工具链满足。

Android 专用依赖包

构建 Android 包还需要openjdk-17-jdk-headlessp7zip-full两个包(Ubuntu/Debian 下安装):

sudo apt-get install openjdk-17-jdk-headless p7zip-full

确认你的 NDK/SDK 版本

doc/Building_targets.md 明确给出:使用自己安装的 NDK/SDK 时,请使用受支持的版本——NDK r23c(NDKr23c)Android 9(API level 28)的 SDK。版本不符时文档没有进一步说明,建议先对齐到这两个版本再开始构建。

获取源码

git clone https://gitcode.com/GitHub_Trending/ko/koreader cd koreader ./kodev fetch-thirdparty

./kodev fetch-thirdparty用于拉取并同步第三方依赖(submodule),是构建前的必要步骤。

配置自定义 NDK/SDK 环境变量

构建系统识别两组标准环境变量(见 doc/Building_targets.md):

  • NDK 位置:ANDROID_NDK_HOMEANDROID_NDK_ROOT
  • SDK 位置:ANDROID_HOMEANDROID_SDK_ROOT

把两个变量分别指向你自己的安装目录(替换为实际路径,/path/to/...仅为占位):

export ANDROID_NDK_HOME=/path/to/your/ndk-r23c export ANDROID_HOME=/path/to/your/sdk
  • ANDROID_NDK_HOME指向 NDK r23c 的根目录(目录内应能看到toolchainsndk-build等 NDK 内容)。
  • ANDROID_HOME指向 SDK 根目录,需要包含 Android 9(API level 28)平台。

判断是否生效的逻辑:只要ANDROID_NDK_HOME/ANDROID_NDK_ROOT中任意一个非空,构建就不会再自动拉取 NDK;SDK 同理(见 kodev 中setup_targetandroid-*目标的检查)。作为对照,如果两个变量都不设置,kodev会自动执行android-ndk/android-sdk这两个 make 目标,把兼容版本的 NDK/SDK 下载并配置到base/toolchain目录下(见 Makefile 中的android-ndkandroid-sdk规则)——也就是默认行为。

构建 APK

在仓库根目录执行:

./kodev release android-arm64

ANDROID_TARGET可以是文档列出的四个目标之一,与 make/android.mk 中的 ABI 映射关系如下:

目标对应 ABI
android-armarmeabi-v7a
android-arm64arm64-v8a
android-x86x86
android-x86_64x86_64

两个与执行过程相关的说明:

  • kodev release默认会先执行make po拉取翻译;如果不需要,可加--ignore-translation(或-i)跳过,失败时命令本身也会提示使用这个选项。
  • doc/Building.md 在"Building for other platforms"一节中的前提表述是"先把模拟器构建好",即可以先用./kodev build验证本机环境可用,再执行跨平台构建。

构建过程中会经过交叉编译、用 platform/android/luajit-launcher 下的 Gradle 工程(gradlew app:assemble...)打包,最后把产出的NativeActivity.apk复制为正式命名的 APK(见 make/android.mk 的update目标)。

验证结果

构建成功后,APK 会出现在仓库根目录,命名规则来自 make/android.mk 中的ANDROID_APK = koreader-android-$(ANDROID_ARCH)$(KODEDUG_SUFFIX)-$(ANDROID_NAME).apk,其中版本号(ANDROID_NAME)由构建系统生成。以android-arm64为例,最终产物形如:

koreader-android-arm64-<版本号>.apk

这是文档给出的命名模式而非固定文件名,<版本号>以实际构建输出为准。

如果需要进一步在真机确认,可以走 ADB 安装路径(kodev run的帮助说明:Install and run KOReader on an Android device connected through ADB):

./kodev run android-arm64

该路径要求adb可用、设备已通过 ADB 连接,并且会从 SDK 的$(ANDROID_SDK_ROOT)/cmdline-tools/latest/bin/apkanalyzer读取包信息。注意它带有一系列设备侧副作用(见 make/android.mk 的run目标):先清除设备 logcat,卸载设备上已安装的 KOReader 包,再安装新 APK、自动授予MANAGE_EXTERNAL_STORAGE权限,最后通过monkey启动应用并用 tools/logcat.py 监控日志。仅想验证 APK 产物本身时,不需要执行这一步。

限制与边界

  • 使用自定义 NDK/SDK 的前提是版本对齐:NDK r23c + Android 9(API level 28)的 SDK;文档只保证这两个版本受支持。
  • 不设置环境变量时不会报错,但构建系统会走自动下载路径(产物位于base/toolchain),此时实际使用的并不是你本地的 NDK/SDK——验证自己的工具链是否被采用,可以确认环境变量已导出后再执行构建。
  • 这套 Android 构建说明面向 Linux;构建说明本身不涵盖在 Windows/macOS 上直接构建的方案,文档的建议是放入 Linux VM 开发。

【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreader

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询