mirror of
https://github.com/logos-messaging/nim-ffi.git
synced 2026-06-20 16:29:31 +00:00
An Android library module wrapping the timer library's native ABI behind an idiomatic Kotlin `TimerNode` class via a JNI shim. `build-libs.sh` cross-compiles two native libraries per ABI (arm64-v8a + x86_64) into src/main/jniLibs/: libmy_timer.so (the Nim library) and libmy_timer_jni.so (the JNI bridge, which NEEDs the former). The shim turns each Kotlin `external fun` into a blocking call and reads the typed EchoResponse struct out of the result callback. Gradle packages everything under jniLibs/ automatically; an instrumented test covers create/version/echo on a device/emulator. Native build validated for both ABIs (correct aarch64/x86_64 ELF, JNI symbols exported, libmy_timer.so linked). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
1.0 KiB
Plaintext
38 lines
1.0 KiB
Plaintext
// Android library module wrapping the timer library. The native .so files are
|
|
// produced by ./build-libs.sh into src/main/jniLibs/<abi>/ and packaged
|
|
// automatically by the Android Gradle plugin.
|
|
plugins {
|
|
id("com.android.library")
|
|
id("org.jetbrains.kotlin.android")
|
|
}
|
|
|
|
android {
|
|
namespace = "org.logos.mytimer"
|
|
compileSdk = 34
|
|
|
|
defaultConfig {
|
|
minSdk = 21
|
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
// Limit to the ABIs build-libs.sh produces. Add more rows there + here
|
|
// (armeabi-v7a, x86) if you need them.
|
|
ndk {
|
|
abiFilters += listOf("arm64-v8a", "x86_64")
|
|
}
|
|
}
|
|
|
|
sourceSets["main"].kotlin.srcDir("src/main/kotlin")
|
|
|
|
compileOptions {
|
|
sourceCompatibility = JavaVersion.VERSION_17
|
|
targetCompatibility = JavaVersion.VERSION_17
|
|
}
|
|
kotlinOptions {
|
|
jvmTarget = "17"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
|
androidTestImplementation("androidx.test:runner:1.5.2")
|
|
}
|