为了初步了解Android NDK开发,本文记录了Android Studio使用过程中的部分内容。
本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习,梳理总结后写下文章,对音视频相关内容感兴趣的读者,可以点击观看课程网址:零声教育
CPU架构
Android⽬前⽀持以下7种ABIs(Application Binary Interface的缩写,即应⽤⼆进制接⼝):mips,mips64,X86,X86–64,arm64-v8a,armeabi,armeabi-v7a
CPU框架 | 描述 | 市场占有 |
---|---|---|
arm64-v8a | 第8代ARM,64位 | ⽬前主流版本 |
armeabi-v7a | 第7代ARM,32位 | ⼀些⽼旧⼿机从2011年起⼤规模使⽤ |
armeabi | 第5代ARM,32位,NDK r17不再⽀持 | 极少,可忽略 |
x86_64 X86 |
intel,64位/32位,可兼容arm的so库 | 1%以下 |
mips64/mips | NDK r17不再⽀持 | 极少⽤于⼿机,可以忽略 |
Cpu架构会向下兼容
app
->cpp
->CMakeLists.txxt
内容注释:
cmake_minimum_required(VERSION 3.4.1)
add_library(
# 库名
native-lib
# 是否生成动态库
SHARED
# 源文件.
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
# 自定义的变量,用的时候用${var}
${log-lib})
生成指定平台的ndk
修改app
中的build.gradle
,分为两种方法
externalNativeBuild {
cmake {
cppFlags ""
//配置动态库 对so有影响
// arguments '-DANDROID_STL=c++_shared'
// abiFilters 'armeabi-v7a', 'arm64-v8a'//第一种方法
}
}
ndk { //第二种方法
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
}
javah根据native接口生成jni接口
JNI接⼝命名规则:Java_
javah工具设置:File
-> settings
->Tools
->External Tools
使用:右键
->External Tools