- 权限(版本)
- jni库路径
- cmake参数
- cmake项目配置
app\src\main\AndroidManifest.xml
<!-- 读写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
app\build.gradle(设置版本)
/* android {defaultConfig { 下面 */
compileSdkVersion 26
defaultConfig{
application "ff.aplay"
minSdkVersion 14
targetSdkVersion 12
添加jni用到的库所在的路径
/* android {defaultConfig { 下面 */
sourceSets{
main{
jniLibs.srcDirs = ['libs] // 相对路径下的libs,就是配置文件当前路径
}
设置cmake和NDK的参数
/* android { 下面 */
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
}
ndk{
abiFilters "armeabi-v7a" // 过滤,支持armeabi-v7a
}
}
cmake配置文件路径
/* android { 下面 */
externalNativeBuild {
cmake{
path "CMakeLists.txt"
}
}
app\CMakeLists.txt
include_directories(include) // 头文件路径,相对CMakeLists.txt文件的路径
设置ffmpeg的库的路径
# 设置ffmpeg的库的路径
-DANDROID_ABI=armeabi-v7a
set(FF_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libs/${ANDROID_ABI})
cmake添加动态库add_library
add_library(<name> [STATIC|SHARED|MODULE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...]
)
add_library(native-lib SHARED
src/main/cpp/native-lib.cpp
)
# 定义avformat库名称,声明为需要导入的(imported)
add_library(avformat SHARED
IMPORTED
)
# 设置属性
set_target_properties(target1 target2 ...
PROPERTIES prop1 value1 prop2 value2 ...
)
# 设置avformat的导入的路径属性
set_target_properties(avformat
PROPERTIES
IMPORTED_LOCATION ${FF_DIR}/libavformat.so
)
Cmake链接动态库
# 将所有的动态库都链接到native-lib一个库中
target_link_libraries(# Specifies the target library.
native-lib # 链接的目标库
# 下面都是被依赖库
android # android系统 依赖库
avformat avcodec swscale avutil
${log-lib} # android log库
)