android .sh,android.sh

#!/bin/bash

# ARCH INDEXES

ARCH_ARM_V7A=0

ARCH_ARM_V7A_NEON=1

ARCH_ARM64_V8A=2

ARCH_X86=3

ARCH_X86_64=4

# LIBRARY INDEXES

LIBRARY_FONTCONFIG=0

LIBRARY_FREETYPE=1

LIBRARY_FRIBIDI=2

LIBRARY_GMP=3

LIBRARY_GNUTLS=4

LIBRARY_LAME=5

LIBRARY_LIBASS=6

LIBRARY_LIBICONV=7

LIBRARY_LIBTHEORA=8

LIBRARY_LIBVORBIS=9

LIBRARY_LIBVPX=10

LIBRARY_LIBWEBP=11

LIBRARY_LIBXML2=12

LIBRARY_OPENCOREAMR=13

LIBRARY_SHINE=14

LIBRARY_SPEEX=15

LIBRARY_WAVPACK=16

LIBRARY_KVAZAAR=17

LIBRARY_X264=18

LIBRARY_XVIDCORE=19

LIBRARY_X265=20

LIBRARY_LIBVIDSTAB=21

LIBRARY_LIBILBC=22

LIBRARY_OPUS=23

LIBRARY_SNAPPY=24

LIBRARY_SOXR=25

LIBRARY_LIBAOM=26

LIBRARY_CHROMAPRINT=27

LIBRARY_TWOLAME=28

LIBRARY_SDL=29

LIBRARY_TESSERACT=30

LIBRARY_OPENH264=31

LIBRARY_GIFLIB=32

LIBRARY_JPEG=33

LIBRARY_LIBOGG=34

LIBRARY_LIBPNG=35

LIBRARY_LIBUUID=36

LIBRARY_NETTLE=37

LIBRARY_TIFF=38

LIBRARY_EXPAT=39

LIBRARY_SNDFILE=40

LIBRARY_LEPTONICA=41

LIBRARY_ZLIB=42

LIBRARY_MEDIA_CODEC=43

# ENABLE ARCH

ENABLED_ARCHITECTURES=(1 1 1 1 1)

# ENABLE LIBRARIES

ENABLED_LIBRARIES=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)

export BASEDIR=$(pwd)

export MOBILE_FFMPEG_TMPDIR="${BASEDIR}/.tmp"

# USING API LEVEL 24 / Android 7.0 (NOUGAT)

export API=24

RECONF_LIBRARIES=()

REBUILD_LIBRARIES=()

get_mobile_ffmpeg_version() {

local MOBILE_FFMPEG_VERSION=$(grep '#define MOBILE_FFMPEG_VERSION' ${BASEDIR}/android/app/src/main/cpp/mobileffmpeg.h | grep -Eo '\".*\"' | sed -e 's/\"//g')

echo ${MOBILE_FFMPEG_VERSION}

}

display_help() {

COMMAND=`echo $0 | sed -e 's/\.\///g'`

echo -e "\n'"$COMMAND"' builds FFmpeg and MobileFFmpeg for Android platform. By default five Android ABIs (armeabi-v7a, armeabi-v7a-neon, arm64-v8a, x86 and x86_64) are built \

without any external libraries enabled. Options can be used to disable ABIs and/or enable external libraries. \

Please note that GPL libraries (external libraries with GPL license) need --enable-gpl flag to be set explicitly. \

When compilation ends an Android Archive (AAR) file is created with enabled platforms inside.\n"

echo -e "Usage: ./"$COMMAND" [OPTION]...\n"

echo -e "Specify environment variables as VARIABLE=VALUE to override default build options.\n"

echo -e "Options:"

echo -e " -h, --help\t\t\tdisplay this help and exit"

echo -e " -v, --version\t\t\tdisplay version information and exit"

echo -e " -d, --debug\t\t\tbuild with debug information"

echo -e " -s, --speed\t\t\toptimize for speed instead of size"

echo -e " -l, --lts\t\t\tbuild lts packages to support API 16+ devices"

echo -e " -f, --force\t\t\tignore warnings\n"

echo -e "Licensing options:"

echo -e " --enable-gpl\t\t\tallow use of GPL libraries, resulting libs will be licensed under GPLv3.0 [no]\n"

echo -e "Platforms:"

echo -e " --disable-arm-v7a\t\tdo not build arm-v7a platform [yes]"

echo -e " --disable-arm-v7a-neon\tdo not build arm-v7a-neon platform [yes]"

echo -e " --disable-arm64-v8a\t\tdo not build arm64-v8a platform [yes]"

echo -e " --disable-x86\t\t\tdo not build x86 platform [yes]"

echo -e " --disable-x86-64\t\tdo not build x86-64 platform [yes]\n"

echo -e "Libraries:"

echo -e " --full\t\t\tenables all external libraries"

echo -e " --enable-android-media-codec\tbuild with built-in Android MediaCodec support[no]"

echo -e " --enable-android-zlib\t\tbuild with built-in zlib support[no]"

echo -e " --enable-chromaprint\t\tbuild with chromaprint [no]"

echo -e " --enable-fontconfig\t\tbuild with fontconfig [no]"

echo -e " --enable-freetype\t\tbuild with freetype [no]"

echo -e " --enable-fribidi\t\tbuild with fribidi [no]"

echo -e " --enable-gmp\t\t\tbuild with gmp [no]"

echo -e " --enable-gnutls\t\tbuild with gnutls [no]"

echo -e " --enable-kvazaar\t\tbuild with kvazaar [no]"

echo -e " --enable-lame\t\t\tbuild with lame [no]"

echo -e " --enable-libaom\t\tbuild with libaom [no]"

echo -e " --enable-libass\t\tbuild with libass [no]"

echo -e " --enable-libiconv\t\tbuild with libiconv [no]"

echo -e " --enable-libilbc\t\tbuild with libilbc [no]"

echo -e " --enable-libtheora\t\tbuild with libtheora [no]"

echo -e " --enable-libvorbis\t\tbuild with libvorbis [no]"

echo -e " --enable-libvpx\t\tbuild with libvpx [no]"

echo -e " --enable-libwebp\t\tbuild with libwebp [no]"

echo -e " --enable-libxml2\t\tbuild with libxml2 [no]"

echo -e " --enable-opencore-amr\t\tbuild with opencore-amr [no]"

echo -e " --enable-openh264\t\tbuild with openh264 [no]"

echo -e " --enable-opus\t\t\tbuild with opus [no]"

echo -e " --enable-sdl\t\t\tbuild with sdl [no]"

echo -e " --enable-shine\t\tbuild with shine [no]"

echo -e " --enable-snappy\t\tbuild with snappy [no]"

echo -e " --enable-soxr\t\t\tbuild with soxr [no]"

echo -e " --enable-speex\t\tbuild with speex [no]"

echo -e " --enable-tesseract\t\tbuild with tesseract [no]"

echo -e " --enable-twolame\t\tbuild with twolame [no]"

echo -e " --enable-wavpack\t\tbuild with wavpack [no]\n"

echo -e "GPL libraries:"

echo -e " --enable-libvidstab\t\tbuild with libvidstab [no]"

echo -e " --enable-x264\t\t\tbuild with x264 [no]"

echo -e " --enable-x265\t\t\tbuild with x265 [no]"

echo -e " --enable-xvidcore\t\tbuild with xvidcore [no]\n"

echo -e "Advanced options:"

echo -e " --reconf-LIBRARY\t\trun autoreconf before building LIBRARY [no]"

echo -e " --rebuild-LIBRARY\t\tbuild LIBRARY even it is detected as already built [no]\n"

}

display_version() {

COMMAND=`echo $0 | sed -e 's/\.\///g'`

echo -e "\

$COMMAND v$(get_mobile_ffmpeg_version)\n\

Copyright (c) 2018 Taner Sener\n\

License LGPLv3.0: GNU LGPL version 3 or later\n\

\n\

This is free software: you can redistribute it and/or modify it under the terms of the \

GNU Lesser General Public License as published by the Free Software Foundation, \

either version 3 of the License, or (at your option) any later version."

}

skip_library() {

SKIP_VARIABLE=$(echo "SKIP_$1" | sed "s/\-/\_/g")

export ${SKIP_VARIABLE}=1

}

no_output_redirection() {

export NO_OUTPUT_REDIRECTION=1

}

no_workspace_cleanup_library() {

NO_WORKSPACE_CLEANUP_VARIABLE=$(echo "NO_WORKSPACE_CLEANUP_$1" | sed "s/\-/\_/g")

export ${NO_WORKSPACE_CLEANUP_VARIABLE}=1

}

no_link_time_optimization() {

export NO_LINK_TIME_OPTIMIZATION=1

}

enable_debug() {

export MOBILE_FFMPEG_DEBUG="-g"

BUILD_TYPE_ID+="debug "

}

optimize_for_speed() {

export MOBILE_FFMPEG_OPTIMIZED_FOR_SPEED="1"

}

enable_lts_build() {

export MOBILE_FFMPEG_LTS_BUILD="1"

# USING API LEVEL 16 / Android 4.1 (JELLY BEAN)

export API=16

}

reconf_library() {

local RECONF_VARIABLE=$(echo "RECONF_$1" | sed "s/\-/\_/g")

local library_supported=0

for library in {1..42}

do

library_name=$(get_library_name $((library - 1)))

if [[ $1 != "ffmpeg" ]] && [[ ${library_name} == $1 ]]; then

export ${RECONF_VARIABLE}=1

RECONF_LIBRARIES+=($1)

library_supported=1

fi

done

if [[ ${library_supported} -eq 0 ]]; then

echo -e "INFO: --reconf flag detected for library $1 is not supported.\n" 1>>${BASEDIR}/build.log 2>&1

fi

}

rebuild_library() {

local REBUILD_VARIABLE=$(echo "REBUILD_$1" | sed "s/\-/\_/g")

local library_supported=0

for library in {1..42}

do

library_name=$(get_library_name $((library - 1)))

if [[ $1 != "ffmpeg" ]] && [[ ${library_name} == $1 ]]; then

export ${REBUILD_VARIABLE}=1

REBUILD_LIBRARIES+=($1)

library_supported=1

fi

done

if [[ ${library_supported} -eq 0 ]]; then

echo -e "INFO: --rebuild flag detected for library $1 is not supported.\n" 1>>${BASEDIR}/build.log 2>&1

fi

}

enable_library() {

set_library $1 1

}

set_library() {

case $1 in

android-media-codec)

ENABLED_LIBRARIES[LIBRARY_MEDIA_CODEC]=$2

;;

android-zlib)

ENABLED_LIBRARIES[LIBRARY_ZLIB]=$2

;;

chromaprint)

ENABLED_LIBRARIES[LIBRARY_CHROMAPRINT]=$2

;;

fontconfig)

ENABLED_LIBRARIES[LIBRARY_FONTCONFIG]=$2

ENABLED_LIBRARIES[LIBRARY_LIBUUID]=$2

ENABLED_LIBRARIES[LIBRARY_EXPAT]=$2

ENABLED_LIBRARIES[LIBRARY_LIBICONV]=$2

set_library "freetype" $2

;;

freetype)

ENABLED_LIBRARIES[LIBRARY_FREETYPE]=$2

ENABLED_LIBRARIES[LIBRARY_ZLIB]=$2

set_library "libpng" $2

;;

fribidi)

ENABLED_LIBRARIES[LIBRARY_FRIBIDI]=$2

;;

gmp)

ENABLED_LIBRARIES[LIBRARY_GMP]=$2

;;

gnutls)

ENABLED_LIBRARIES[LIBRARY_GNUTLS]=$2

ENABLED_LIBRARIES[LIBRARY_ZLIB]=$2

set_library "nettle" $2

set_library "gmp" $2

set_library "libiconv" $2

;;

kvazaar)

ENABLED_LIBRARIES[LIBRARY_KVAZAAR]=$2

;;

lame)

ENABLED_LIBRARIES[LIBRARY_LAME]=$2

set_library "libiconv" $2

;;

libaom)

ENABLED_LIBRARIES[LIBRARY_LIBAOM]=$2

;;

libass)

ENABLED_LIBRARIES[LIBRARY_LIBASS]=$2

ENABLED_LIBRARIES[LIBRARY_LIBUUID]=$2

ENABLED_LIBRARIES[LIBRARY_EXPAT]=$2

set_library "freetype" $2

set_library "fribidi" $2

set_library "fontconfig" $2

set_library "libiconv" $2

;;

libiconv)

ENABLED_LIBRARIES[LIBRARY_LIBICONV]=$2

;;

libilbc)

ENABLED_LIBRARIES[LIBRARY_LIBILBC]=$2

;;

libpng)

ENABLED_LIBRARIES[LIBRARY_LIBPNG]=$2

ENABLED_LIBRARIES[LIBRARY_ZLIB]=$2

;;

libtheora)

ENABLED_LIBRARIES[LIBRARY_LIBTHEORA]=$2

ENABLED_LIBRARIES[LIBRARY_LIBOGG]=$2

set_library "libvorbis" $2

;;

libvidstab)

ENABLED_LIBRARIES[LIBRARY_LIBVIDSTAB]=$2

;;

libvorbis)

ENABLED_LIBRARIES[LIBRARY_LIBVORBIS]=$2

ENABLED_LIBRARIES[LIBRARY_LIBOGG]=$2

;;

libvpx)

ENABLED_LIBRARIES[LIBRARY_LIBVPX]=$2

;;

libwebp)

ENABLED_LIBRARIES[LIBRARY_LIBWEBP]=$2

ENABLED_LIBRARIES[LIBRARY_GIFLIB]=$2

ENABLED_LIBRARIES[LIBRARY_JPEG]=$2

set_library "tiff" $2

set_library "libpng" $2

;;

libxml2)

ENABLED_LIBRARIES[LIBRARY_LIBXML2]=$2

set_library "libiconv" $2

;;

opencore-amr)

ENABLED_LIBRARIES[LIBRARY_OPENCOREAMR]=$2

;;

openh264)

ENABLED_LIBRARIES[LIBRARY_OPENH264]=$2

;;

opus)

ENABLED_LIBRARIES[LIBRARY_OPUS]=$2

;;

sdl)

ENABLED_LIBRARIES[LIBRARY_SDL]=$2

;;

shine)

ENABLED_LIBRARIES[LIBRARY_SHINE]=$2

;;

snappy)

ENABLED_LIBRARIES[LIBRARY_SNAPPY]=$2

ENABLED_LIBRARIES[LIBRARY_ZLIB]=$2

;;

soxr)

ENABLED_LIBRARIES[LIBRARY_SOXR]=$2

;;

speex)

ENABLED_LIBRARIES[LIBRARY_SPEEX]=$2

;;

tesseract)

ENABLED_LIBRARIES[LIBRARY_TESSERACT]=$2

ENABLED_LIBRARIES[LIBRARY_LEPTONICA]=$2

ENABLED_LIBRARIES[LIBRARY_LIBWEBP]=$2

ENABLED_LIBRARIES[LIBRARY_GIFLIB]=$2

ENABLED_LIBRARIES[LIBRARY_JPEG]=$2

ENABLED_LIBRARIES[LIBRARY_ZLIB]=$2

set_library "tiff" $2

set_library "libpng" $2

;;

twolame)

ENABLED_LIBRARIES[LIBRARY_TWOLAME]=$2

ENABLED_LIBRARIES[LIBRARY_SNDFILE]=$2

;;

wavpack)

ENABLED_LIBRARIES[LIBRARY_WAVPACK]=$2

;;

x264)

ENABLED_LIBRARIES[LIBRARY_X264]=$2

;;

x265)

ENABLED_LIBRARIES[LIBRARY_X265]=$2

;;

xvidcore)

ENABLED_LIBRARIES[LIBRARY_XVIDCORE]=$2

;;

expat | giflib | jpeg | leptonica | libogg | libpng | libsndfile | libuuid)

# THESE LIBRARIES ARE NOT ENABLED DIRECTLY

;;

nettle)

ENABLED_LIBRARIES[LIBRARY_NETTLE]=$2

set_library "gmp" $2

;;

tiff)

ENABLED_LIBRARIES[LIBRARY_TIFF]=$2

ENABLED_LIBRARIES[LIBRARY_JPEG]=$2

;;

*)

print_unknown_library $1

;;

esac

}

disable_arch() {

set_arch $1 0

}

set_arch() {

case $1 in

arm-v7a)

ENABLED_ARCHITECTURES[ARCH_ARM_V7A]=$2

;;

arm-v7a-neon)

ENABLED_ARCHITECTURES[ARCH_ARM_V7A_NEON]=$2

;;

arm64-v8a)

ENABLED_ARCHITECTURES[ARCH_ARM64_V8A]=$2

;;

x86)

ENABLED_ARCHITECTURES[ARCH_X86]=$2

;;

x86-64)

ENABLED_ARCHITECTURES[ARCH_X86_64]=$2

;;

*)

print_unknown_platform $1

;;

esac

}

print_unknown_option() {

echo -e "Unknown option \"$1\".\nSee $0 --help for available options."

exit 1

}

print_unknown_library() {

echo -e "Unknown library \"$1\".\nSee $0 --help for available libraries."

exit 1

}

print_unknown_platform() {

echo -e "Unknown platform \"$1\".\nSee $0 --help for available platforms."

exit 1

}

print_enabled_architectures() {

echo -n "Architectures: "

let enabled=0;

for print_arch in {0..4}

do

if [[ ${ENABLED_ARCHITECTURES[$print_arch]} -eq 1 ]]; then

if [[ ${enabled} -ge 1 ]]; then

echo -n ", "

fi

echo -n $(get_arch_name $print_arch)

enabled=$((${enabled} + 1));

fi

done

if [ ${enabled} -gt 0 ]; then

echo ""

else

echo "none"

fi

}

print_enabled_libraries() {

echo -n "Libraries: "

let enabled=0;

# FIRST BUILT-IN LIBRARIES

for library in {42..43}

do

if [[ ${ENABLED_LIBRARIES[$library]} -eq 1 ]]; then

if [[ ${enabled} -ge 1 ]]; then

echo -n ", "

fi

echo -n $(get_library_name $library)

enabled=$((${enabled} + 1));

fi

done

# THEN EXTERNAL LIBRARIES

for library in {0..31}

do

if [[ ${ENABLED_LIBRARIES[$library]} -eq 1 ]]; then

if [[ ${enabled} -ge 1 ]]; then

echo -n ", "

fi

echo -n $(get_library_name $library)

enabled=$((${enabled} + 1));

fi

done

if [ ${enabled} -gt 0 ]; then

echo ""

else

echo "none"

fi

}

print_reconfigure_requested_libraries() {

local counter=0;

for RECONF_LIBRARY in "${RECONF_LIBRARIES[@]}"

do

if [[ ${counter} -eq 0 ]]; then

echo -n "Reconfigure: "

else

echo -n ", "

fi

echo -n ${RECONF_LIBRARY}

counter=$((${counter} + 1));

done

if [[ ${counter} -gt 0 ]]; then

echo ""

fi

}

print_rebuild_requested_libraries() {

local counter=0;

for REBUILD_LIBRARY in "${REBUILD_LIBRARIES[@]}"

do

if [[ ${counter} -eq 0 ]]; then

echo -n "Rebuild: "

else

echo -n ", "

fi

echo -n ${REBUILD_LIBRARY}

counter=$((${counter} + 1));

done

if [[ ${counter} -gt 0 ]]; then

echo ""

fi

}

build_application_mk() {

if [[ ! -z ${MOBILE_FFMPEG_LTS_BUILD} ]]; then

local LTS_BUILD_FLAG="-DMOBILE_FFMPEG_LTS "

fi

if [[ ${ENABLED_LIBRARIES[$LIBRARY_X265]} -eq 1 ]] || [[ ${ENABLED_LIBRARIES[$LIBRARY_TESSERACT]} -eq 1 ]] || [[ ${ENABLED_LIBRARIES[$LIBRARY_OPENH264]} -eq 1 ]] || [[ ${ENABLED_LIBRARIES[$LIBRARY_SNAPPY]} -eq 1 ]]; then

local APP_STL="c++_shared"

else

local APP_STL="none"

${SED_INLINE} 's/c++_shared //g' ${BASEDIR}/android/jni/Android.mk 1>>${BASEDIR}/build.log 2>&1

fi

local BUILD_DATE="-DMOBILE_FFMPEG_BUILD_DATE=$(date +%Y%m%d 2>>${BASEDIR}/build.log)"

rm -f ${BASEDIR}/android/jni/Application.mk

cat > "${BASEDIR}/android/jni/Application.mk" << EOF

APP_OPTIM := release

APP_ABI := ${ANDROID_ARCHITECTURES}

APP_STL := ${APP_STL}

APP_PLATFORM := android-${API}

APP_CFLAGS := -O3 -DANDROID ${LTS_BUILD_FLAG}${BUILD_DATE} -Wall -Wno-deprecated-declarations -Wno-pointer-sign -Wno-switch -Wno-unused-result -Wno-unused-variable

APP_LDFLAGS := -Wl,--hash-style=both

EOF

}

# ENABLE COMMON FUNCTIONS

. ${BASEDIR}/build/android-common.sh

DETECTED_NDK_VERSION=$(grep -Eo Revision.* ${ANDROID_NDK_ROOT}/source.properties | sed 's/Revision//g;s/=//g;s/ //g')

echo -e "\nINFO: Using Android NDK v${DETECTED_NDK_VERSION} provided at ${ANDROID_NDK_ROOT}\n" 1>>${BASEDIR}/build.log 2>&1

echo -e "INFO: Build options: $@\n" 1>>${BASEDIR}/build.log 2>&1

# CLEAR OLD NATIVE LIBS

rm -rf ${BASEDIR}/android/libs 1>>${BASEDIR}/build.log 2>&1

rm -rf ${BASEDIR}/android/obj 1>>${BASEDIR}/build.log 2>&1

GPL_ENABLED="no"

DISPLAY_HELP=""

BUILD_LTS=""

BUILD_TYPE_ID=""

BUILD_VERSION=$(git describe --tags 2>>${BASEDIR}/build.log)

while [ ! $# -eq 0 ]

do

case $1 in

-h | --help)

DISPLAY_HELP="1"

;;

-v | --version)

display_version

exit 0

;;

--skip-*)

SKIP_LIBRARY=`echo $1 | sed -e 's/^--[A-Za-z]*-//g'`

skip_library ${SKIP_LIBRARY}

;;

--no-output-redirection)

no_output_redirection

;;

--no-workspace-cleanup-*)

NO_WORKSPACE_CLEANUP_LIBRARY=`echo $1 | sed -e 's/^--[A-Za-z]*-[A-Za-z]*-[A-Za-z]*-//g'`

no_workspace_cleanup_library ${NO_WORKSPACE_CLEANUP_LIBRARY}

;;

--no-link-time-optimization)

no_link_time_optimization

;;

-d | --debug)

enable_debug

;;

-s | --speed)

optimize_for_speed

;;

-l | --lts)

BUILD_LTS="1"

;;

-f | --force)

BUILD_FORCE="1"

;;

--reconf-*)

CONF_LIBRARY=`echo $1 | sed -e 's/^--[A-Za-z]*-//g'`

reconf_library ${CONF_LIBRARY}

;;

--rebuild-*)

BUILD_LIBRARY=`echo $1 | sed -e 's/^--[A-Za-z]*-//g'`

rebuild_library ${BUILD_LIBRARY}

;;

--full)

for library in {0..43}

do

if [[ $library -ne 18 ]] && [[ $library -ne 19 ]] && [[ $library -ne 20 ]] && [[ $library -ne 21 ]]; then

enable_library $(get_library_name $library)

fi

done

;;

--enable-gpl)

GPL_ENABLED="yes"

;;

--enable-*)

ENABLED_LIBRARY=`echo $1 | sed -e 's/^--[A-Za-z]*-//g'`

enable_library ${ENABLED_LIBRARY}

;;

--disable-*)

DISABLED_ARCH=`echo $1 | sed -e 's/^--[A-Za-z]*-//g'`

disable_arch ${DISABLED_ARCH}

;;

*)

print_unknown_option $1

;;

esac

shift

done;

# DETECT BUILD TYPE

rm -f ${BASEDIR}/android/jni/Android.mk 1>>${BASEDIR}/build.log 2>&1

rm -f ${BASEDIR}/android/app/build.gradle 1>>${BASEDIR}/build.log 2>&1

if [[ ! -z ${BUILD_LTS} ]]; then

enable_lts_build

BUILD_TYPE_ID+="LTS "

cp ${BASEDIR}/tools/ndk/Android.lts.mk ${BASEDIR}/android/jni/Android.mk 1>>${BASEDIR}/build.log 2>&1

cp ${BASEDIR}/tools/release/android/build.lts.gradle ${BASEDIR}/android/app/build.gradle 1>>${BASEDIR}/build.log 2>&1

else

cp ${BASEDIR}/tools/ndk/Android.mk ${BASEDIR}/android/jni/Android.mk 1>>${BASEDIR}/build.log 2>&1

cp ${BASEDIR}/tools/release/android/build.gradle ${BASEDIR}/android/app/build.gradle 1>>${BASEDIR}/build.log 2>&1

if [[ -z ${BUILD_FORCE} ]] && [[ ${ENABLED_ARCHITECTURES[${ARCH_ARM_V7A}]} -eq 1 ]]; then

echo -e "INFO: Disabled arm-v7a architecture which is not included in Main releases.\n" 1>>${BASEDIR}/build.log 2>&1

disable_arch "arm-v7a"

fi

fi

if [[ ! -z ${DISPLAY_HELP} ]]; then

display_help

exit 0

fi

if [[ -z ${ANDROID_NDK_ROOT} ]]; then

echo "ANDROID_NDK_ROOT not defined"

exit 1

fi

if [[ -z ${ANDROID_HOME} ]]; then

echo "ANDROID_HOME not defined"

exit 1

fi

echo -e "\nBuilding mobile-ffmpeg ${BUILD_TYPE_ID}library for Android\n"

echo -e -n "INFO: Building mobile-ffmpeg ${BUILD_VERSION} ${BUILD_TYPE_ID}library for Android: " 1>>${BASEDIR}/build.log 2>&1

echo -e `date` 1>>${BASEDIR}/build.log 2>&1

# PERFORM THIS CHECK ONLY ON LTS

if [[ ! -z ${MOBILE_FFMPEG_LTS_BUILD} ]] && [[ ${ENABLED_ARCHITECTURES[0]} -eq 0 ]] && [[ ${ENABLED_ARCHITECTURES[1]} -eq 1 ]]; then

ENABLED_ARCHITECTURES[ARCH_ARM_V7A]=1

echo -e "(*) arm-v7a architecture enabled since arm-v7a-neon will be built\n"

echo -e "(*) arm-v7a architecture enabled since arm-v7a-neon will be built\n" 1>>${BASEDIR}/build.log 2>&1

fi

print_enabled_architectures

print_enabled_libraries

print_reconfigure_requested_libraries

print_rebuild_requested_libraries

# CHECKING GPL LIBRARIES

for gpl_library in {18..21}

do

if [[ ${ENABLED_LIBRARIES[$gpl_library]} -eq 1 ]]; then

library_name=$(get_library_name ${gpl_library})

if [ ${GPL_ENABLED} != "yes" ]; then

echo -e "\n(*) Invalid configuration detected. GPL library ${library_name} enabled without --enable-gpl flag.\n"

echo -e "\n(*) Invalid configuration detected. GPL library ${library_name} enabled without --enable-gpl flag.\n" 1>>${BASEDIR}/build.log 2>&1

exit 1

else

DOWNLOAD_RESULT=$(download_gpl_library_source ${library_name})

if [[ ${DOWNLOAD_RESULT} -ne 0 ]]; then

echo -e "\n(*) Failed to download GPL library ${library_name} source. Please check build.log file for details. If the problem persists refer to offline building instructions.\n"

echo -e "\n(*) Failed to download GPL library ${library_name} source.\n" 1>>${BASEDIR}/build.log 2>&1

exit 1

fi

fi

fi

done

# SAVE API VALUE

export ORIGINAL_API=${API};

for run_arch in {0..4}

do

if [[ ${ENABLED_ARCHITECTURES[$run_arch]} -eq 1 ]]; then

if [[ ( ${run_arch} -eq ${ARCH_ARM64_V8A} || ${run_arch} -eq ${ARCH_X86_64} ) && ${API} < 21 ]] ; then

# 64 bit ABIs supported after API 21

export API=21

else

export API=${ORIGINAL_API}

fi

export ARCH=$(get_arch_name $run_arch)

export TOOLCHAIN=$(get_toolchain)

export TOOLCHAIN_ARCH=$(get_toolchain_arch)

. ${BASEDIR}/build/main-android.sh "${ENABLED_LIBRARIES[@]}" || exit 1

# CLEAR FLAGS

for library in {1..44}

do

library_name=$(get_library_name $((library - 1)))

unset $(echo "OK_${library_name}" | sed "s/\-/\_/g")

unset $(echo "DEPENDENCY_REBUILT_${library_name}" | sed "s/\-/\_/g")

done

fi

done

export API=${ORIGINAL_API}

rm -f ${BASEDIR}/android/build/.neon 1>>${BASEDIR}/build.log 2>&1

ANDROID_ARCHITECTURES=""

if [[ ${ENABLED_ARCHITECTURES[1]} -eq 1 ]]; then

ANDROID_ARCHITECTURES+="$(get_android_arch 0) "

mkdir -p ${BASEDIR}/android/build 1>>${BASEDIR}/build.log 2>&1

cat > "${BASEDIR}/android/build/.neon" << EOF

EOF

elif [[ ${ENABLED_ARCHITECTURES[0]} -eq 1 ]]; then

ANDROID_ARCHITECTURES+="$(get_android_arch 0) "

fi

if [[ ${ENABLED_ARCHITECTURES[2]} -eq 1 ]]; then

ANDROID_ARCHITECTURES+="$(get_android_arch 2) "

fi

if [[ ${ENABLED_ARCHITECTURES[3]} -eq 1 ]]; then

ANDROID_ARCHITECTURES+="$(get_android_arch 3) "

fi

if [[ ${ENABLED_ARCHITECTURES[4]} -eq 1 ]]; then

ANDROID_ARCHITECTURES+="$(get_android_arch 4) "

fi

if [[ ! -z ${ANDROID_ARCHITECTURES} ]]; then

echo -n -e "\nmobile-ffmpeg: "

build_application_mk

MOBILE_FFMPEG_AAR=${BASEDIR}/prebuilt/android-aar/mobile-ffmpeg

# BUILDING ANDROID ARCHIVE LIBRARY

rm -rf ${BASEDIR}/android/libs 1>>${BASEDIR}/build.log 2>&1

mkdir -p ${MOBILE_FFMPEG_AAR} 1>>${BASEDIR}/build.log 2>&1

cd ${BASEDIR}/android 1>>${BASEDIR}/build.log 2>&1

${ANDROID_NDK_ROOT}/ndk-build -B 1>>${BASEDIR}/build.log 2>&1

if [ $? -eq 0 ]; then

echo "ok"

else

echo "failed"

exit 1

fi

echo -e -n "\n\nCreating Android archive under prebuilt/android-aar: "

./gradlew clean build 1>>${BASEDIR}/build.log 2>&1

if [ $? -ne 0 ]; then

echo -e "failed\n"

exit 1

fi

cp ${BASEDIR}/android/app/build/outputs/aar/mobile-ffmpeg.aar ${MOBILE_FFMPEG_AAR}/mobile-ffmpeg.aar 1>>${BASEDIR}/build.log 2>&1

if [ $? -ne 0 ]; then

echo -e "failed\n"

exit 1

fi

echo -e "Created mobile-ffmpeg Android archive successfully.\n" 1>>${BASEDIR}/build.log 2>&1

echo -e "ok\n"

fi

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值