關于cmake語法,請參考這篇文章十三、cmake語法
build_android.sh-->configure-->makefile-->*.so
一、下載NDK
NDK Dowloads
android-ndk-r14b-linux-x86_64.zip
1.1 命令行下載
wget https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
wget url (該命令默認下載到當前目錄)
wget -o new_file_name url (使用參數-o來指定一個文件名,以新的文件名保存)
1.2 解壓
unzip android-ndk-r14b-linux-x86_64.zip
or for (*.tar.bz2)
tar -jxvf android-ndk-r14b-linux-x86_64 .tar.bz2
如果沒有安裝unzip,則需要通過以下命令安裝:
apt-get install unzip
二、下載解壓ffmpeg
2.1 下載FFmpeg源文件2.6.9的版本
wget http://ffmpeg.org/releases/ffmpeg-2.6.9.tar.gz
tar -xzvf ffmpeg-2.6.9.tar.gz
2.2 修改權限
chmod 777 -R ffmpeg-2.6.9
三、配置NDK環境變量
對當前用戶進行環境變量配置
3.1 編輯.bashrc文檔,添加ndk路徑,配置環境變量
cd ~ (進入當前用戶Home目錄)
vim ~/.bashrc
在.bashrc最后添加:
export NDK_ROOT = /usr/chiang/ndk/android-ndk-r14b
export PATH=$NDK_ROOT:$PATH
3.2 執行.bashrc更新環境變量
source ~/.bashrc
3.3 驗證ndk環境是否配置成功
ndk-build -v
四、編譯FFmpeg
4.1 編寫shell 腳本文件:build_android.sh
#!/bin/bash
make clean
export NDK=/usr/chiang/ndk/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
注意:./configure --target-os=linux \ "\"的作用是換行,所有"\"后面不能有空格
4.2 調用執行./build_android.sh開始進行編譯
chmod 777 -R build_android.sh
./build_android.sh
初次編譯后,生成so文件有問題:
解決方法:修改中/usr/chiang/ffmpeg/ffmpeg-2.6.9/configure的配置
具體修改:
#Line2779
#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
#By Chiang START
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
#By Chiang END
再次編譯的結果:
雖然初次編譯的so文件像libavcodec.so.56,在Linux中是可以正常加載的,但是在Android中則不能正常加載,所以需要修改so文件名的生成規則,使其生成為libavcodec.56.so,以方便在Android開發中的使用。