-
编译环境
操作系统:Ubuntu 18.04.4 LTS
vlc-android版本:3.3.0 RC1 version(ae229f1ea380cd8ebc74794c9a433dd5bd5a4016)
android-sdk版本:未知(安装过android-studio)
android-ndk版本:r21b -
配置环境变量
export ANDROID_SDK=/home/topsluo/Android/Sdk
export ANDROID_NDK=/home/topsluo/android-ndk-r21b
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${ANDROID_SDK}/platform-tools:${ANDROID_SDK}/tools:${JAVA_HOME}/bin -
安装依赖库
sudo apt install automake ant autopoint cmake build-essential libtool-bin \
patch pkg-config protobuf-compiler ragel subversion unzip git \
openjdk-8-jre openjdk-8-jdk flex python wget
- 下载源码
这里可以根据自己的需求,下载对应的版本
git clone https://github.com/videolan/vlc-android.git
- 编译打包
cd vlc-android && ./buildsystem/compile.sh
其实,以上步骤在官网上都有介绍,我这里只是照抄了一遍(详情)。
一般来说,按照上面的步骤是不能一次性通过的,中间多少会出现一些问题,所以,接下来我把过程中碰到的一些主要问题列出来,及如何解决,做个记录。
注意:执行./buildsystem/compile.sh -h的时候,说加上-a all 参数时可以编译出全平台的aar包,但我操作的时候虽然出现全了平台的aar(libvlc-all-${VERSION}.aar),但解压发现,里面缺少一些.so库,导致无法正常使用。而仅编译arm或者arm64的时候则不会少.so库。所以我单独把各种ABI版本都打包了一次,然后解压、合并、再打包成全平台的aar包(虽然办法笨了一些,但至少这样可以解决我的问题),或许你知道怎么解决,欢迎留言。
- TroubleShooting
- 问题1
configure.ac:1: error: possibly undefined macro: dnl
If this token and others are legitimate, please use
m4_pattern_allow.
See the Autoconf documentation.
configure.ac:27: error: possibly undefined macro: AS_IF
configure.ac:41: error: possibly undefined macro: AC_DEFINE
configure.ac:78: error: possibly undefined macro: AC_MSG_ERROR
configure.ac:81: error: possibly undefined macro: AC_MSG_WARN
configure.ac:181: error: possibly undefined macro: AC_ARG_ENABLE
configure.ac:379: error: possibly undefined macro: AC_CHECK_LIB
configure.ac:449: error: possibly undefined macro: AC_CHECK_HEADERS
configure.ac:2089: error: possibly undefined macro: AC_PATH_PROG
configure.ac:5094: error: possibly undefined macro: AC_PATH_PROGS
解决办法,这是sunStd博主的解决办法,感谢!
- 问题2
aclocal-1.15: command not found
解决办法:
(或许你真的没有安装它,那就去安装啊),找到是编译哪个源码的时候报的错,进行源码目录,然后执行命令:
autoreconf -ivf
- 问题3
java/lang/NoClassDefFoundError: java/lang/Object 错误:
安装完JDK ,设定环境变量后出现这个错误:
[root@localhost lib]# javac
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
[root@localhost lib]# java
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
解决办法:
#/opt/jdk1.6.0_15/lib/ tools.pack 转为 tools.jar
unpack200 tools.pack tools.jar
#/opt/jdk1.6.0_15/jre/lib/rt.pack 转为 rt.jar
unpack200 rt.pack rt.jar
- 问题4
fix error: syntax error near unexpected token `Z,zlib,`
解决办法:
升级pkg-config
- 问题5
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
autoreconf: configure.in: tracing
autoreconf: configure.in: not using Libtool
autoreconf: running: /home/heda/adt-bundle/android/vlc/extras/tools/build/bin/autoconf --include=/home/heda/adt-bundle/android/vlc/contrib/arm-linux-androideabi/share/aclocal --force
configure.in:74: error: possibly undefined macro: AC_DISABLE_SHARED
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.in:75: error: possibly undefined macro: AC_LIBTOOL_WIN32_DLL
configure.in:76: error: possibly undefined macro: AC_PROG_LIBTOOL
autoreconf: /home/heda/adt-bundle/android/vlc/extras/tools/build/bin/autoconf failed with exit status: 1
make: *** [.a52] Error 1
解决办法:
升级libtool
- 问题6
/usr/bin/install: cannot stat '../../share/vlc.appdata.xml': No such file or directory
Makefile:1354: recipe for target 'install-appdataDATA' failed
解决办法:
cp vlc/share/vlc.appdata.xml.in.in vlc/share/vlc.appdata.xml
- 问题7
make[1]: Entering directory '/home/topsluo/workspace/GitHub/vlc-android/vlc/contrib/contrib-android-arm-linux-androideabi/gnutls/gl'
cd .. && /bin/bash /home/topsluo/workspace/GitHub/vlc-android/vlc/contrib/contrib-android-arm-linux-androideabi/gnutls/build-aux/missing automake-1.16 --gnits gl/Makefile
configure.ac:31: error: version mismatch. This is Automake 1.16.2,
解决办法:
'/home/topsluo/workspace/GitHub/vlc-android/vlc/contrib/contrib-android-arm-linux-androideabi/gnutls && aclocal -I /usr/share/aclocal
当然,想要编译vlc-android,有些资源在国内是无法正常下载的!