1+ #! /bin/bash
2+
3+ # Set NDK path
4+ ANDROID_NDK_HOME=" /opt/android-ndk"
5+
6+ # Update FFmpeg version
7+ FFMPEG_VERSION=" 7.1"
8+
9+ # Use current directory
10+ WORK_DIR=$( pwd)
11+ echo " Working directory: $WORK_DIR "
12+ echo " Build started at: 2025-03-28 11:45:31 by husen-hn"
13+ echo " FFmpeg version: $FFMPEG_VERSION "
14+
15+ # Clean old build if exists
16+ if [ -d " ffmpeg-${FFMPEG_VERSION} " ]; then
17+ echo " Cleaning old FFmpeg build directory..."
18+ rm -rf " ffmpeg-${FFMPEG_VERSION} "
19+ fi
20+
21+ # Extract FFmpeg
22+ echo " Extracting FFmpeg..."
23+ if [ -f " ffmpeg-${FFMPEG_VERSION} .tar.bz2" ]; then
24+ tar xjf " ffmpeg-${FFMPEG_VERSION} .tar.bz2" || {
25+ echo " Failed to extract FFmpeg"
26+ exit 1
27+ }
28+ else
29+ echo " Error: ffmpeg-${FFMPEG_VERSION} .tar.bz2 not found!"
30+ echo " Please download FFmpeg 7.1 from:"
31+ echo " https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2"
32+ echo " "
33+ echo " You can download it using:"
34+ echo " wget https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2"
35+ exit 1
36+ fi
37+
38+ cd " ffmpeg-${FFMPEG_VERSION} "
39+
40+ # Verify NDK path
41+ echo " Checking NDK path: $ANDROID_NDK_HOME "
42+ if [ ! -d " $ANDROID_NDK_HOME " ]; then
43+ echo " Error: NDK path not found: $ANDROID_NDK_HOME "
44+ exit 1
45+ fi
46+
47+ TOOLCHAIN=$ANDROID_NDK_HOME /toolchains/llvm/prebuilt/linux-x86_64
48+
49+ if [ ! -d " $TOOLCHAIN " ]; then
50+ echo " Error: Toolchain not found: $TOOLCHAIN "
51+ exit 1
52+ fi
53+
54+ function build_ffmpeg
55+ {
56+ ABI=$1
57+ ANDROID_API=21
58+
59+ echo " Building FFmpeg for $ABI "
60+
61+ case ${ABI} in
62+ armeabi-v7a)
63+ ARCH=arm
64+ CPU=armv7-a
65+ CROSS_PREFIX=$TOOLCHAIN /bin/arm-linux-androideabi-
66+ CC=$TOOLCHAIN /bin/armv7a-linux-androideabi${ANDROID_API} -clang
67+ CXX=$TOOLCHAIN /bin/armv7a-linux-androideabi${ANDROID_API} -clang++
68+ ;;
69+ arm64-v8a)
70+ ARCH=aarch64
71+ CPU=armv8-a
72+ CROSS_PREFIX=$TOOLCHAIN /bin/aarch64-linux-android-
73+ CC=$TOOLCHAIN /bin/aarch64-linux-android${ANDROID_API} -clang
74+ CXX=$TOOLCHAIN /bin/aarch64-linux-android${ANDROID_API} -clang++
75+ ;;
76+ x86_64)
77+ ARCH=x86_64
78+ CPU=x86-64
79+ CROSS_PREFIX=$TOOLCHAIN /bin/x86_64-linux-android-
80+ CC=$TOOLCHAIN /bin/x86_64-linux-android${ANDROID_API} -clang
81+ CXX=$TOOLCHAIN /bin/x86_64-linux-android${ANDROID_API} -clang++
82+ ;;
83+ esac
84+
85+ PREFIX=$WORK_DIR /android/$ABI
86+ mkdir -p $PREFIX
87+
88+ echo " Configuring FFmpeg for $ABI "
89+ ./configure \
90+ --prefix=$PREFIX \
91+ --enable-shared \
92+ --disable-static \
93+ --disable-doc \
94+ --disable-programs \
95+ --disable-everything \
96+ --disable-vulkan \
97+ --disable-ffmpeg \
98+ --disable-ffplay \
99+ --disable-ffprobe \
100+ --disable-avdevice \
101+ --disable-devices \
102+ --disable-hwaccels \
103+ --disable-dxva2 \
104+ --disable-vaapi \
105+ --disable-vdpau \
106+ --enable-protocol=file \
107+ --enable-decoder=h264,aac,mp3 \
108+ --enable-encoder=libx264,aac \
109+ --enable-parser=h264,aac \
110+ --enable-demuxer=mov,mp4,matroska \
111+ --enable-muxer=mp4,matroska \
112+ --enable-gpl \
113+ --enable-pic \
114+ --cross-prefix=$CROSS_PREFIX \
115+ --target-os=android \
116+ --arch=$ARCH \
117+ --cpu=$CPU \
118+ --cc=$CC \
119+ --cxx=$CXX \
120+ --enable-cross-compile \
121+ --sysroot=$TOOLCHAIN /sysroot \
122+ --extra-cflags=" -Os -fpic" \
123+ --extra-ldflags=" " || {
124+ echo " Configure failed for $ABI "
125+ return 1
126+ }
127+
128+ echo " Building FFmpeg for $ABI "
129+ make clean
130+ make -j$( nproc) || {
131+ echo " Make failed for $ABI "
132+ return 1
133+ }
134+ make install || {
135+ echo " Make install failed for $ABI "
136+ return 1
137+ }
138+ echo " Successfully built FFmpeg for $ABI "
139+ }
140+
141+ # Build only for specified architectures
142+ for ABI in armeabi-v7a arm64-v8a x86_64
143+ do
144+ echo " Starting build for $ABI ..."
145+ build_ffmpeg $ABI
146+ if [ $? -ne 0 ]; then
147+ echo " Build failed for $ABI "
148+ exit 1
149+ fi
150+ done
151+
152+ # Copy .so files to the project
153+ PROJECT_LIBS=" $WORK_DIR /android/project_libs"
154+ mkdir -p $PROJECT_LIBS
155+
156+ # Copy only for specified architectures
157+ for ABI in armeabi-v7a arm64-v8a x86_64
158+ do
159+ ABI_LIBS=" $PROJECT_LIBS /$ABI "
160+ mkdir -p $ABI_LIBS
161+ cp $WORK_DIR /android/$ABI /lib/* .so $ABI_LIBS / || {
162+ echo " Failed to copy .so files for $ABI "
163+ exit 1
164+ }
165+ done
166+
167+ echo " Build completed! .so files are in $PROJECT_LIBS "
168+ echo " Built architectures: armeabi-v7a arm64-v8a x86_64"
169+ echo " FFmpeg version: $FFMPEG_VERSION "
0 commit comments