Android: find_package(JNI) found wrong library
Environment
- Host OS: Linux
- CMake: 3.24
- Android NDK: 25.0.8775105
- Android API Level: 26
CMakeLists.txt
cmake_minimum_required(VERSION 3.24)
project(Test)
message(STATUS "CMAKE_ANDROID_API=${CMAKE_ANDROID_API}")
find_package(JNI)
Issue 1: x86_64
$ cmake .. --debug-find-var=JAVA_NativeHelper_LIBRARY -DCMAKE_ANDROID_NDK=${ANDROID_NDK_HOME} -DCMAKE_SYSTEM_NAME=Android -DCMAKE_SYSTEM_VERSION=26 -DCMAKE_ANDROID_ARCH_ABI=x86_64
-- Could NOT find JNI (missing: NativeHelper) (found version "25.0.8775105")
NativeHelper is only available since API 31, CMake should not try to find it in this case. The problem seems that CMAKE_ANDROID_API is never set.
https://gitlab.kitware.com/cmake/cmake/-/blob/v3.24.0/Modules/FindJNI.cmake#L110
Issue 2: x86
$ cmake .. --debug-find-var=JAVA_NativeHelper_LIBRARY -DCMAKE_ANDROID_NDK=${ANDROID_NDK_HOME} -DCMAKE_SYSTEM_NAME=Android -DCMAKE_SYSTEM_VERSION=26 -DCMAKE_ANDROID_ARCH_ABI=x86
CMake Debug Log at /usr/share/cmake/Modules/FindJNI.cmake:498 (find_library):
find_library(JAVA_NativeHelper_LIBRARY) added replacement path
/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/32/
to PATH_SUFFIXES for architecture suffix '32'
Call Stack (most recent call first):
CMakeLists.txt:6 (find_package)
The item was found at
/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/32/libnativehelper.so
Call Stack (most recent call first):
CMakeLists.txt:6 (find_package)
-- Found JNI: /opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include (found version "25.0.8775105") found components: NativeHelper
CMake searches sysroot/usr/lib/i686-linux-android/32/
, But here 32
is the API level.