因为打算近期打算重构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