拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Godot Engine Android 平台第三方库溯源管理:从 THIRDPARTY.md 到 apksig 签名实现详解

Godot Engine Android 平台第三方库溯源管理从 THIRDPARTY.md 到 apksig 签名实现详解【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot本文以 platform/android/java/THIRDPARTY.md 为核心文档解析 Godot Engine 在 Android 源码目录中登记第三方库来源、版本、许可证与修改记录的做法。读完后你将理解该清单中三个第三方库Play APK Expansion、Play Licensing、AOSP apksig各自的定位与现状并掌握从文档条目反查到仓库实际源码、验证 vendored 代码真实落地的方法。1. THIRDPARTY.md 的定位与记录格式THIRDPARTY.md 位于platform/android/java/目录根部——该目录是 Godot 的 Android Gradle 子工程由 settings.gradle 组织出app运行时 APK 骨架、libGodot 共享库代码与editorGodot 编辑器的 Android 端工程等模块。这份文档的自述目标是列出 Android 源码目录中使用的所有第三方库记录它们的来源provenance以及“在相关时”对这些文件所做的修改。文档对每个库条目都固定了四类信息要素要素说明示例文档原文口径Upstream上游来源Google Play 官方库 / AOSP 平台仓库及具体子目录apkx_library、lvl_library、platform/tools/apksigVersion精确到 git commit 号与年份9ecf54e, 2017、eb57657, 2018、ac5cbb07..., 2024License许可证类型三个库均为 Apache 2.0Overwrite targetsvendored 文件覆盖进仓库的目标目录lib/src/...、editor/src/main/java/...需要特别注意一个路径约定文档中写的覆盖目录如lib/src/com/...、editor/src/main/java/com/android/apksig是相对于platform/android/java/目录的。换算到仓库根目录时需要在前面补上platform/android/java/前缀。例如 apksig 条目写的是editor/src/main/java/com/android/apksig其真实仓库路径即platform/android/java/editor/src/main/java/com/android/apksig。这种“上游地址 精确 commit 修改补丁位置”的记录方式是 vendored直接内嵌第三方源码时典型的合规与可维护性实践既能让下游用户追溯每个文件的出处也能在升级时对照上游重新 diff。2. 三个第三方库的登记条目2.1 com.google.android.vending.expansion.downloaderPlay APK Expansion上游Google Play APK Expansion 官方库的apkx_library子目录版本git9ecf54e2017 年许可证Apache 2.0覆盖目录lib/src/com/google/android/vending/expansion/downloader修改记录文档明确写道“部分文件的修改原因尚不明确yet unclear reasons”修改内容见lib/patches/com.google.android.vending.expansion.downloader.patch该库属于 Google Play 的 APK Expansion 方案典型用途是为大型游戏分发额外容量数据文件。文档没有说明引入它的历史动机也诚实地将部分修改标注为“原因不明”只保留了 patch 文件供后续追查——这种“如实记录但不掩饰不确定性”的写法本身值得参考。2.2 com.google.android.vending.licensingPlay Licensing上游Google Play LicensingLVL官方库的lvl_library子目录版本giteb576572018 年文档特别注明“with modifications”含修改许可证Apache 2.0覆盖目录lib/aidl/com/android/vending/licensing与lib/src/com/google/android/vending/licensing修改记录文档给出明确动机——“为消除 linter 报错或修复下游问题”修改内容见lib/patches/com.google.android.vending.licensing.patch条目中的lib/aidl/目标值得注意AIDLAndroid Interface Definition Language文件定义跨进程服务接口说明 Godot 当年 vendored 的不仅是 LVL 的 Java 实现还包括其与许可证服务通信所需的接口定义。2.3 com.android.apksigAOSP APK 签名/验签库上游AOSP 平台仓库platform/tools/apksig版本gitac5cbb07d87cc342fcf07715857a812305d698882024 年许可证Apache 2.0覆盖目录editor/src/main/java/com/android/apksig与前两个条目不同apksig 被放置到editor模块而非lib模块。结合 4 节的源码分析可以推断这一选择与其服务对象Godot 编辑器的 APK 签名流程直接相关。3. 文档条目与当前仓库快照的比对对当前仓库实际检索后可以得到两个与文档对照的结论apksig 条目仍然有效。在platform/android范围内检索com.android.apksig完整源码确实存在于platform/android/java/editor/src/main/java/com/android/apksig/下包括顶层入口 ApkSigner.java、ApkVerifier.java 以及internal/下的成套实现。expansion downloader 与 licensing 两个条目在当前快照中已无对应源码。检索com.google.android.vending时platform/android目录下唯一命中的文件就是 THIRDPARTY.md 本身检索*.patch文件在platform/android下也无任何命中即文档引用的lib/patches/com.google.android.vending.expansion.downloader.patch与lib/patches/com.google.android.vending.licensing.patch两个补丁文件当前均不在树中。需要谨慎表述仓库未提供这两处源码移出的原因说明这里只能确认“当前快照中不存在”不能断言移出的具体缘由。这说明 THIRDPARTY.md 的性质是溯源与修改记录它的价值在于记录历史上哪些第三方文件被内嵌、被改在哪里条目与源码树的状态可能随演进而不同步读者应以文档为线索、以当前树为事实做双向核对。另外当前源码树中仍保留 expansion 相关处理命中点包括 GodotLib.java、Godot.kt、os_android.cpp等。从源码结构看这部分主要对应引擎在 Android 上读取游戏数据文件.pck的既有机制与文档所登记的 Play APK Expansion downloader 库并非同一层面阅读时不必混淆。4. 源码级佐证apksig 在 Godot 编辑器中的落地apksig 条目是唯一与当前源码树直接对应的条目其实现范围可以从文件列表完整核对四种签名方案的完整实现internal/apk/v1传统 JAR 签名、v2 方案APK Signing Block、internal/apk/v3支持签名证书轮换、v4 方案文件级增量签名且每种方案都同时提供 Signer 与 Verifiersource stamp来源印章internal/apk/stamp/下的 V1/V2 版本实现底层支撑ASN.1 BER/DER 编解码internal/asn1/、PKCS7 解析internal/pkcs7/、X.509 证书解析internal/x509/、zip 结构工具internal/zip/、internal/util/。检索com.android.apksig的命中点中还包含 ApkSignerUtil.kt这是 Godot 编辑器自身的工具类。可以推断Godot 编辑器在 Android 端导出/签名 APK 的流程是基于这份本地 vendored 的 AOSP apksig 实现来完成的签名与验签能力直接内嵌在编辑器工程中而不是依赖外部构建工具。这也解释了文档为何把 apksig 的覆盖目录放在editor模块而非共享的lib模块。从许可证角度看文档登记的三个库全部为 Apache 2.0彼此保持一致的宽松许可取向便于与 Godot 引擎主体代码共存于同一仓库中。5. 这份溯源文档带来的工程实践以 THIRDPARTY.md 为样本Godot 在 Android 目录的第三方源码管理给出了几条可复用的做法锁定精确版本不写“latest”或模糊版本号一律写 git commit 号加年份如ac5cbb07d87cc342fcf07715857a812305d69888, 2024使任何条目都可复现写明覆盖目标目录读者能直接定位 vendored 代码在树中的位置并需注意文档路径是相对platform/android/java/的引用时须转换为仓库根目录起算的完整路径修改独立成 patch 文件对上游的改动集中放在lib/patches/库名.patch与源码本体分离升级时可以对上游重新生成 diff诚实标注不确定性修改动机不明时写明“yet unclear reasons”而不是省略该信息。对维护者而言这类文档与源码树应视为“记录—事实”两层文档给出历史与出处源码树给出当下状态两者结合使用如第 3 节所示的检索比对才是完整的使用方式。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门