Android-NDK/JNI

Android JNI开发:记一次从 ndk-build 迁移到

2019-11-09  本文已影响0人  ImWiki

在Android Studio 2.2开始支持CMake方式编译C++代码,大大简化了JNI的开发。从ndk-build迁移到CMake也非常简单。

修改Gradle,增加对CMake的支持
apply plugin: 'com.android.library'

android {
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
//        ndk {
//            moduleName "sign"
//            stl "stlport_static"
//            ldLibs "log"
//            abiFilters "armeabi" ,"x86","armeabi-v7a", "x86_64", "arm64-v8a"
//            cFlags "-w -fexceptions"
//        }
        externalNativeBuild {
            cmake {
                cppFlags "-w -fexceptions"
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}
修改src/main/jni为src/main/cpp

ndk-build的C++存放目录在jni,所以需要修改为cpp。

src/main/cpp增加CMakeLists.txt文件
cmake_minimum_required(VERSION 3.4.1)
# 添加所有的C++相关代码到下面set方法
set(SRC_LISTS
        aaa.h
        aaa.cpp
        bbb.h
        bbb.cpp
        XXXX.cpp
        com_xx_xxx_jni_XXXX.h
        )
# moduleName "sign"
add_library(sign
        SHARED
        ${SRC_LISTS})
总结

https://developer.android.google.cn/ndk/guides/cmake

只需要简单的三步就完成了从ndk-build迁移到cmake方式编译JNI代码。在以前只支持ndk-build的时候,开发JNI是一件非常痛苦的事情,编写C++代码只能使用其他的工具调试,比如Xcode、CLion。改成CMake方式编译,瞬间化解了我几年前开发JNI的痛苦记忆。

  1. CMake对C++代码进行Debug非常简单,就好像是调试java代码一样。
  2. CMake和Gradle结合,不会像ndk-build一样对C++代码显示一片红色警告,而是看到正确的include引用和代码联想。
上一篇下一篇

猜你喜欢

热点阅读