因为打算近期打算重构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.9thenecho "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-fullPOM_PACKAGING=aarIJK_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-16APP_ABI := armeabiNDK_TOOLCHAIN_VERSION=4.9APP_PIE := false- APP_STL := stlport_static+ APP_STL := c++_staticAPP_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