开始之前
SDK、NDK、最低 API 级别和 ABI 是不同设置。下面保留该提交的构建参数;原文默认 OpenSSL 1.1.1 不代表当前生产安全建议,实际依赖版本应经过维护与安全评估。
TDLib Android 示例
这是为 Android 构建 TDLib 的示例。
你需要 Linux、macOS 或 Windows 上的 Bash shell,以及预先安装的常用工具、C++ 编译器、JDK、PHP、perl 和 gperf。
为 Android 构建 TDLib
- 运行脚本
./check-environment.sh,检查所需 Unix 工具和 Java 工具是否齐全。如果脚本报错退出,请安装缺失的工具。 - 运行脚本
./fetch-sdk.sh,将 Android SDK 下载到本地目录。 - 运行脚本
./build-openssl.sh,下载并为 Android 构建 OpenSSL。 - 运行脚本
./build-tdlib.sh,为 Android 构建 TDLib。 - 构建好的库位于
tdlib/libs目录。如果构建了 Java 接口,对应 Java 代码位于tdlib/java目录,独立的 Java 文档位于tdlib/javadoc目录。也可以使用包含上述全部内容的tdlib/tdlib.zip和tdlib/tdlib-debug.zip压缩包。
如果已经安装 Android SDK 和 NDK,可以跳过第二步,并将现有 Android SDK 根目录和 Android NDK 版本作为后续脚本的第一、第二个参数。确保 SDK 包含 android-34 平台和 CMake 3.22.1。
如果已有预编译的 OpenSSL,可以跳过第三步,并将其路径作为脚本 ./build-tdlib.sh 的第三个参数。
如果要更新到较新的 TDLib 版本,只需运行脚本 ./build-tdlib.sh。
可以通过脚本 ./build-openssl.sh 的第四个参数指定其他 OpenSSL 版本。默认使用 OpenSSL 1.1.1,原文给出的原因是其二进制体积比更新的 OpenSSL 版本小得多,性能也更好。
向脚本 ./build-openssl.sh 传入非空字符串作为第五个参数,可以构建 OpenSSL 共享库,而非静态库。如果应用还有大量使用 OpenSSL 的代码,并希望共用同一共享库,这样可以减小应用总体积。
将 "c++_shared" 作为脚本 ./build-tdlib.sh 的第四个参数,可以让 TDLib 链接共享的 C++ 标准库。如果应用还有大量其他 C++ 代码,并希望共用同一共享库,这样可以减小应用总体积。
将 "JSON" 作为脚本 ./build-tdlib.sh 的第五个参数,可以构建 JSON 接口,而非 Java 接口。
将 "JSONJava" 作为脚本 ./build-tdlib.sh 的第五个参数,还可以构建能从 Java 调用的 JSON 接口。
通过脚本 ./build-tdlib.sh 的第六个参数,可以指定最低 Android API 级别。指定较新的版本可以减小应用总体积。
通过脚本 ./build-tdlib.sh 的第七个参数,可以传入以空格分隔的 ABI 列表,仅为这些 ABI 构建 TDLib。
任何脚本参数都可以传入空字符串以使用默认值。例如,使用命令 ./build-tdlib.sh '' '' '' '' 'JSON' 可以构建 JSON 接口,其他参数使用默认值。
也可以通过 Docker 为 Android 构建 TDLib。使用 docker build --output tdlib . 构建 GitHub 上最新的 TDLib 提交,或使用 docker build --build-arg COMMIT_HASH=<commit-hash> --output tdlib . 构建指定提交。输出压缩包会放入指定的 "tdlib" 目录。还可以向提供的 Dockerfile 传入构建参数 "TDLIB_INTERFACE"、"ANDROID_NDK_VERSION"、"OPENSSL_VERSION"、"BUILD_SHARED_OPENSSL_LIBS" 和 "ANDROID_STL"。例如,docker build --build-arg TDLIB_INTERFACE=JSON --output tdlib . 会构建最新 TDLib 的 JSON 接口。
继续阅读 TDLib 总览与构建。需要应用凭证时,可参考 API ID 与 Hash 申请流程;申请遇到 ERROR,可通过 GetTGAPI 客服 沟通。