Android播放器-支持ffmpeg的项目设置

  • 权限(版本)
  • 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库
)
打赏