Skip to content

Conversation

@yug105
Copy link
Contributor

@yug105 yug105 commented Jan 22, 2026

Summary

  • Add Android platform support for the dynlink module using dlopen/dlsym/dlclose from Android's Bionic libc
  • Add CI workflow for building and testing on Android emulator
  • Tested successfully on Android API 30 ARM64 emulator

Changes

  • source/dynlink/include/dynlink/dynlink_impl_android.h - Header file for Android implementation
  • source/dynlink/source/dynlink_impl_android.c - Implementation using POSIX dlfcn.h functions
  • source/dynlink/include/dynlink/dynlink_interface.h - Added Android detection via __ANDROID__ macro
  • cmake/Portability.cmake - Set PROJECT_OS_FAMILY to android for Android builds
  • .github/workflows/android-test.yml - CI workflow for Android builds and emulator tests

Test Plan

  • Cross-compiled successfully with Android NDK r27d for arm64-v8a
  • Verified binary is ELF ARM64 format
  • Tested library loading on Android API 30 emulator
  • Verified all 5 interface functions work correctly (prefix, extension, load, symbol, unload)

Relates to #232

- Add dynlink_impl_android.h header file
- Add dynlink_impl_android.c implementation using dlopen/dlsym/dlclose
- Update dynlink_interface.h to detect Android via __ANDROID__ macro
- Update Portability.cmake to set PROJECT_OS_FAMILY to android
- Add android-test.yml CI workflow for building and testing on Android

Relates to metacall#232
- Fix CI workflow: disable OPTION_BUILD_TESTS to avoid CMake error
  with undefined add_loader_dependencies function
- Add custom dynlink test program that validates Android implementation
- Fix clang-format violations in dynlink_impl_android.c
- Set OPTION_BUILD_LOADERS=ON (only mock/ext build by default)
- Set OPTION_BUILD_CLI=OFF (skip node_loader dependency)
- Set OPTION_BUILD_TESTS=ON to enable ctest
- Run test executables on Android emulator
Pass Android toolchain and platform variables to GTest ExternalProject:
- CMAKE_TOOLCHAIN_FILE for Android NDK toolchain
- CMAKE_MAKE_PROGRAM for Ninja
- ANDROID_ABI, ANDROID_PLATFORM, ANDROID_STL, ANDROID_NDK
- CMAKE_GENERATOR to use same generator as parent project
@yug105 yug105 force-pushed the feature/dynlink-android-support-v2 branch from 172c468 to 465e60c Compare January 23, 2026 06:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant