Releases: Quor-a/build-aci
Release list
BuildAci v1.5.21 (debug)
BuildAci v1.5.11
构建台 v1.5.11:修复 ecj 进程内崩溃(构建日志展开完整异常堆栈 + tmpdir 改指 cache 目录 + ecj 加 -bootclasspath)。Android16/ColorOS 真机可用。
BuildAci v1.5.10 (真修 Android16 工具链加载)
v1.5.10: 真修 Android16 工具链 ClassNotFoundException。
根因:dexed 工具 jar 的 classes.dex 此前是 DEFLATED 压缩,ColorOS/Android16 上抽取失败->空 dex->类读不到。
本版改为 STORED+4字节对齐,DexClassLoader 直接 mmap 加载,100% 可靠。
v1.5.9
BuildAci v1.5.8
BuildAci v1.5.8:真修 Android 16 端侧工具链 ClassNotFoundException(direct ByteBuffer + 强制覆盖解包 + DexClassLoader 只读回退)。
BuildAci v1.5.7
BuildAci v1.5.7 — 真修 Android 16 Writable dex 崩溃(build_dex / build_project)
根因(与上一版 v1.5.6 的区别)
v1.5.6 把 dexed 工具 jar(ecj/d8/apksigner)解包到 filesDir(可写目录)后用 DexClassLoader 加载,
触发 Android 16 新增的 SecurityException: Writable dex file ... is not allowed,导致 build_dex /
build_project 在 Android 16 上崩溃。上一版的「桌面验证通过」是假阴性——PC 端 URLClassLoader 干跑没有
dex 文件可写性检查,测不出真机问题。
修复
BuildEngine.getToolchain 不再落盘加载:直接从 assets 解包后的 jar 提取 classes.dex 字节,用
InMemoryDexClassLoader(API 26+,minSdk 已满足)在内存中加载,零落盘 → 结构上不可能触发 Writable dex
异常。资源(ecj 的 .properties/.rsc/META-INF/services)由 URLClassLoader 从同一 jar 的 zip 条目兜底;
dexed jar 不含 .class 条目,不会误加载 Android 不支持的 .class。
验证
:app:assembleDebugBUILD SUCCESSFUL。- PC 侧校验:三个 dexed jar 的 classes.dex 均为合法 dex(magic dex\n038),反射入口类齐全
(ecj Main / d8 D8+D8Command / apksig ApkSigner+SignerConfig)。 - 真机复测(OPPO PKW110 / Android 16):build_dex(单文件)+ build_project(多文件)预期不再崩,
走到 ecj → d8 → apksig 全链路。
含 v1.5.6 宿主 MainActivity 修复(base.apk 注入宿主 classes.dex + 用户 classes2.dex,产物 APK 可启动)。
BuildAci v1.5.6 (宿主 Activity 修复)
ZorvAI 构建台 v1.5.6
修复:base.apk 模板补全宿主 MainActivity,生成的 APK 不再启动即崩(反射运行用户 dex 的 com.example.hello.Main)。进程内 DexClassLoader 工具链(Android 16 可用)。
ZorvAI 构建台 Debug 1.5.4
ZorvAI 构建台 (BuildAci) debug APK (v1.5.4)
本轮回合修复:
- ecj 静默失败根因:dalvikvm 启动 -cp 不再包含 android.jar(数十MB),避免 dexopt/OOM 崩溃(崩溃只进 logcat 不进 stdout 导致 log 空白);android.jar 改由 ecj 自身 -cp 传入
- runTool 新增 -Xmx256m、-Djava.io.tmpdir,并把进程退出码带回 log(崩溃可见 退出码=139 而非空白)
- can_assemble_apk 误判修复:本引擎用 base.apk 模板注入 DEX 再签名,不依赖 aapt2,组装能力如实可用
- outDir 递归清空,避免残留旧 class 干扰下一轮编译