cmake unable to find ndk and ninja

160 Views Asked by At

okay so im following this tutorial for building a simple flutter app which uses native c code for some OpenCV task via FFI. i use the following command to build the android sdk replacing path/opencv and path/opencv_contrib with actual file paths.

python3 path/opencv/platforms/android/build_sdk.py \
--sdk_path $ANDROID_HOME \
--ndk_path $ANDROID_NDK_HOME \
--extra_modules_path path/opencv_contrib/modules/

I have set the ANDROID_HOME and ANDROID_NDK_HOME path variables as

ANDROID_HOME=C:\Users\msi\AppData\Local\Android\Sdk

ANDROID_NDK_HOME=C:\Program Files\android-ndk\android-ndk-r26b

i have set up the android-ndk as well as the ninja path in my system PATH variable too but cmake is having trouble finding the android-ndk and Ninja. here, this is what i get when i run my command

C:\Users\msi\AndroidStudioProjects\majopojo>python C:/Users/msi/AndroidStudioProjects/majopojo/opencv/platforms/android/build_sdk.py ^
More? --sdk_path $ANDROID_HOME ^
More? --ndk_path $ANDROID_NDK_HOME ^
More? --extra_modules_path C:/Users/msi/AndroidStudioProjects/majopojo/opencv_contrib/modules/
Args: Namespace(work_dir='.', opencv_dir='C:\\Users\\msi\\AndroidStudioProjects\\majopojo\\opencv\\platforms\\android\\../..', config='ndk-18-api-level-21.config.py', ndk_path='$ANDROID_NDK_HOME', sdk_path='$ANDROID_HOME', use_android_buildtools=False, modules_list=None, extra_modules_path='C:/Users/msi/AndroidStudioProjects/majopojo/opencv_contrib/modules/', sign_with=None, build_doc=False, no_ccache=False, force_copy=False, force_opencv_toolchain=False, debug=False, debug_info=False, no_samples_build=False, opencl=False, no_kotlin=False, shared=False)
Executing: ['ccache', '--version']
Failed: [WinError 2] The system cannot find the file specified
ccache not found - disabling ccache support
Package configuration:
================================================================================
ABIs = [
    ABI("2", "armeabi-v7a", None, 21, cmake_vars=dict(ANDROID_ABI='armeabi-v7a with NEON')),
    ABI("3", "arm64-v8a",   None, 21),
    ABI("5", "x86_64",      None, 21),
    ABI("4", "x86",         None, 21),
]
================================================================================
Android NDK path: $ANDROID_NDK_HOME
Android SDK path: $ANDROID_HOME
Check dir C:\Users\msi\AndroidStudioProjects\majopojo (create: True, clean: False)
Check dir C:\Users\msi\AndroidStudioProjects\majopojo\opencv (create: False, clean: False)
Check dir C:\Users\msi\AndroidStudioProjects\majopojo\o4a (create: True, clean: True)
Removing file: C:\Users\msi\AndroidStudioProjects\majopojo\o4a\CMakeCache.txt
Removing dir: C:\Users\msi\AndroidStudioProjects\majopojo\o4a\CMakeFiles
Check dir C:\Users\msi\AndroidStudioProjects\majopojo\OpenCV-android-sdk (create: True, clean: True)
Removing dir: C:\Users\msi\AndroidStudioProjects\majopojo\OpenCV-android-sdk\sdk
Check dir C:\Users\msi\AndroidStudioProjects\majopojo\OpenCV-android-sdk\sdk\java\javadoc (create: True, clean: True)
Executing: ['cmake', '--version']
Result: cmake version 3.28.0-rc2
Using cmake from PATH
Executing: ['ninja', '--version']
Result: 1.11.1
Using ninja from PATH
Detected OpenCV version: 4.8.0-dev
=====
===== Building library for armeabi-v7a (None)
=====
Executing: ['cmake', '-GNinja', "-DOPENCV_EXTRA_MODULES_PATH='C:/Users/msi/AndroidStudioProjects/majopojo/opencv_contrib/modules/'", '-DBUILD_TESTS=ON', '-DINSTALL_TESTS=ON', "-DCMAKE_TOOLCHAIN_FILE='C:\\Users\\msi\\AndroidStudioProjects\\majopojo\\opencv\\platforms\\android\\android.toolchain.cmake'", "-DINSTALL_CREATE_DISTRIB='ON'", "-DWITH_OPENCL='OFF'", "-DBUILD_KOTLIN_EXTENSIONS='ON'", "-DWITH_IPP='OFF'", "-DWITH_TBB='ON'", "-DBUILD_EXAMPLES='OFF'", "-DBUILD_TESTS='OFF'", "-DBUILD_PERF_TESTS='OFF'", "-DBUILD_DOCS='OFF'", "-DBUILD_ANDROID_EXAMPLES='ON'", "-DINSTALL_ANDROID_EXAMPLES='ON'", "-DANDROID_STL='c++_shared'", "-DANDROID_ABI='armeabi-v7a with NEON'", "-DANDROID_PLATFORM_ID='2'", "-DANDROID_TOOLCHAIN='clang'", "-DANDROID_NATIVE_API_LEVEL='21'", 'C:\\Users\\msi\\AndroidStudioProjects\\majopojo\\opencv']
Executing: cmake -GNinja -DOPENCV_EXTRA_MODULES_PATH='C:/Users/msi/AndroidStudioProjects/majopojo/opencv_contrib/modules/' -DBUILD_TESTS=ON -DINSTALL_TESTS=ON -DCMAKE_TOOLCHAIN_FILE='C:\Users\msi\AndroidStudioProjects\majopojo\opencv\platforms\android\android.toolchain.cmake' -DINSTALL_CREATE_DISTRIB='ON' -DWITH_OPENCL='OFF' -DBUILD_KOTLIN_EXTENSIONS='ON' -DWITH_IPP='OFF' -DWITH_TBB='ON' -DBUILD_EXAMPLES='OFF' -DBUILD_TESTS='OFF' -DBUILD_PERF_TESTS='OFF' -DBUILD_DOCS='OFF' -DBUILD_ANDROID_EXAMPLES='ON' -DINSTALL_ANDROID_EXAMPLES='ON' -DANDROID_STL='c++_shared' -DANDROID_ABI='armeabi-v7a with NEON' -DANDROID_PLATFORM_ID='2' -DANDROID_TOOLCHAIN='clang' -DANDROID_NATIVE_API_LEVEL='21' C:\Users\msi\AndroidStudioProjects\majopojo\opencv
-- 'Release' build type is used by default. Use CMAKE_BUILD_TYPE to specify build type (Release or Debug)
CMake Deprecation Warning at platforms/android/android.toolchain.cmake:192 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:170 (include)
  CMakeLists.txt:117 (enable_language)


CMake Error at platforms/android/android.toolchain.cmake:458 (message):
  Could not find neither Android NDK nor Android standalone toolchain.

      You should either set an environment variable:
        export ANDROID_NDK=~/my-android-ndk
      or
        export ANDROID_STANDALONE_TOOLCHAIN=~/my-android-toolchain
      or put the toolchain or NDK in the default path:
        sudo ln -s ~/my-android-ndk C:/Program Files/android-ndk
        sudo ln -s ~/my-android-toolchain /opt/android-toolchain
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:170 (include)
  CMakeLists.txt:117 (enable_language)


CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
Traceback (most recent call last):
  File "C:\Users\msi\AndroidStudioProjects\majopojo\opencv\platforms\android\build_sdk.py", line 450, in <module>
    builder.build_library(abi, do_install)
  File "C:\Users\msi\AndroidStudioProjects\majopojo\opencv\platforms\android\build_sdk.py", line 266, in build_library
    execute(cmd)
  File "C:\Users\msi\AndroidStudioProjects\majopojo\opencv\platforms\android\build_sdk.py", line 30, in execute
    raise Fail("Child returned: %s" % retcode)
__main__.Fail: Child returned: 1

im using OpenCV 4.8.0 and here are my cmake and ninja versions

cmake --version
cmake version 3.28.0-rc2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
ninja --version
1.11.1

i have been scratching my brain since last night but this error keeps showing up and its driving me crazy. i found this which says

1) Any Android NDK newer than r8 will not work.
2) You need to add ANDROID_NDK as a CMake variable.

I had added ANDROID_NDK as a system variable but still nothing. i then swapped back to adding it as a system PATH variable. should i downgrade to r8? is there something wrong with the command itself? idk where im going wrong

0

There are 0 best solutions below