一、准备工作
安装所有必需的软件
# apt-get install apache-ant(or ant) autoconf automake autopoint libtool gawk(or nawk) gcc g++ pkg-config cmake patch subversion git
ant工具在最后编译android源码生成apk文件会用到,所以需要安装。并且这里需要1.8及以上版本(apt-get install ant1.8)。如果是手动安装ant,需要在环境变量中配置好ant的path,或者在进行编译之前在命令行执行export PATH=$PATH:/xxx/ant/bin,保证可以在执行编译的命令行中执行ant命令即可。
除了以上软件/工具之外,还有两个必须的工具,就是Android的SDK和NDK。SDK和NDK的安装方法就不再详述了,网上有很多安装方法的文章。这里需要注意的是,需要安装android4.0及以上的一个SDK包,vlc- android(0.0.5)编译时需要4.0的界面元素。
当然为了在Eclipse中开发C/C++,还可以安装 CDT。
二、环境变量配置
配置ANDROID_SDK
# export ANDROID_SDK=/root/program/android-sdk-linux(请把path改为自己的路径)
配置ANDROID_NDK
# export ANDROID_NDK=/root/program/android-ndk-linux
配置PATH变量
# export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
配置jdk(不在详述)
配置NEON相关信息(一般编译的时候,会编译NO_NEON和支持NEON两种包出来)
# export NO_NEON=1
如果设备不支持NEON技术,请务必配置此项;如果机器支持NEON技术,可以不用配置此项。关于NEON的简单信息:根据维基百科英文版ARM架构 中的介绍,Cortex-A8架构的设备,均支持NEON技术,而在Cortex-A9架构的设备中,则是可选的。更多信息,请参考:
http://www.arm.com/zh/products/processors/technologies/neon.php
http://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29
配置ABI
# export ANDROID_ABI=armeabi-v7a
三、获取源码
# git clone git://git.videolan.org/vlc-ports/android.git
源码下载完成后,需将源码直接放置在根目录下,否则后续的编译过程中会出现找不到库文件的错误。
四、编译源码
下载完成后,如果没有进行前面的环境变量的配置,进入android文件夹将compile.sh文件中相应的环境变量的路径信息修改为自己的pash,保存后执行sh compile.sh,开始自动编译。
在编译过程中会下载各种vlc-android需要的依赖包,此过程较漫长,每次如果遇到下载失败,可以重新执行该命令。
compile.sh的执行过程,就是整个的编译过程,大致过程如下:
a. 下载vlc代码:compile.sh的42行 git clone git://git.videolan.org/vlc.git vlc。
b. 并check out vlc代码到e75d2024这个版本:compile.sh的44行 git checkout -B android
${TESTED_HASH}
c. 编译所有需要的第三方库,先下载再编译,这个过程需要很长时间,还可能下载不成
功,如果无法下载某些库,就手动下载下来,并放到这个目录下即可:
android/vlc/contrib/tarballs。
d. vlc的Configuring。
e. vlc的编译。
f. 编译android部分代码并链接vlc so库。
附:编译过程中可能遇到的问题
1,checking host system type... Invalid configuration `arm-linux-androideabi': system `androideabi' not recognized
configure: error: /bin/bash autotools/config.sub arm-linux-androideabi failed
解决办法:到http://git.savannah.gnu.org /gitweb/?p=config.git;a=tree下载最新的包并解压得到config.guess和config.sub两个文件,将此两个文件拷贝到/usr/share/misc目录下覆盖,重新执行编译命令。
2,jni/libvlcjni.c: In function 'read_track_info_internal':
jni/libvlcjni.c:797:57: error: 'libvlc_media_track_info_t' has no member named 'psz_language'
jni/libvlcjni.c:803:69: error: 'struct ' has no member named 'f_frame_rate'
解决办法:找到文件android/vlc-android/jni /libvlcjni.c,并将该两行注释掉即可,然后重新执行编译命令。
3, BUILD FAILED
/androidApp/android-sdk-linux/tools/ant/build.xml:569: The following error occurred while executing this line:
/androidApp/android-sdk-linux/tools/ant/build.xml:517: Unable to resolve project target 'android-16'
解决办法:这里根据自己所安装的SDK包进行更改android/vlc- android/project.properties, android/java-libs/SlidingMenu/project.properties, android/java-libs/ActionBarSherlock/project.properties文件中的 android-x,但是对于vlc-android0.0.5版本的一定是4.0及以上版本(因为0.0.5版本的界面需要4.0及以上的特性)所以这里一定是14及以上,否则还会报错error: Error retrieving parent for item: No resource found that matches the given name'android:Widget.Holo.ActionBar'.
编译时只是这里需要4.0这个包的界面特性,但是不影响最终生成的APK的运行目标(只要不调用4.0及以上的API),比如我这里在AndroidManifest.xml中可以设置
重新执行编译命令。
4,导入Eclipse时注意除了vlc-android工程外还需要导入另外两个依赖的工程即android/java-libs目录下的SlidingMenu和ActionBarSherlock两个工程,否者会报错。
如果编译过程中出现其它错误,请根据错误提示安装对应的工具(或者在执行编译之前就把第一步提到的工具全部安装好),部分错误也可参考
http://blog.chinaunix.net/uid-25885064-id-3357019.html。
最后提示BUILD SUCESSFUL,说明编译成功了,在android/vlc-android/bin目录下会生成一个apk文件,可以直接拿来安装。如果想自己调整界面部分,或者添加、修改其它功能,可以直接把项目导入eclipse进行开发。
参考文献:http://wiki.videolan.org /AndroidCompile