cmake_minimum_required(VERSION 3.10.2)
#设置FFmpeg头文件的路径,共享库,include里面h文件调用其他h文件用到的
include_directories(
include#因为和CMakeLists.txt在同一级,所以直接写include
)
add_library(native-lib
SHARED
native-lib.cpp)
find_library(
log-lib
log)
#1.定义一个变量avcodec
add_library(
avcodec
SHARED
IMPORTED
)
#给avcodec这个变量赋值
set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavcodec-58.so)
#2.
add_library(
avdevice
SHARED
IMPORTED
)
set_target_properties(avdevice PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavdevice-58.so)
#3.
add_library(
avfilter
SHARED
IMPORTED
)
set_target_properties(avfilter PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavfilter-7.so)
#4.
add_library(
avformat
SHARED
IMPORTED
)
set_target_properties(avformat PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavformat-58.so)
#5.
add_library(
avutil
SHARED
IMPORTED
)
set_target_properties(avutil PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavutil-56.so)
#6.
add_library(
postproc
SHARED
IMPORTED
)
set_target_properties(postproc PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libpostproc-55.so)
#7.
add_library(
swresample
SHARED
IMPORTED
)
set_target_properties(swresample PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libswresample-3.so)
#8.
add_library(
swscale
SHARED
IMPORTED
)
set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libswscale-5.so)
#将avcodec混合编译到native-lib中
target_link_libraries(
native-lib
${log-lib}
avcodec#1
avdevice#2
avfilter#3
avformat#4
avutil#5
postproc#6
swresample#7
swscale#8
)
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.hh.ffmpegdemo2"
minSdkVersion 17
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
abiFilters 'armeabi-v7a' //指定cpu的架构
}
}
ndk {
abiFilters "armeabi-v7a"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt" //指定CMakeLists.txt的路径,这里表示是在app目录下
version "3.10.2"
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
#include
#include extern "C" { #include "include/libavcodec/avcodec.h" } extern "C" JNIEXPORT jstring JNICALL Java_com_hh_ffmpegdemo2_JNIUtils_stringFromJNI( JNIEnv *env, jobject) { std::string hello = "Hello from C++"; return env->NewStringUTF(avcodec_configuration()); }