**
一、配置步骤:
** 第一步是在/src/main/中建立一个文件夹cpp 第二步是在文件夹中建立两个文件一个是native-lib.cpp和CMakeLists.txt 第三步在上述两文件中添加如下内容:
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring
JNICALL
Java_com_example_ls_test1_Main1Activity_stringFromJNI(
JNIEnv *env,
jobject ) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
#CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
native-lib.cpp )
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} )
第四步往src目录下的build.gradle文件中补充与CMakeLists.txt和native-lib.cpp的相关信息进行关联,具体如下步骤: (1)在defaultConfig子项中添加,支持C++的编译选项:
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
}
}
(2)在android子项中添加关联CMakeLists.txt信息,其中Cmake版本号可以不填写
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.10.2'
}
}
(3)点击文件右上角中的Sync Now进行同步即可 **
二、编译遇到的问题
** 1、一般情况下如果我们的工程配置是我们自己的IDE生成的话一般是不会报错的 2、如果是拿了原来旧的工程或者别人生成的工程然后再添加支持JNI的话,此时有可能会报如下的错: (1)类似如下的错误,可能是由于工程中另一个总的build.gradle中gradle的版本号有差异导致的。 此时需要修改为与你的IDE环境相匹配的版本应该就没有问题了,我这里由于重新新建一个NativeC++工程IDE默认的版本为4.0.1,因此我将原来的旧工程的3.2.1修改为4.0.1后再同步一下这个问题就没有了。
A problem occurred configuring project ':app'.
> java.lang.NullPointerException (no error message)
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
at org.gradle.configuration.project.LifecycleProjectEvaluator.wrapException(LifecycleProjectEvaluator.java:80)
at
... 115 more
(2)如果还出现其他问题的话可能需要关注一下如下几个点应该会对配置有帮助: 1、ndk版本是否正确 2、配置的ndk路径是否正确,这里包括系统的环境变量中的路径 3、CMake的版本是否正确
三、总结
本文主要针对的是有原来原生Java 的安卓工程添加支持JNI出现的问题和解决思路进行了记录,对于如果直接新建JNI工程不在本文的范围内,希望对日常开发遇到该类的问题的开发者,能够提供一个有效的解决思路。
参考链接:https://blog.csdn.net/u010456460/article/details/108443514
|