fix(android): package native core for x86_64

This commit is contained in:
2026-07-15 01:35:10 +02:00
parent 37c364d66a
commit 24e14565b3
3 changed files with 61 additions and 4 deletions

View File

@@ -63,7 +63,7 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin,aarch64-linux-android
targets: aarch64-apple-darwin,aarch64-linux-android,x86_64-linux-android
- name: Cache Cargo
uses: actions/cache@v4
@@ -96,3 +96,6 @@ jobs:
- name: Run shared JVM tests
run: ./gradlew :shared:jvmTest --no-daemon --stacktrace
- name: Verify Android native libraries
run: ./gradlew :androidApp:verifyDebugVnidropLibraries --no-daemon --stacktrace

View File

@@ -1,4 +1,34 @@
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import java.util.zip.ZipFile
abstract class VerifyVnidropLibrariesTask : DefaultTask() {
@get:InputFile
@get:PathSensitive(PathSensitivity.RELATIVE)
abstract val apk: RegularFileProperty
@get:Input
abstract val requiredLibraries: SetProperty<String>
@TaskAction
fun verify() {
ZipFile(apk.get().asFile).use { archive ->
val missing = requiredLibraries.get().filter { path ->
archive.getEntry(path)?.size?.takeIf { it > 0L } == null
}
check(missing.isEmpty()) {
"Debug APK has missing or empty VniDrop libraries: ${missing.joinToString()}"
}
}
}
}
plugins {
alias(libs.plugins.androidApplication)
@@ -37,7 +67,10 @@ android {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
jniLibs {
pickFirsts += "lib/arm64-v8a/libvnidrop.so"
pickFirsts += setOf(
"lib/arm64-v8a/libvnidrop.so",
"lib/x86_64/libvnidrop.so",
)
}
}
buildTypes {
@@ -52,12 +85,33 @@ android {
sourceSets {
getByName("debug") {
jniLibs.srcDir(project(":shared").layout.buildDirectory.dir("intermediates/rust/aarch64-linux-android/debug"))
jniLibs.srcDir(project(":shared").layout.buildDirectory.dir("intermediates/rust/x86_64-linux-android/debug"))
}
}
}
tasks.configureEach {
if (name == "mergeDebugJniLibFolders" || name == "mergeDebugNativeLibs") {
dependsOn(":shared:copyAndroidAndroidArm64Debug")
dependsOn(
":shared:copyAndroidAndroidArm64Debug",
":shared:copyAndroidAndroidX64Debug",
)
}
}
val verifyDebugVnidropLibraries = tasks.register<VerifyVnidropLibrariesTask>("verifyDebugVnidropLibraries") {
group = "verification"
description = "Verifies that the debug APK packages VniDrop for every supported Android ABI."
dependsOn("assembleDebug")
apk.set(layout.buildDirectory.file("outputs/apk/debug/androidApp-debug.apk"))
requiredLibraries.set(
setOf(
"lib/arm64-v8a/libvnidrop.so",
"lib/x86_64/libvnidrop.so",
),
)
}
tasks.named("check") {
dependsOn(verifyDebugVnidropLibraries)
}

View File

@@ -184,7 +184,7 @@ val hostCargoTargets = buildSet<RustTarget> {
cargo {
packageDirectory = layout.projectDirectory.dir("../crates/vnidrop")
publishJvmArtifacts = true
androidTargetsToBuild.set(setOf(RustAndroidTarget.Arm64))
androidTargetsToBuild.set(setOf(RustAndroidTarget.Arm64, RustAndroidTarget.X64))
builds.jvm {
variants {
// Desktop distributions are built per host. Do not publish disabled