1、将云服务器编译好的文件导入到本地
2、将解压后的文件夹inclde拷贝到jni目录下
3、将8个大版本号的.so拷贝到libs目录下
4、CMakeLists.txt中指定预编译的.so文件
cmake_minimum_required(VERSION 3.4.1)
add_library(
ffmpeg_player
SHARED
src/main/jni/ffmpeg_decode.c)
set(distribution_DIR ../../../../libs)
#添加lib,SHARED类型,是IMPORTED 引入的库
add_library(avutil
SHARED
IMPORTED)
set_target_properties(avutil
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libavutil-54.so)
add_library(swresample
SHARED
IMPORTED)
set_target_properties(swresample
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libswresample-1.so)
add_library(avcodec
SHARED
IMPORTED)
set_target_properties(avcodec
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libavcodec-56.so)
add_library(avformat
SHARED
IMPORTED)
set_target_properties(avformat
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libavformat-56.so)
add_library(swscale
SHARED
IMPORTED)
set_target_properties(swscale
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libswscale-3.so)
add_library(postproc
SHARED
IMPORTED)
set_target_properties(postproc
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libpostproc-53.so)
add_library(avfilter
SHARED
IMPORTED)
set_target_properties(avfilter
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libavfilter-5.so)
add_library(avdevice
SHARED
IMPORTED)
set_target_properties(avdevice
PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/armeabi-v7a/libavdevice-56.so)
find_library(
log-lib
log )
include_directories(
src/main/jni/include)
target_link_libraries(
ffmpeg_player
avutil
swresample
avcodec
avformat
swscale
postproc
avfilter
avdevice
${log-lib} )
5、app的build.gradle中指定编译规则
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.dongnaoedu.ffmplayer"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//使用Cmake工具
externalNativeBuild {
cmake {
cppFlags ""
abiFilters 'armeabi-v7a'
}
}
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
6、编写本地方法并加载动态库
7、编译头文件并添加到jni文件中
8、编写.c文件实现头文件中的方法
9、代码中调用
10、运行后的结果