Android NDK 开发 - Cmake

Posted 星火燎原2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android NDK 开发 - Cmake相关的知识,希望对你有一定的参考价值。

JNI 开发步骤

  1. 创建 Java 类,编写 native 方法

    public class HelloJNI 
        public native String getContentFromJni();
    
    
  2. Terminal 中切换到项目的 src/main/java 目录下,使用 javah 命令生成 jni 头文件

    E:\\androidProject\\ProgressAndroid\\app\\src\\main\\java>javah com.xing.progressandroid.jni.HelloJNI
    
  3. 在项目 app 目录右键 new -> Folder -> JNI folder 创建 C 或 C++ 目录,AndroidStudio 会生成一个 jni 目录,将 jni 头文件复制到 jni 目录中

  4. 在 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++");
    
    
  5. 在项目的 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)
    
  6. 在 build.gradle 文件中引用 CMakeLists.txt 文件

    android 
    	 defaultConfig 
             ndk 
                abiFilters "armeabi-v7a", "x86"    //设置生成的 so 支持的 cpu 类型
            
    	 
        .......
        externalNativeBuild 
            cmake 
                path "CMakeLists.txt"
            
        
    
    
  7. make 编译工程,生成 so 文件

  8. 加载 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 NDK开发CMake构建工具使用

Android NDK 开发 - Cmake

android studio 2.3 cmake ndk开发第一个项目运行

android studio 2.3 cmake ndk开发第一个项目运行

Android NDK和cmake相关