The official SDK's platform/apk template is compiled once by test-sdk.sh in the
release pipeline, so its app/build tree ships a leftover CI test APK inside the
zip. eve build copied the whole template (copyTree only skips top-level build
dirs), leaving a stale 123MB app-debug.apk built from a different game in every
assembled project. Skip app/build when copying the template, and stop zip-sdk.py
from packaging build/.gradle outputs in future SDK releases.
eve now picks the eve-sdk-<plat>-<tag>.zip asset matching its own version
(v0.1.0-dev normalizes to v0.1.0; EVE_SDK_TAG overrides), verifies it against
SHA256SUMS, extracts eve-sdk/android into %LOCALAPPDATA%/EVEngine/sdk/android
(EVE_SDK_INSTALL_ROOT overrides), and records EVENGINE_SDK in eve-android.env
so ve build android finds it without --sdk or EVENGINE_SDK.
Also harden SDK discovery: only a share/eve/TARGET_PLATFORM marker counts as an
SDK root (build trees with a platform/ dir are no longer misdetected), and
findSdkRoot falls back to SDKs installed by ve get.
Real end-to-end verification (eve get android + eve build android ->
APK) surfaced two bugs:
- copyTreeContents mapped every source entry to the destination root
instead of to/rel, so nested game files were never copied and
top-level files collided with the destination directory; the APK
shipped without assets/game. Copy relative paths in both modes.
- A release build without a signing config makes AGP emit
app-release-unsigned.apk, which eve build did not recognize. Accept
the unsigned name (with a hint) as a fallback.
The assemble test now uses REQUIRE for the asset/lib/APK assertions
(zeroerr treats CHECK failures as warnings, which CTest counted as
passing) so regressions fail the suite.
Users only receive a prebuilt EVEngine SDK (runtime libs, APK template,
game shell) and have no engine source, Makefile, cmake or NDK. Rework:
- eve build android no longer shells out to make. It copies the SDK APK
template (platform/apk) into an output dir, injects the game assets,
copies the prebuilt lib/*.so into jniLibs/arm64-v8a, writes
local.properties (sdk.dir), and runs the Gradle distribution
(assembleRelease/assembleDebug). SDK root is found via --sdk,
$EVENGINE_SDK, <sdk>/bin/eve, or cwd.
- eve get android installs what that flow needs: JDK 17, Android
cmdline-tools, platform-tools, platforms;android-34, build-tools, and
Gradle 8.5 (the APK template ships no gradlew.bat). The NDK is no
longer installed because native code ships prebuilt in the SDK.
- Tests now drive a fake SDK + fake gradle to verify the whole APK
assembly path, plus wrong-SDK-platform / missing-toolchain errors.
The Android Makefile recipes use POSIX shell syntax (gradlew env
prefixes, cp -R, [ -d ... ]), so with cmd.exe as make's SHELL the
build/android target fails before cmake even runs. When Git for
Windows is installed, eve build android now wraps the make invocation
in `bash -lc`, falling back to the plain make command otherwise.
`eve build android` now runs the repo Makefile's build/android target with
ANDROID_GAME set (so an APK is produced from the current game), and the
other platforms map to build/win32|linux|macosx|ios[-debug]. A positional
that matches a known platform is treated as the platform; otherwise it
stays the game path (legacy behavior). The engine checkout root is
auto-detected by walking up from cwd, or via --sdk / $EVENGINE_SDK.
Android builds require the Android SDK; when it is missing the command
points the user at `eve get android`. Linux builds on a Windows host use
the Makefile WSL2 targets. Adds sdk_tools helpers (platform names, env,
shell runner) and regression tests with a fake Makefile target.