转:http://blog.chinaunix.net/uid-26611383-id-3678766.html

由于项目需要,需要一个在android平台能够支持RTSP协议的播放器,由于之前没有android平台的经验,所以找了著名的video LAN的VLC播放器,更令人惊奇的是这款播放器居然还是完全开源的。在此向那些开源软件的作者和组织致以崇高的敬意,是你们的存在使得计算机软件产业蓬勃发展,你们帮助了很多囊中羞涩的个人和企业,让他们也有机会用上高质量的软件,同时不可避免的吸引了一批有志之士加入到你们的行业。

既然有现成的代码,所以就想编译一下vlc for android的代码,经过几天的折腾,终于编译成功,并在android平台上成功运行,期间查了很多资料,也遇到很到问题,在这里做个总结,也真心希望会给大家一些帮助,如果大家有这方面的问题,欢迎给我留言,只要能力所及,有时间一定会给出答案,一起学习。

这几天一直在做vlc ndroid源代码编译和移植的工作,首先说一下编译android源码需要注意的几个问题:

1.      Linux平台,我用的是ubuntu12.04, 编译vlc for android源代码时最好是在最新的平台上,我之前在ubuntu10.04上编译过,遇到过很多问题,其中的大部分问题都是软件版本过低,不满足要求,最后干脆换到12.04,之前的很多问题就不会再现了。

2.      最好切换到root用户来编译,否则中间会出现很多permission denied类似的问题,就是没有权限执行一些脚本和创建一些文件

3.      编译时不可避免的遇到一些问题,甚至出错而导致编译终止,此时一定要查看打印出来的提示或者系统log,大多数问题都是很容易解决的,切忌心浮气躁。

好了,下面说一下我具体的编译步骤,网上很多网友也提到了,大体就是那些步骤,可能那些步骤都是针对之前的vlc for android版本的,略微会存在一些差别。
  在64位系统下要注意安装32位系统的库文件,我发现我下载64位sdk文件里面的adb还是32位的,所以需要安装32位的库,否则64位的ubuntu是不能与运行32位程序的。

一: 安装android SDK, NDK, JDK三个工具,SDK是android系统用的,有些SDK还包含了eclipse,

NDK是用来编译C/C++代码的,这样使得android应用程序可能通过java来调用c/c++程序、JDK不用说,是java运行必须的环境。

JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html

SDK: http://developer.android.com/sdk/index.html

NDK: http://developer.android.com/tools/sdk/ndk/index.html

下载最新的版本,并解压到你的工作目录下。

二: 根据第一步解压的三个工具,配置这三个工具的环境变量(PATH),方法很多,可以修改~/.bashrc /etc/profile等等,这一步一定要正确,否则系统会找不到这三个工具,后面的编译会用到这几个工具,当然也就会出错了,因为系统默认不知道这几个程序的位置,这跟windows下的环境变量一个道理。为了验证环境变量是否配置正确,可以到别的目录下运行这几个程序,比如到根目录下看能否运行ndk-build adb等程序,或者echo $PATH打印一下当前的环境变量并验证。这一步很简单,貌似说的废话有点多。下面是我添加的环境变量,需要根据个人情况加以修改,XXXX代表以上三个程序的解压目录。

export PATH=XXXX /sdk/platform-tools:XXXX/android-ndk-r8e:$PATH

export JAVA_HOME=XXXX/jdk1.7.0_21

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

三:下载vlc依赖的库文件和一些要用到的工具

Sudo apt-get install git-core

Sudo apt-get install ant

Sudo apt-get install libtool

Sudo apt-get install cmake

Sudo apt-get install autopoint

四:设置编译时候要用到的变量,生成的Makefile会用到这些变量

export ANDROID_SDK=XXXX/sdk

export ANDROID_NDK=XXXX/android-ndk-r8e

export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools

export ANDROID_ABI=armeabi-v7a

注意:最后export ANDROID_ABI=armeabi-v7a这一步需要根据各个android平台而定,可以执行adb shell 链接到android平台,然后cat  /proc/cpuinfo 查看一下自己的平台是否为armv7的,是否支持neon,然后根据情况修改

五:获取配置代码

git clone git://git.videolan.org/vlc-ports/android.git

然后进入到android目录,执行./compile.sh,这个脚本会执行所有的获取vlc源代码,各种依赖文件,编译所需要的工具, 最后编译,生成so文件,最后生成apk文件。不过执行这个脚本不出意外的会出现各种问题,要不然编译这个android代码也太easy了。根据出错的提示加以解决,大部分都是给出的文件的下载链接错误,还有权限问题。这个过程会经历很长时间,一般几个小时,因为下载的速度很慢,是脚本所给链接的服务器问题。可以将这些文件下载好放到vlc/contrib/tarballs目录中,大概包括下面这些安装包

最后会BUILD SUCCESSFULL ,本来准备把编译生成的动态库so和apk文件放到这里供大家下载的,可是这些文件都比较大,一般都好几M有的几十M,大家还是多折腾一下,只要下决心,最后肯定会编译成功的。

备注:按照上面的步骤,我自己在编译的时候,碰到的问题及查询相关资料汇总:

  1、编译中出现错误:reconf autoconf failed。 在stackoverflow上,有人说要把ubuntu12.04换到ubuntu13.04才能成功,我安装ubuntu13.04,重新编译vlc for android,仍然出现这个问题(娘的,花了我一天时间安装、编译),后来在我在“http://blog.csdn.net/gfocean/article/details/5266847”博客中了解到,要安装在ubuntu下“libtool.deb”,然后再编译,问题解决。

2、vlc for android的编译有官方文档,写的很详细:https://wiki.videolan.org/AndroidCompile/ 。 vlc for android的源码在:http://git.videolan.org/

3、编译vlc for android时,要用到linux android19 sdk,而下载地址dl-ssl.google.com被封了,这时我用了站长工具网站中的超级PING功能,找到可以访问dl-ssl.google.com的ip地址,放到hosts文件中映射一下,之后在ubuntu上启动sdk manager工具,选择android19 sdk下载就ok了。

    4、编译vlc for android时,碰到一些安装包无法下载的问题,此时可以手动翻墙下载这些安装包,把它们放到相应的位置即可(通过打印出的log可以知道位置)。

5、在安装ubuntu13.04后,使用apt-get install openssh-server,提示找不到地址,后来我把系统中的apt-get源更新了一下,再使用命令才安装成功。可参考 http://www.cnblogs.com/zhangpengshou/p/3591387.html

相信大家都能编译成功,我是第一次编译出专业的共享库文件,还是很有成就感的。

Linux下编译VLC for Android源代码总结的更多相关文章

  1. 【失败的经验】在linux下编译opencv for android

    cd /home/ahfu#选择opencv 3.4.6版本来编译wget https://github.com/opencv/opencv/archive/3.4.6.tar.gztar -zxvf ...

  2. Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.

    Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img. 2014年10月20日 ⁄ 计算机视觉 ⁄ 共 1 ...

  3. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  4. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

  5. ubuntu下编译VLC

    ubuntu下编译VLC 标签(空格分隔): ubuntu vlc 视频 编译 [TOC] 1.下载VLC源码包并解压 VLC的源码包在VLC的官网有,可以直接下载.也可以使用git来clone一个. ...

  6. linux下编译eXosip、osip,以及UAC和UAS的例子

    从网站上看到了这样的一篇博文 :Windows下编译eXosip.osip,以及UAC和UAS的例子 (链接:http://www.cnblogs.com/dyllove98/archive/2013 ...

  7. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  8. [转载]linux下编译php中configure参数具体含义

    编译N次了   原来这么回事 原文地址:linux下编译php中configure参数具体含义作者:捷心特 php编译参数的含义 ./configure –prefix=/usr/local/php ...

  9. Linux下编译GDAL

    一.准备工作 从官网下载GDAL.PROJ.4和GEOS,将其存放在/home/liml/Work/3rdPart目录并解压,如下图所示.下载地址请自行Google.注:使用的系统是CentOS6.4 ...

随机推荐

  1. C# Func和匿名方法 简单使用

    今天敲代码遇见一个问题,解决中用到了C#的Func和匿名方法,发现挺好用的 定义一个这样的方法可以避免重复写try catch 这里用到了Func<int,string> ,它其实就是一个 ...

  2. spark在不同环境下的搭建|安装|local|standalone|yarn|HA|

    spark的集群环境安装搭建 1.spark local模式运行环境搭建 常用于本地开发测试,本地还分为local单线程和local-cluster多线程; 该模式被称为Local[N]模式,是用单机 ...

  3. NX二次开发-如何在类外面定义一个结构体

    #include <uf.h> #include <uf_obj.h> #include <uf_part.h> using namespace NXOpen; u ...

  4. 牛客多校第六场 D move 枚举/机智题

    题意: 有个家伙装东西,他的策略是贪心,每次装进去这个盒子能装下的最大的东西,直到把这个盒子装满,再去装下一个盒子. 给出盒子的数量k和一些东西的重量,问你最小需要多大的盒子才能以这种贪心策略装下. ...

  5. Java习题10.25

    Java习题10.25 1. 实际上这道题考查的是两同两小一大原则: 方法名相同,参数类型相同 子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类 ...

  6. 洛谷P3959——宝藏

    传送门:QAQQAQ 题意: 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了$n$个深埋在地下的宝藏屋, 也给出了这$n$个宝藏屋之间可供开发的$m$条道路和它们的长度. 小明决心亲自前往挖掘所有 ...

  7. PAT_A1004#Counting Leaves

    Source: PAT A1004 Counting Leaves (30 分) Description: A family hierarchy is usually presented by a p ...

  8. LeetCode刷题笔记-回溯法-组合总和问题

    题目描述: <组合总和问题>给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. cand ...

  9. Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...

  10. 17-Ubuntu-文件和目录命令-切换目录-相对路径和绝对路径

    1.相对路径: 在输入路径时,最前面不是/或者~,表示相对当前目录所在的目录位置. 例:当前桌面目录下,通过相对路径切换到桌面目录下的Entertainment目录 2.绝对路径: 在输入路径时,最前 ...