如何使用自定义 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 准备好基础构建环境,包括autoconf、automake、cmake(>= 3.17.5)、支持 C11/C++17 的gcc/g++或clang、meson、ninja、python(>= 3.10)、git、make等,文档中给出了 Debian/Ubuntu、Arch、Alpine、Fedora 等发行版的具体安装命令。各目标平台需要交叉编译工具链,文档要求 GCC 至少为 4.9 版本——使用自定义 NDK 时这一条件由你的 NDK 自带工具链满足。
Android 专用依赖包
构建 Android 包还需要openjdk-17-jdk-headless和p7zip-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_HOME或ANDROID_NDK_ROOT - SDK 位置:
ANDROID_HOME或ANDROID_SDK_ROOT
把两个变量分别指向你自己的安装目录(替换为实际路径,/path/to/...仅为占位):
export ANDROID_NDK_HOME=/path/to/your/ndk-r23c export ANDROID_HOME=/path/to/your/sdkANDROID_NDK_HOME指向 NDK r23c 的根目录(目录内应能看到toolchains、ndk-build等 NDK 内容)。ANDROID_HOME指向 SDK 根目录,需要包含 Android 9(API level 28)平台。
判断是否生效的逻辑:只要ANDROID_NDK_HOME/ANDROID_NDK_ROOT中任意一个非空,构建就不会再自动拉取 NDK;SDK 同理(见 kodev 中setup_target对android-*目标的检查)。作为对照,如果两个变量都不设置,kodev会自动执行android-ndk/android-sdk这两个 make 目标,把兼容版本的 NDK/SDK 下载并配置到base/toolchain目录下(见 Makefile 中的android-ndk、android-sdk规则)——也就是默认行为。
构建 APK
在仓库根目录执行:
./kodev release android-arm64ANDROID_TARGET可以是文档列出的四个目标之一,与 make/android.mk 中的 ABI 映射关系如下:
| 目标 | 对应 ABI |
|---|---|
android-arm | armeabi-v7a |
android-arm64 | arm64-v8a |
android-x86 | x86 |
android-x86_64 | x86_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),仅供参考