FFMpeg Library를 Android Project에 사용해야 할 일이 생겨 ffmpeg dynamic library(.so file)를 Android Project에 추가하려다가 글을 써놓으면 다음에 또 추가해야될 일이 생겼을때 해매지 않을것 같아 글을 쓰게 되었습니다.
1. ndk Project 생성
Native C++로 프로젝트를 생성하게 되면 어느정도 Template이 완성되어 있어 손쉽게 추가할 수 있다.
나의 경우 ffmpeg library를 추가해야 하는데 header 파일들(.h file)과 미리 빌드된 동적 라이브러리(.so file)를 추가해줘야 한다.
2. header 파일과 동적 라이브러리 Android Project에 추가
2-1 header file 추가
'app/src/main/cpp/' 경로에 'include' directory를 만들어준다. 만들어진 include directory에는 필요한 header file 들을 추가해준다
2-2 dynamic library (.so file) 추가
미리 빌드된 dynamic library의 경우 'app/src/main/'경로에 'jniLibs' 라는 directory를 만들어 준다
만들어진 jniLibs 아래에는 cpu architecture에 따른 directory를 생성해준다
- armeabi-v7a
- arm64-v8a
- x86
- x86_64
그리고 빌드된 라이브러리를 각각 빌드된 architecture에 따라 해당 directory에 추가해준다
3. CMakeLists 수정
CMake를 수정하여 Library와 Header의 위치를 추가해준다
# Set the location
set(FFmpeg_DIR ${CMAKE_SOURCE_DIR}/../../../src/main/jniLibs)
# Library Header File Location
include_directories(${CMAKE_SOURCE_DIR}/../../../src/main/cpp/include)
# Add ffmpeg Libraries
add_library(lib_avcodec SHARED IMPORTED)
set_target_properties(lib_avcodec PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libavcodec.so)
add_library(lib_avformat SHARED IMPORTED)
set_target_properties(lib_avformat PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libavformat.so)
add_library(lib_avdevice SHARED IMPORTED)
set_target_properties(lib_avdevice PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libavdevice.so)
add_library(lib_avfilter SHARED IMPORTED)
set_target_properties(lib_avfilter PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libavfilter.so)
add_library(lib_avutil SHARED IMPORTED)
set_target_properties(lib_avutil PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libavutil.so)
add_library(lib_swresample SHARED IMPORTED)
set_target_properties(lib_swresample PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libswresample.so)
add_library(lib_swscale SHARED IMPORTED)
set_target_properties(lib_swscale PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libswscale.so)
target_link_libraries( # Specifies the target library.
lib_avcodec
lib_avformat
lib_avdevice
lib_avfilter
lib_avutil
lib_swresample
lib_swscale
# Links the target library to the log library
# included in the NDK.
${log-lib})
4. Gradle 수정
CMake까지 수정한 후 gradle에 몇가지 추가해 준다
ndk {
abiFilters "arm64-v8a"
}
...........
sourceSets {
main {
// let gradle pack the shared library into apk
jniLibs.srcDirs = ['/src/main/jniLibs']
}
}
이렇게 하고 나면 잘 추가되는것을 확인할 수 있습니다.
'Android' 카테고리의 다른 글
OpenCV Android Studio Hedgehog 연동기 (0) | 2024.01.30 |
---|---|
Android kotlin gradle에서 OpenCV 적용시 생기는 이슈 해결기 (4) | 2024.01.29 |
annotation 이란? (0) | 2022.01.10 |
Android Studio: unresolved reference for java and javax imports (0) | 2022.01.07 |