From a024c3e42f1a2c43971a901ec59323e73e74cf7d Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Sun, 30 Aug 2026 15:48:50 -0700 Subject: [PATCH] Add x86_64 ABI alongside arm64-v8a The pinned core release zip already ships x86_64/libezvpn.so, so packaging it only required widening the abiFilters. Verified end-to-end on an x86_64 Android 16 VM: install, native init, and a tunnel to a test server with a direct path selected. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Lptbv6pTck5hp7Lzms56cU --- README.md | 5 +++-- app/build.gradle.kts | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1807d24..e90c261 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,10 @@ Design and the JNI contract are documented in the core repo: - JDK 17, Android SDK with platform 37 and build-tools 37 (the Gradle wrapper brings Gradle itself; AGP 9 with built-in Kotlin). -- An Android 10+ (`minSdk` 29) arm64 device (the app is arm64-v8a only, per +- An Android 10+ (`minSdk` 29) 64-bit device: arm64-v8a or x86_64 (32-bit is + not supported, per [Play's 64-bit requirement](https://developer.android.com/google/play/requirements/64-bit)). Development is done against an - adb-connected device — a phone, or an arm64 Android VM/emulator bridged onto + adb-connected device — a phone, or an Android VM/emulator bridged onto the LAN like a phone (`adb connect `) — since a `VpnService` cannot be exercised on the JVM. The Android Studio emulator is NATed twice by default and only ever gets relay paths; see [Emulator networking](#emulator-networking-bridged-wi-fi-for-direct-paths) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4182421..b9e373a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -93,10 +93,11 @@ android { versionCode = providers.gradleProperty("ezvpn.versionCode").get().toInt() versionName = providers.gradleProperty("ezvpn.versionName").get() - // arm64 only (Google Play's 64-bit requirement; 32-bit devices are not - // supported). Only lib/arm64-v8a/libezvpn.so from the core zip is - // packaged, so the APK refuses to install on any other ABI. - ndk { abiFilters.add("arm64-v8a") } + // 64-bit only (Google Play's 64-bit requirement; 32-bit devices are + // not supported): arm64-v8a for phones plus x86_64 for VMs/emulators. + // Only these ABIs' libezvpn.so from the core zip are packaged, so the + // APK refuses to install anywhere else. + ndk { abiFilters.addAll(listOf("arm64-v8a", "x86_64")) } } // Release signing comes from the environment (scripts/build-release-apk.sh