共计 3271 个字符,预计需要花费 9 分钟才能阅读完成。
因为打算近期打算重构 ijkplayer 的安卓局部代码 思考对于安卓硬解码局部反对 c ++ 版本须要最低 21 的版本, 而 ijkplayer 仅反对 16 的版本, 所以特记录在 ndk 的降级过程中须要批改的一些中央。
修改 android/contrib/tools/do-detect-env.sh
IJK_NDK_REL=$(grep -o '^Pkg\.Revision.*=[0-9]*.*' $ANDROID_NDK/source.properties 2>/dev/null | sed 's/[[:space:]]*//g' | cut -d "=" -f 2)
echo "IJK_NDK_REL=$IJK_NDK_REL"
case "$IJK_NDK_REL" in
- 11*|12*|13*|14*|15*|16*)
+ 11*|12*|13*|14*|15*|16*|21*)
if test -d ${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.9
then
echo "NDKr$IJK_NDK_REL detected"
在上述代码中 增加 21 的版本反对
修改 android/ijkplayer/build.gradle
buildToolsVersion = "30.0.3"
targetSdkVersion = 30
- ndkVersion = "16.1.4479499"
+ ndkVersion = "21.1.6352462"
versionCode = property("VERSION_CODE").toInteger()
versionName = property("VERSION_NAME")
将 ndkVersion 版本晋升至 21
批改 extra/CMakeLists.txt.yuv
if(ANDROID)
if(${ANDROID_ABI} STREQUAL "armeabi-va7")
- add_definitions(-DLIBYUV_NEON)
+ add_definitions(-LIBYUV_NEON)
list(APPEND ly_source_files
source/compare_neon.cc.neon
source/rotate_neon.cc.neon
source/row_neon.cc.neon
source/scale_neon.cc.neon
)
elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
- add_definitions(-DLIBYUV_NEON)
+ add_definitions(-LIBYUV_NEON)
list(APPEND ly_source_files
source/compare_neon64.cc
source/rotate_neon64.cc
减少 android/ijkplayer/fijkplayer-full/gradle.properties
POM_ARTIFACT_ID=fijkplayer-full
POM_PACKAGING=aar
IJK_CXX_STL=c++_static
+ APP_STL=c++_static
批改 android/ijkplayer/ijkplayer-armv5/src/main/jni/Application.mk
APP_OPTIM := release
- APP_PLATFORM := android-9
+ APP_PLATFORM := android-16
APP_ABI := armeabi
NDK_TOOLCHAIN_VERSION=4.9
APP_PIE := false
- APP_STL := stlport_static
+ APP_STL := c++_static
APP_CFLAGS := -O3 -Wall -pipe \
-ffast-math \
批改 android/ijkplayer/ijkplayer-armv5/build.gradle
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
- minSdkVersion 9
+ minSdkVersion 16
targetSdkVersion rootProject.ext.targetSdkVersion
}
buildTypes {
注: 这里仅仅是列举了 armv5 其余的平台的也须要批改
批改 extra/CMakeLists.txt.yuv 的一些依赖
set(ly_source_files
${ly_src_dir}/compare.cc
${ly_src_dir}/compare_common.cc
- # ${ly_src_dir}/compare_neon.cc
+ ${ly_src_dir}/compare_neon.cc
${ly_src_dir}/compare_posix.cc
- # ${ly_src_dir}/compare_win.cc
+ ${ly_src_dir}/compare_win.cc
${ly_src_dir}/convert.cc
${ly_src_dir}/convert_argb.cc
${ly_src_dir}/convert_from.cc
${ly_src_dir}/convert_from_argb.cc
- # ${ly_src_dir}/convert_jpeg.cc
+ ${ly_src_dir}/convert_jpeg.cc
${ly_src_dir}/convert_to_argb.cc
${ly_src_dir}/convert_to_i420.cc
${ly_src_dir}/cpu_id.cc
${ly_src_dir}/format_conversion.cc
- # ${ly_src_dir}/mjpeg_decoder.cc
- # ${ly_src_dir}/mjpeg_validate.cc
+ ${ly_src_dir}/mjpeg_decoder.cc
+ ${ly_src_dir}/mjpeg_validate.cc
${ly_src_dir}/planar_functions.cc
${ly_src_dir}/rotate.cc
${ly_src_dir}/rotate_argb.cc
${ly_src_dir}/rotate_mips.cc
- # ${ly_src_dir}/rotate_neon.cc
+ ${ly_src_dir}/rotate_neon.cc
${ly_src_dir}/row_any.cc
${ly_src_dir}/row_common.cc
${ly_src_dir}/row_mips.cc
- # ${ly_src_dir}/row_neon.cc
+ ${ly_src_dir}/row_neon.cc
${ly_src_dir}/row_posix.cc
- # ${ly_src_dir}/row_win.cc
+ ${ly_src_dir}/row_win.cc
${ly_src_dir}/scale.cc
${ly_src_dir}/scale_argb.cc
${ly_src_dir}/scale_common.cc
${ly_src_dir}/scale_mips.cc
- # ${ly_src_dir}/scale_neon.cc
+ ${ly_src_dir}/scale_neon.cc
${ly_src_dir}/scale_posix.cc
- # ${ly_src_dir}/scale_win.cc
+ ${ly_src_dir}/scale_win.cc
${ly_src_dir}/video_common.cc
)
通过上述的革新后 即可应用 21 的 NDK 版本进行编译 或者能够间接应用 https://github.com/FlutterPlayer/ijkplayer 仓库的代码间接编译 对于 ijkplayer 的 android 编译能够参考这篇文章 https://fplayer.dev/core/build-android.html
正文完