【转】vlc android 代码编译
转自: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解压到一个目录下:
- $ sudo tar -xvf android-sdk_r20-linux.tgz
 
1.3 安装NDK
下载NDK:http://developer.android.com/tools/sdk/ndk/index.html
把NDK解压到一个目录下:
- $ sudo bzip2 -d android-ndk-r5b-linux-x86.tar.bz2
 - $ sudo tar -xvf android-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
解压:
- $ sudo tar -xvf apache-ant-1.8.4-bin.tar.gz
 
设置ant环境变量:
- $ sudo vim /etc/profile
 
在文件末尾添加:
- export ANT_HOME=/home/workenv/apache-ant-1.8.4
 - PATH=$PATH:/home/workenv/apache-ant-1.8.4
 
设置生效:
- $ source /etc/profile
 
检查一下是否安装成功:
- $ ant -version
 
应该显示:
- Apache Ant(TM) version 1.8.4 compiled on May 22 2012
 
1.5 安装eclipse:
- $ sudo cp eclipse-jee-indigo-SR1-linux-gtk.tar.gz ../workenv/
 - $ cd ../workenv/
 - $ sudo gzip -d eclipse-jee-indigo-SR1-linux-gtk.tar.gz
 - $ sudo tar -xvf eclipse-jee-indigo-SR1-linux-gtk.tar
 - $ sudo chmod 777 -R eclipse/
 - $ rm eclipse-jee-indigo-SR1-linux-gtk.tar
 
1.6 安装ADT插件
- $ ./eclips
 
启动Eclipse选择“Help”>“InstallNewSoftware...”
选择Add Name:ADT Location:http://dl-ssl.google.com/Android/eclipse/
选择:AndroidDDMS和AndroidDevelopmentTools
1.7 更新Android SDK API
- $ ./eclips
 
Windows > Preferences > Android > SDK Location
填入SDK的路径。
Windows > Android SDK Manger
选择 2.2 和 4.1
Install
2. 安装vlc依赖的其他库:
- $ sudo apt-get build-dep vlc
 
3. 编译
3.1 设置环境变量
- $ export ANDROID_SDK=/home/workenv/android-sdk-linux
 - $ export ANDROID_NDK=/home/workenv/android-ndk-r8
 - $ export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools如果是 ARMv7和以上并支持NEON的设备:
 - $ export ANDROID_ABI=armeabi-v7a
 
如果是 ARMv7和以上但是不支持NEON的设备:
- $ export ANDROID_ABI=armeabi-v7a
 - $ export NO_NEON=1
 
如何查看cpu类型和是否支持NEON?打开手机或者pad下的这个文件/proc/cpuinfo,会看到类似如下的内容:
- Processor : ARMv7 Processor rev 2 (v7l)
 - BogoMIPS : 998.36
 - Features : swp half thumb fastmult vfp edsp neon vfpv3
 - CPU implementer : 0x41
 - CPU architecture : 7
 - CPU variant : 0x3
 - CPU part : 0xc08
 - CPU revision : 2
 - Hardware : P1Lite Samsung Board
 - Revision : 0004
 - Serial : 0000000000000000
 
这里就能到ARMv7并支持neon,Features里有neon,就表示支持neon,否则不支持。
3.2 获取代码
- $ git clone git://git.videolan.org/vlc-ports/android.git
 - $ cd android
 
3.3 编译
- $ sh compile.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
- configure: error: C compiler cannot create executables
 - See `config.log' for more details.
 
找到config.log并打开:
- $ vim ./vlc/contrib/android/a52dec/config.log
 
发现这样一行提示错误:
- /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: No such file: No such file or directory
 
crtbegin_dynamic.o找不到,去NDK目录下找crtbegin_dynamic.o:
- $ find -name crtbegin_dynamic.o
 
找到很多:
- ./platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-14/arch-mips/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-3/arch-arm/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-9/arch-x86/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-9/arch-mips/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-9/arch-arm/usr/lib/crtbegin_dynamic.o
 - ./platforms/android-4/arch-arm/usr/lib/crtbegin_dynamic.o
 
查看一下权限
- $ ll ./platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o
 
发现普通用户没有读权限,应该就是这个原因了。改变ndk里文件权限:
- $ sudo chmod 755 -R android-ndk-r8
 
再编译:
- $ sh compile.sh
 
没有提示这个错误了。
4.2 ant错误
- /bin/sh: 1: ant: Permission denied
 
- $ ant -version
 
提示没有安装ant,已经安装了,重新设置一下环境就OK了:
- $ source /etc/profile
 
4.3
- BUILD FAILED
 - /home/workenv/android-sdk-linux/tools/ant/build.xml:518: Unable to resolve project target 'android-15'
 - $ vim vlc-android/project.properties
 
把15改成16,因为刚才我安装sdk api的时候只安装了8和16。
- $ vim vlc-android/AndroidManifest.xml
 
把android:targetSdkVersion="15"改成android:targetSdkVersion="16"
终于:BUILD SUCCESSFUL
后记:
由于之前编译过很多次,所以这次编译还算顺利。如果有朋友遇到vlc里的某些代码编译出错的问题,那么很可能是权限、git checkout、git am打补丁的问题。后续我会总结一些vlc android的代码架构方面的东西,也会长期学习、关注vlc,希望与大家一起交流。
【转】vlc android 代码编译的更多相关文章
- Android代码编译出现的错误
		
一.decoupled apps failed 解耦应用程序失败 2.每次编译时候一定先扩充内存 export JACK_SERVER_VM_ARGUMENTS="-Dfile.encod ...
 - Android代码编译环境配置 “Gerrit和Git环境配置”
		
Gerrit和Git环境配置可以参考<git&gerrit操作指导> 步骤1. 先在Gerrit中创建新的账户: 步骤2. 在新的客户端上生成密钥(可以使用的是生成的公钥): 步骤 ...
 - Ubuntu15.10 编译VLC Android(安卓)过程记录
		
持续更新中... 最后一次修改于 2016-03-20 15:33:45 1.必要库的安装 除基本编译环境(gcc.g++等外),需要额外安装如下的库(用于下载必要的依赖文件) (1)JDK 推荐安装 ...
 - 如何把iOS代码编译为Android应用
		
新闻 <iPhone 6/6 Plus中国销量曝光:单月销量650万>:据iSuppli Corp.中国研究总监王阳爆料,iPhone 6和iPhone 6 Plus在国内受欢迎的情况大大 ...
 - android studio上代码编译调试中遇到的一些异常记录
		
下面是记录的在平时代码编写或编译时的一些异常,答案有自己摸索出来的,也有参考其他程序猿朋友的,参考文章过多,就不一一贴出来了. ① E/JavaBinder: !!! FAILED BINDER TR ...
 - Android - 使用JD-GUI反编译Android代码
		
使用JD-GUI反编译Android代码 本文地址: http://blog.csdn.net/caroline_wendy Android程序出现Bug时,须要依据Bug寻找问题出错的地方; 须要使 ...
 - Mac下设置Android源代码编译环境
		
在Mac下编译Android最麻烦的就是设置Android的编译环境了,做完这一步基本上剩下的就是近乎傻瓜式的操作了.说起来也简单就三步,设置大小写敏感的文件系统.安装编译工具.设置文件系统同时能打开 ...
 - Android反编译(三)之重签名
		
Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...
 - Atitti.java android反编译解决方案-----虚拟机方案
		
Atitti.java android反编译解决方案-----虚拟机方案 哈哈,终极解决方案是虚拟机...c++也可以反编译为汇编代码,但无需担心,因为读懂汇编太麻烦..只要不能拿到c++源码就可.. ...
 
随机推荐
- Beyond Compare 忽略两个文件内容的顺序比较文件内容(xjl456852原创)
			
有时两个文件内容的顺序是不固定的,对比时需要忽略文件顺序进行对比. 可以这样设置: 点击菜单下面工具栏按钮: 点击Format旁的三角,选择Sorted,就会按文件的顺序排序比较.忽略了文件内容顺序的 ...
 - 关于ionic的一些坑(2)
			
如果你通过查阅相关文档,ionic的项目框架已经搭好,下面我来总结一下我在项目中所遇到的坑,给还没踩过的人以方便,给自己以勉励: (1)关于android和ios的适配 因为ionic默认的tabs状 ...
 - 关于Go语言共享内存操作的小实例
			
<strong style="margin: 0px; padding: 0px; border: 0px; font-size: 15px; font-weight: bold; c ...
 - Building bridges_hdu_4584(排序).java
			
Building bridges Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
 - Oracle用户解锁的三种办法及默认的用户与密码
			
ORA-28000: the account is locked-的解决办法 2009-11-11 18:51 ORA-28000: the account is locked 第1步:使用PL/SQ ...
 - [CSAPP笔记][第十一章网络编程]
			
第十一章 网络编程 我们需要理解基本的客户端-服务端编程模型,以及如何编写使用因特网提供的服务的客户端-服务端程序. 最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web服务器,能够为真 ...
 - asp.net服务器向客户端弹出对话框,但不使页面边白板
			
1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; 5: ...
 - FpSpread添加表头(列名)标注
			
for (int j = 0; j < fp.ActiveSheetView.ColumnCount; j++) { fp.ActiveSheetView.ColumnHeader.Cells[ ...
 - 决策树简单介绍(二) Accord.Net中决策树的实现和使用
			
决策树介绍 决策树是一类机器学习算法,可以实现对数据集的分类.预测等.具体请阅读我另一篇博客(http://www.cnblogs.com/twocold/p/5424517.html). Accor ...
 - JSONP有什么作用
			
1.解决跨域访问数据 由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名.协议.端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求 ...