CMake找不到JNI 我用C++支持创建了一个新的Android Studio项目,没有添加任何东西。该项目使用CMake构建、编译和运行。然后,我将以下两行代码添加到文件底部的CMakeLists.txt,得到了一个CMake构建错误 find_package(Java COMPONENTS Development) # Line 47 find_package(JNI REQUIRED) # Line 48

CMake找不到JNI 我用C++支持创建了一个新的Android Studio项目,没有添加任何东西。该项目使用CMake构建、编译和运行。然后,我将以下两行代码添加到文件底部的CMakeLists.txt,得到了一个CMake构建错误 find_package(Java COMPONENTS Development) # Line 47 find_package(JNI REQUIRED) # Line 48,java,android,c++,cmake,Java,Android,C++,Cmake,这就是我在构建项目时遇到的错误 -- Found Java: /usr/lib/jvm/java-10-oracle/bin/java (found version "10.0.1") found components: Development -- Configuring incomplete, errors occurred! CMake Error at /home/xxxxx/Android/Sdk/cmake/3.6.4111459/share/cmake-3.6/Modules/

这就是我在构建项目时遇到的错误

-- Found Java: /usr/lib/jvm/java-10-oracle/bin/java (found version "10.0.1") found components:  Development 
-- Configuring incomplete, errors occurred!
CMake Error at /home/xxxxx/Android/Sdk/cmake/3.6.4111459/share/cmake-3.6/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
See also "/home/xxxxx/AndroidStudioProjects/MyApplication/app/.externalNativeBuild/cmake/release/x86_64/CMakeFiles/CMakeOutput.log".
  JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
Call Stack (most recent call first):
  /home/xxxxxx/Android/Sdk/cmake/3.6.4111459/share/cmake-3.6/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  /home/xxxxxx/Android/Sdk/cmake/3.6.4111459/share/cmake-3.6/Modules/FindJNI.cmake:314 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:48 (find_package)
External native generate JSON release: JSON generation completed with problems
CMake在从命令行调用时运行,但由于某种原因在Android Studio中失败,我不知道为什么

编辑1

这是文件

编辑2

这就是
CMakeLists.txt
文件中的全部内容。它使用命令cmake在cmd中编译

cmake_minimum_required(VERSION 3.4.1)

find_package(Java COMPONENTS Development)
find_package(JNI REQUIRED)
这是cmd输出

    E:\Users\xxxxx\AndroidStudioProjects\MyApplication\app\build>cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: E:/Users/xxxxx/AndroidStudioProjects/MyApplication/app/build
当我尝试添加它时,使用gradle在Android Studio中编译它,我在Windows 10 pro 64位上遇到以下错误

Microsoft Windows [Version 10.0.17134.112]
(c) 2018 Microsoft Corporation. All rights reserved.

E:\Users\xxxxx\AndroidStudioProjects\MyApplication>gradlew build --stacktrace

> Task :app:generateJsonModelDebug 
External native generate JSON debug: starting JSON generation
External native generate JSON debug: using platform version 24 for ABI ARMEABI_V7A and min SDK version 24
External native generate JSON debug: noticing that build file 'E:\Users\xxxxx\AndroidStudioProjects\MyApplication\app\CMakeLists.txt' is out of date with respect to E:\Users\xxxxx\AndroidStudioProjects\MyApplication\app\.extern
alNativeBuild\cmake\debug\armeabi-v7a\android_gradle_build.json
External native generate JSON debug: rebuilding JSON E:\Users\xxxxx\AndroidStudioProjects\MyApplication\app\.externalNativeBuild\cmake\debug\armeabi-v7a\android_gradle_build.json due to:
External native generate JSON debug: - a dependent build file changed
External native generate JSON debug: keeping json folder 'E:\Users\xxxxx\AndroidStudioProjects\MyApplication\app\.externalNativeBuild\cmake\debug\armeabi-v7a' but regenerating project
External native generate JSON debug: executing cmake Executable : E:\Android\SDK\cmake\3.6.4111459\bin\cmake.exe
arguments :
-HE:\Users\xxxxx\AndroidStudioProjects\MyApplication\app
-BE:\Users\xxxxx\AndroidStudioProjects\MyApplication\app\.externalNativeBuild\cmake\debug\armeabi-v7a
-DANDROID_ABI=armeabi-v7a
-DANDROID_PLATFORM=android-24
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=E:\Users\xxxxx\AndroidStudioProjects\MyApplication\app\build\intermediates\cmake\debug\obj\armeabi-v7a
-DCMAKE_BUILD_TYPE=Debug
-DANDROID_NDK=E:\Android\SDK\ndk-bundle
-DCMAKE_CXX_FLAGS=
-DCMAKE_TOOLCHAIN_FILE=E:\Android\SDK\ndk-bundle\build\cmake\android.toolchain.cmake
-DCMAKE_MAKE_PROGRAM=E:\Android\SDK\cmake\3.6.4111459\bin\ninja.exe
-GAndroid Gradle - Ninja
jvmArgs :


CMake Error at E:/Android/SDK/cmake/3.6.4111459/share/cmake-3.6/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
  JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
Call Stack (most recent call first):
  E:/Android/SDK/cmake/3.6.4111459/share/cmake-3.6/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  E:/Android/SDK/cmake/3.6.4111459/share/cmake-3.6/Modules/FindJNI.cmake:314 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:4 (find_package)
-- Configuring incomplete, errors occurred!
See also "E:/Users/xxxxx/AndroidStudioProjects/MyApplication/app/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log".

与Android捆绑的CMake版本试图告诉您,它找不到JNI包,因为缺少一些部分:

missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH 但是请注意,您的代码只能使用jni.h及其功能:如果它试图访问jni包的任何其他部分,它将失败(可能在编译时),因为本质上,您欺骗了CMake,使其认为整个包都找到了,而实际上Android设置中只存在它的一部分

Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
解决

sudo apt-get install -y openjdk-8-jdk
sudo apt-get install -y default-jdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

在alpine:edge docker图像上相同,使用以下方法修复:

ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
RUN apk add --no-cache openjdk8

Re::/P>这个问题与你的不同?因为最后一个是编译一个具有Java绑定依赖性的GITHUB C++ REPO,这只是想弄明白为什么CMake在Android工作室中找不到JNI。在配置输出中,<>代码>也见< /java >消息不应该打破“缺失”的变量列表。抱歉,我真的不明白你的评论。什么不应该断开?行

找不到JNI(缺少:JAVA\u AWT\u库JAVA\u JVM\u库
JAVA\u INCLUDE\u路径2 JAVA\u AWT\u INCLUDE\u路径)
复合单个消息,因此它们之间不应该有“See-all”行。在上一个(已删除的)问题中可以观察到正确的行顺序。从2020年2月起,它看起来仍然是
openjdk-8-jdk
。如果这对您不起作用,请尝试使用
-DBUILD\u JAVA=ON
重新运行,例如
cmake-DBUILD\u GSTREAMER\u PLUGIN=ON-DBUILD\u JNI=TRUE-DBUILD\u JAVA=ON
非常感谢您,这又是一个
不需要的
巫毒。如果它试图访问JNI包的任何其他部分,
是什么意思…
?我只对将我的
C++
挂接到
Java
感兴趣,
JNI
就是这样做的。除了允许
C++
链接到Java之外,
JNI
还提供了什么?如果您只需要JNI头,您就可以了。另一方面,如果需要链接
JAVA\u JVM\u库
JAVA\u AWT\u库
,或包含
JAVA\u AWT\u include\u路径
中的头,则这些链接将失败
FindJNI.java
可能应该为此进行更新,因为OP的错误现在似乎相当标准。
ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
RUN apk add --no-cache openjdk8