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 cmake_minimum_required(VERSION 3.24) project(Test) message(STATUS "CMAKE_ANDROID_API=${CMAKE_ANDROID_API}") find_package(JNI) ``` ## Issue 1: x86_64 ```shell $ 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](https://cmake.org/cmake/help/v3.24/variable/CMAKE_ANDROID_API.html) is never set. https://gitlab.kitware.com/cmake/cmake/-/blob/v3.24.0/Modules/FindJNI.cmake#L110 ## Issue 2: x86 ```shell $ 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.
issue