Android NDK 开发 - Cmake
Posted 星火燎原2016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android NDK 开发 - Cmake相关的知识,希望对你有一定的参考价值。
JNI 开发步骤
-
创建 Java 类,编写 native 方法
public class HelloJNI public native String getContentFromJni();
-
Terminal 中切换到项目的 src/main/java 目录下,使用 javah 命令生成 jni 头文件
E:\\androidProject\\ProgressAndroid\\app\\src\\main\\java>javah com.xing.progressandroid.jni.HelloJNI
-
在项目 app 目录右键 new -> Folder -> JNI folder 创建 C 或 C++ 目录,AndroidStudio 会生成一个 jni 目录,将 jni 头文件复制到 jni 目录中
-
在 jni 目录中创建与头文件同名的 C 或 C++ 源文件,实现 jni 头文件中声明的函数
#include "com_xing_progressandroid_jni_HelloJNI.h" JNIEXPORT jstring JNICALL Java_com_xing_progressandroid_jni_HelloJNI_getContentFromJni (JNIEnv *env, jclass jclz) return env->NewStringUTF("I'm from C++");
-
在项目的 app 目录下创建 CMakeLists.txt 文件,编写内容:
# cmake 最低版本 cmake_minimum_required(VERSION 3.4.1) add_library( # Sets the name of the library. # 设置生成的 so 动态库名字 helloJni # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). # 生成 so 文件的 C/C++ 文件 src/main/jni/com_xing_progressandroid_jni_HelloJNI.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. helloJni # Links the target library to the log library # included in the NDK. $log-lib)
-
在 build.gradle 文件中引用 CMakeLists.txt 文件
android defaultConfig ndk abiFilters "armeabi-v7a", "x86" //设置生成的 so 支持的 cpu 类型 ....... externalNativeBuild cmake path "CMakeLists.txt"
-
make 编译工程,生成 so 文件
-
加载 so 文件
public class JniTestActivity extends AppCompatActivity
static
System.loadLibrary("helloJni"); // so 文件名和 CMakeLists.txt 中指定的名字一致
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jni_test);
TextView textView = findViewById(R.id.tv_jni);
HelloJNI helloJNI = new HelloJNI();
textView.setText(helloJNI.getContentFromJni());
以上是关于Android NDK 开发 - Cmake的主要内容,如果未能解决你的问题,请参考以下文章
Android NDK 开发CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )
android studio 2.3 cmake ndk开发第一个项目运行