Question/Issue:
The example_motion_WearOS project in edgeimpulse/example-android-inferencing has a section in its README titled “Running on 32bit” describing the build.gradle.kts and CMakeLists.txt changes needed for armeabi-v7a builds. However, the 32-bit TFLite static libraries themselves are not provided. The download_tflite_libs.sh script only fetches android64. Where can I obtain the 32-bit .a files (or an equivalent download script / build instructions)?
I noticed https://cdn.edgeimpulse.com/build-system/tflite/android32/tflite-android32.zip
returns 403 Access Denied (not 404), suggesting the 32-bit libraries exist on your CDN
but aren’t publicly exposed. Could you either make this file public, or provide an
alternative way to obtain the 32-bit .a files?
Project ID:
944254
Context/Use case:
Running on-device activity + fall detection inference (5 classes: IDLE, WALKING, RUNNING, ROPEJUMPING, FALL) on a OnePlus Watch 2 running Wear OS 4. The watch’s OS reports as 32-bit ARM only (armeabi-v7a). I followed the example_motion_WearOS guide and the build works for arm64-v8a, but the watch cannot load 64-bit .so files at runtime.
Steps Taken:
- Exported my model from EI Studio as “Android library (C++)” (quantized int8) and copied
edge-impulse-sdk/,model-parameters/,tflite-model/intoexample_motion_WearOS/app/src/main/cpp/. - Ran
cd app/src/main/cpp/tflite && ./download_tflite_libs.sh— this downloadsandroid64only. Noandroid32folder is created. - Ran
adb shell getprop ro.product.cpu.abion the watch — returnedarmeabi-v7a. - Followed the README’s “Running on 32bit” section:
- Updated
build.gradle.kts:ndk { abiFilters += listOf("armeabi-v7a") }andcmake { arguments += listOf("-DANDROID_ABI=armeabi-v7a") } - Tried to update
CMakeLists.txtwith the 32-bit version from the README, which references${CMAKE_SOURCE_DIR}/tflite/android32/libtensorflow-lite.aetc.
5.Tried the URLhttps://cdn.edgeimpulse.com/build-system/tflite/android32/tflite-android32.zip
— it exists on your CDN but returns HTTP 403 Access Denied. This suggests the file
is there but isn’t publicly accessible.
- Updated
Expected Outcome:
Either (a) an android32 equivalent of the existing android64 CDN zip, or (b) documented way to obtain/build the 12 static libraries needed by the 32-bit CMakeLists.txt shown in the README:
libtensorflow-lite.a, libxnnpack-delegate.a, libXNNPACK.a, libpthreadpool.a, libcpuinfo.a, libruy.a, libfarmhash.a, libfft2d_fftsg.a, libfft2d_fftsg2d.a, libflatbuffers.a, libabsl.a, libmicrokernels-prod.a.
Actual Outcome:
Build configured for armeabi-v7a fails at link time because the .a files don’t exist. Build configured for arm64-v8a succeeds, but the APK crashes at runtime on the watch with:
java.lang.UnsatisfiedLinkError: dlopen failed: "libedgeimpulsewearos.so" is 64-bit instead of 32-bit
Reproducibility:
- [x] Always
- [ ] Sometimes
- [ ] Rarely
Environment:
-
Platform: OnePlus Watch 2 (Wear OS 4), reports as
armeabi-v7a - Build Environment Details: Android Studio Ladybug, NDK 27.0.12077973, CMake 3.22.1, minSdk 30, targetSdk 35
- OS Version: Windows (development machine)
-
Edge Impulse Version (Firmware): 1.92.19 (from
model-parameters/model_metadata.h:EI_STUDIO_VERSION_MAJOR=1,MINOR=92,PATCH=19) - Edge Impulse CLI Version: N/A (not using CLI for this workflow)
-
Project Version: Deploy version 4 (
EI_CLASSIFIER_PROJECT_DEPLOY_VERSION) - Custom Blocks / Impulse Configuration: Spectral Analysis processing block (FFT-based) + Classifier learning block. 4-second window, 20 Hz sampling, 6 axes (accelX/Y/Z + gyroX/Y/Z), 5 output classes (IDLE, WALKING, RUNNING, ROPEJUMPING, FALL). TFLite input datatype INT8 (quantized). TFLite arena size 4,499 bytes.
Logs/Attachments:
The UnsatisfiedLinkError above is the key symptom. Happy to provide full Logcat, my current CMakeLists.txt, or the build.gradle.kts if helpful.