转自:http://blog.csdn.net/asircao/article/details/7734201

系统:ubuntu12.04
代码:git://git.videolan.org/vlc-ports/android.git
代码版本:375646994d0602

年初的时候搞了三个月的vlc android。昨天看到vlc android的beta版本发布了,决定编译一个看看效果。把自己此次的编译过程记录下来,供朋友们参考。下文中的文件路径,要替换成正确的路径。

1. 搭建ubuntu android开发环境
要找一个自己喜欢的目录安装jdk、SDK、NDK、ANT
1.1 安装jdk
参考我转发的《Ubuntu11.10下安装 jdk-6u30-linux-i586.bin》

1.2 安装SDK
下载SDK:http://developer.android.com/sdk/index.html
把SDK解压到一个目录下:

[plain] view plain copy
  1. $sudotar-xvfandroid-sdk_r20-linux.tgz


1.3 安装NDK
下载NDK:http://developer.android.com/tools/sdk/ndk/index.html
把NDK解压到一个目录下:

[plain] view plain copy
  1. $sudobzip2-dandroid-ndk-r5b-linux-x86.tar.bz2
  2. $sudotar-xvfandroid-ndk-r5b-linux-x86.tar


1.4 安装ANT
下载ANT:http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.8.4-bin.tar.gz
解压:

[plain] view plain copy
  1. $sudotar-xvfapache-ant-1.8.4-bin.tar.gz

设置ant环境变量:

[plain] view plain copy
  1. $sudovim/etc/profile

在文件末尾添加:

[plain] view plain copy
  1. exportANT_HOME=/home/workenv/apache-ant-1.8.4
  2. PATH=$PATH:/home/workenv/apache-ant-1.8.4

设置生效:

[plain] view plain copy
  1. $source/etc/profile

检查一下是否安装成功:

[plain] view plain copy
  1. $ant-version

应该显示:

[plain] view plain copy
  1. ApacheAnt(TM)version1.8.4compiledonMay222012


1.5 安装eclipse:

[plain] view plain copy
  1. $sudocpeclipse-jee-indigo-SR1-linux-gtk.tar.gz../workenv/
  2. $cd../workenv/
  3. $sudogzip-declipse-jee-indigo-SR1-linux-gtk.tar.gz
  4. $sudotar-xvfeclipse-jee-indigo-SR1-linux-gtk.tar
  5. $sudochmod777-Reclipse/
  6. $rmeclipse-jee-indigo-SR1-linux-gtk.tar


1.6 安装ADT插件

[plain] view plain copy
  1. $./eclips

启动Eclipse选择“Help”>“InstallNewSoftware...”
选择Add Name:ADT Location:http://dl-ssl.google.com/Android/eclipse/
选择:AndroidDDMS和AndroidDevelopmentTools

1.7 更新Android SDK API

[plain] view plain copy
  1. $./eclips

Windows > Preferences > Android > SDK Location
填入SDK的路径。
Windows > Android SDK Manger
选择 2.2 和 4.1
Install

2. 安装vlc依赖的其他库:

[plain] view plain copy
  1. $sudoapt-getbuild-depvlc


3. 编译
3.1 设置环境变量

[plain] view plain copy
  1. $exportANDROID_SDK=/home/workenv/android-sdk-linux
  2. $exportANDROID_NDK=/home/workenv/android-ndk-r8
  3. $exportPATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools如果是ARMv7和以上并支持NEON的设备:
  4. $exportANDROID_ABI=armeabi-v7a

如果是 ARMv7和以上但是不支持NEON的设备:

[plain] view plain copy
  1. $exportANDROID_ABI=armeabi-v7a
  2. $exportNO_NEON=1

如何查看cpu类型和是否支持NEON?打开手机或者pad下的这个文件/proc/cpuinfo,会看到类似如下的内容:

[plain] view plain copy
  1. Processor:ARMv7Processorrev2(v7l)
  2. BogoMIPS:998.36
  3. Features:swphalfthumbfastmultvfpedspneonvfpv3
  4. CPUimplementer:0x41
  5. CPUarchitecture:7
  6. CPUvariant:0x3
  7. CPUpart:0xc08
  8. CPUrevision:2
  9. Hardware:P1LiteSamsungBoard
  10. Revision:0004
  11. Serial:0000000000000000

这里就能到ARMv7并支持neon,Features里有neon,就表示支持neon,否则不支持。

3.2 获取代码

[plain] view plain copy
  1. $gitclonegit://git.videolan.org/vlc-ports/android.git
  2. $cdandroid


3.3 编译

[plain] view plain copy
  1. $shcompile.sh

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库。

4 解决编译过程中遇到的问题
4.1 错误 C compiler cannot create executables

[plain] view plain copy
  1. configure:error:Ccompilercannotcreateexecutables
  2. See`config.log'formoredetails.

找到config.log并打开:

[plain] view plain copy
  1. $vim./vlc/contrib/android/a52dec/config.log

发现这样一行提示错误:

[plain] view plain copy
  1. /home/workenv/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/http://www.cnblogs.com/http://www.cnblogs.com/arm-linux-androideabi/bin/ld:crtbegin_dynamic.o:Nosuchfile:Nosuchfileordirectory

crtbegin_dynamic.o找不到,去NDK目录下找crtbegin_dynamic.o:

[plain] view plain copy
  1. $find-namecrtbegin_dynamic.o

找到很多:

[plain] view plain copy
  1. ./platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o
  2. ./platforms/android-14/arch-mips/usr/lib/crtbegin_dynamic.o
  3. ./platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o
  4. ./platforms/android-3/arch-arm/usr/lib/crtbegin_dynamic.o
  5. ./platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o
  6. ./platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o
  7. ./platforms/android-9/arch-x86/usr/lib/crtbegin_dynamic.o
  8. ./platforms/android-9/arch-mips/usr/lib/crtbegin_dynamic.o
  9. ./platforms/android-9/arch-arm/usr/lib/crtbegin_dynamic.o
  10. ./platforms/android-4/arch-arm/usr/lib/crtbegin_dynamic.o

查看一下权限

[plain] view plain copy
  1. $ll./platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o

发现普通用户没有读权限,应该就是这个原因了。改变ndk里文件权限:

[plain] view plain copy
  1. $sudochmod755-Randroid-ndk-r8

再编译:

[plain] view plain copy
  1. $shcompile.sh

没有提示这个错误了。

4.2 ant错误

[plain] view plain copy
  1. /bin/sh:1:ant:Permissiondenied
[plain] view plain copy
  1. $ant-version

提示没有安装ant,已经安装了,重新设置一下环境就OK了:

[plain] view plain copy
  1. $source/etc/profile


4.3

[plain] view plain copy
  1. BUILDFAILED
  2. /home/workenv/android-sdk-linux/tools/ant/build.xml:518:Unabletoresolveprojecttarget'android-15'
  3. $vimvlc-android/project.properties

把15改成16,因为刚才我安装sdk api的时候只安装了8和16。

[plain] view plain copy
  1. $vimvlc-android/AndroidManifest.xml

把android:targetSdkVersion="15"改成android:targetSdkVersion="16"
终于:BUILD SUCCESSFUL

后记:
由于之前编译过很多次,所以这次编译还算顺利。如果有朋友遇到vlc里的某些代码编译出错的问题,那么很可能是权限、git checkout、git am打补丁的问题。后续我会总结一些vlc android的代码架构方面的东西,也会长期学习、关注vlc,希望与大家一起交流。

更多相关文章

  1. 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决 (an
  2. Android 7.1 触摸事件代码跟踪
  3. android 开发中将十六进制 颜色代码 转换为int类型数值 方法 :
  4. TextView --- 内容设置成上下滑动 和 代码设置字体颜色
  5. Android Phone进程启动过程
  6. android微博客户端源代码

随机推荐

  1. PHP-Ajax实现异步上传图片到新浪图床
  2. 10 个 PHP 常见安全问题(实例讲解)
  3. nginx禁止指定目录运行php
  4. PHP-xml & jsonp转数组的方法
  5. 如何开启mysql和php慢日志
  6. php读取大文件的行数的方法
  7. PHP获取字符串中字符、字符串第n次出现的
  8. 用php输出一个数组中的偶数或奇数的方法
  9. 如何隐藏php版本信息
  10. PHP-curl通过GET或POST方式实现http及htt