Google 8.1号开始强制必须支持64位。之前的版本源码是不支持的。
WebRtc最重要的支持库之一就是ffmpeg了,我这边祖传代码是2.8.4的版本。后面的版本编译脚本基本上通用的。
这里附上我可以运行的脚本:
#!/bin/bash
NDK=../Android/android-ndk-r10e
ADDI_CFLAGS="-fPIE -pie"
ADDI_LDFLAGS="-fPIE -pie"
configure()
{
CPU=$1
PREFIX=$(pwd)/android/$CPU
x264=$(pwd)/x264/android/$CPU
HOST=""
CROSS_PREFIX=""
SYSROOT=""
ARCH=""
ANDROID=""
if [ "$CPU" == "armv7-a" ]
then
ANDROID="androideabi"
ARCH="arm"
HOST=arm-linux
SYSROOT=$NDK/platforms/android-21/arch-arm/
CROSS_PREFIX=$NDK/toolchains/arm-linux-$ANDROID-4.9/prebuilt/linux-x86_64/bin/arm-linux-$ANDROID-
else
ARCH="aarch64"
ANDROID="android"
HOST=aarch64-linux
SYSROOT=$NDK/platforms/android-21/arch-arm64/
CROSS_PREFIX=$NDK/toolchains/aarch64-linux-$ANDROID-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-$ANDROID-
fi
echo "CROSS_PREFIX = $CROSS_PREFIX"
./configure \
--target-os=android \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--cc=$NDK/toolchains/$ARCH-linux-android-4.9/prebuilt/linux-x86_64/bin/$ARCH-linux-$ANDROID-gcc \
--cross-prefix=$CROSS_PREFIX \
--nm=$NDK/toolchains/$ARCH-linux-android-4.9/prebuilt/linux-x86_64/bin/$ARCH-linux-$ANDROID-nm \
--extra-cflags=" -O3 " \
--enable-shared \
--enable-static \
--extra-ldflags="-Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -nostdlib -lc -lm -ldl -llog" \
--disable-everything \
--disable-ffplay \
--enable-demuxer=mov \
--enable-demuxer=h264 \
--enable-protocol=file \
--enable-avformat \
--enable-avcodec \
--enable-decoder=rawvideo \
--enable-decoder=mjpeg \
--enable-decoder=h263 \
--enable-decoder=mpeg4 \
--enable-decoder=h264 \
--enable-parser=h264 \
--disable-network \
--enable-zlib \
--enable-avfilter \
--disable-avdevice \
--enable-ffmpeg \
--arch=$ARCH \
--sysroot=$SYSROOT \
--extra-ldflags="-L$x264/lib"
}
build()
{
make clean
cpu=$1
echo "build $cpu"
configure $cpu
make -j4
make install
}
//这里是选择编译版本64位或者32位
build arm64
#build armv7-a
注释:第二行是NDK路径,比较重要的参数是target-os,指定的是编译的平台,只有linux和android;decoder是编码格式,选择自己需要的就可以了,prefix是编译库的路径,extra-cflags是声明一些参数,O3是报错等级(其他的是我这边其它的要求不做解释)。
直接复制到根目录下,运行脚本就可以了,最后的编译完成会在目录 Android下生成arm64或者armv7-a的文件夹,在文件夹中的lib中会有对应的动态库。
image.png附:linux查看动态库是不是64位可以执行
objdump -a 文件.a/.so
出现下面的elf64就是64位的库
image.png
网友评论