android源码只编译ndk,Android JNI开发:记一次从 ndk-build 迁移到 CMake编译 JNI代码

在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})

总结

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

CMake对C++代码进行Debug非常简单,就好像是调试java代码一样。

CMake和Gradle结合,不会像ndk-build一样对C++代码显示一片红色警告,而是看到正确的include引用和代码联想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值