luc*_*928 3 android-ndk android-gradle-plugin
我可以构建hello-libs谷歌示例代码,并且预构建库已正确复制到目标apk。
但是在我的应用程序中,编译已通过,但apk不包括预构建库。
两个问题:
lib/
??? arm64-v8a
??? libFFmpegWrapper.so
详细信息如下:
Android Studio版本:3.0.1操作系统:macosx 10.13.1
我的文件目录结构如下:
??? app
? ??? libs
? ??? src
? ??? main
? ? ??? cpp
? ? ? ??? ffmpeg
? ? ? ??? arm64-v8a
? ? ? ? ??? bin
? ? ? ? ??? include
? ? ? ? ??? lib
? ? ? ??? armeabi
? ? ? ? ??? include
? ? ? ? ??? lib
? ? ? ??? armeabi-v7a
? ? ? ??? include
? ? ? ??? lib
? ? ??? java
? ? ? ??? com
? ? ? ??? example
? ? ? ??? ffmpegtest
? ? ? ??? recorder
Run Code Online (Sandbox Code Playgroud)
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.ffmpegtest"
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
externalNativeBuild {
cmake {
cmake {
arguments '-DANDROID_PLATFORM=android-26',
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
}
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
// let gradle pack the shared library into apk
jniLibs.srcDirs = ['src/main/cpp/ffmpeg']
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
Run Code Online (Sandbox Code Playgroud)
CMakeList.txt
cmake_minimum_required(VERSION 3.4.1)
set(FFMPEG_DIR ${CMAKE_SOURCE_DIR}/src/main/cpp/ffmpeg)
add_library(avutil-55 SHARED IMPORTED)
set_target_properties(avutil-55
PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/${ANDROID_ABI}/lib/libavutil-55.so)
add_library(avformat-57 SHARED IMPORTED)
set_target_properties(avformat-57
PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/${ANDROID_ABI}/lib/libavformat-57.so)
add_library(avcodec-57 SHARED IMPORTED)
set_target_properties(avcodec-57
PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/${ANDROID_ABI}/lib/libavcodec-57.so)
add_library(avfilter-6 SHARED IMPORTED)
set_target_properties(avfilter-6
PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/${ANDROID_ABI}/lib/libavfilter-6.so)
add_library(swresample-2 SHARED IMPORTED)
set_target_properties(swresample-2
PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/${ANDROID_ABI}/lib/libswresample-2.so)
add_library(swscale-4 SHARED IMPORTED)
set_target_properties(swscale-4
PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/${ANDROID_ABI}/lib/libswscale-4.so)
set(FFMPEG_LIBS
avutil-55
avformat-57
avcodec-57
avfilter-6
swresample-2
swscale-4)
include_directories(${FFMPEG_DIR}/${ANDROID_ABI}/include)
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=softfp -mfpu=neon -g -O0")
add_library( # Sets the name of the library.
FFmpegWrapper
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/FFmpegWrapper.c
)
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log
)
target_link_libraries( # Specifies the target library.
FFmpegWrapper
# Links the target library to the log library
# included in the NDK.
${log-lib}
# ffmpeg library
${FFMPEG_LIBS}
)
Run Code Online (Sandbox Code Playgroud)
共享库目录结构应作如下更改:
src/main/cpp/
??? ffmpeg
??? include
??? lib
??? arm64-v8a
??? armeabi
??? armeabi-v7a
Run Code Online (Sandbox Code Playgroud)
并将其他代码行更改为正确的位置。CMakeList.txt可能如下所示:
cmake_minimum_required(VERSION 3.4.1)
set(FFMPEG_DIR ${CMAKE_SOURCE_DIR}/src/main/cpp/ffmpeg)
# library directory structure
# src/main/cpp/
# ??? ffmpeg
# ??? include
# ??? lib
# ??? arm64-v8a
# ??? armeabi
# ??? armeabi-v7a
include_directories(${FFMPEG_DIR}/include)
set(FFMPEG_LIBS
avutil-55
avformat-57
avcodec-57
avfilter-6
swresample-2
swscale-4)
foreach(libname ${FFMPEG_LIBS})
message(add lib ${libname})
add_library(${libname} SHARED IMPORTED)
set_target_properties(${libname} PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/lib/${ANDROID_ABI}/lib${libname}.so)
endforeach()
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=softfp -mfpu=neon -g -O0")
add_library(FFmpegWrapper SHARED src/main/cpp/FFmpegWrapper.c)
find_library(log-lib log)
target_link_libraries(FFmpegWrapper ${log-lib} ${FFMPEG_LIBS})
Run Code Online (Sandbox Code Playgroud)
build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
...
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
...
}
...
sourceSets {
main {
// let gradle pack the shared library into apk
jniLibs.srcDirs = ['src/main/cpp/ffmpeg/lib']
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |