【转】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解压到一个目录下:

  1. $ sudo tar -xvf android-sdk_r20-linux.tgz

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

  1. $ sudo bzip2 -d android-ndk-r5b-linux-x86.tar.bz2
  2. $ 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
解压:

  1. $ sudo tar -xvf apache-ant-1.8.4-bin.tar.gz

设置ant环境变量:

  1. $ sudo vim /etc/profile

在文件末尾添加:

  1. export ANT_HOME=/home/workenv/apache-ant-1.8.4
  2. PATH=$PATH:/home/workenv/apache-ant-1.8.4

设置生效:

  1. $ source /etc/profile

检查一下是否安装成功:

  1. $ ant -version

应该显示:

  1. Apache Ant(TM) version 1.8.4 compiled on May 22 2012

1.5 安装eclipse:

  1. $ sudo cp eclipse-jee-indigo-SR1-linux-gtk.tar.gz ../workenv/
  2. $ cd ../workenv/
  3. $ sudo gzip -d eclipse-jee-indigo-SR1-linux-gtk.tar.gz
  4. $ sudo tar -xvf eclipse-jee-indigo-SR1-linux-gtk.tar
  5. $ sudo chmod 777 -R eclipse/
  6. $ rm eclipse-jee-indigo-SR1-linux-gtk.tar

1.6 安装ADT插件

  1. $ ./eclips

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

1.7 更新Android SDK API

  1. $ ./eclips

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

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

  1. $ sudo apt-get build-dep vlc

3. 编译
3.1 设置环境变量

  1. $ export ANDROID_SDK=/home/workenv/android-sdk-linux
  2. $ export ANDROID_NDK=/home/workenv/android-ndk-r8
  3. $ export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools如果是 ARMv7和以上并支持NEON的设备:
  4. $ export ANDROID_ABI=armeabi-v7a

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

  1. $ export ANDROID_ABI=armeabi-v7a
  2. $ export NO_NEON=1

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

  1. Processor           : ARMv7 Processor rev 2 (v7l)
  2. BogoMIPS            : 998.36
  3. Features            : swp half thumb fastmult vfp edsp neon vfpv3
  4. CPU implementer     : 0x41
  5. CPU architecture    : 7
  6. CPU variant         : 0x3
  7. CPU part            : 0xc08
  8. CPU revision        : 2
  9. Hardware            : P1Lite Samsung Board
  10. Revision            : 0004
  11. Serial              : 0000000000000000

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

3.2 获取代码

  1. $ git clone git://git.videolan.org/vlc-ports/android.git
  2. $ cd android

3.3 编译

  1. $ 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

  1. configure: error: C compiler cannot create executables
  2. See `config.log‘ for more details.

找到config.log并打开:

  1. $ vim ./vlc/contrib/android/a52dec/config.log

发现这样一行提示错误:

  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: No such file: No such file or directory

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

  1. $ find -name crtbegin_dynamic.o

找到很多:

  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

查看一下权限

  1. $ ll ./platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o

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

  1. $ sudo chmod 755 -R android-ndk-r8

再编译:

  1. $ sh compile.sh

没有提示这个错误了。

4.2 ant错误

  1. /bin/sh: 1: ant: Permission denied
  1. $ ant -version

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

  1. $ source /etc/profile

4.3

  1. BUILD FAILED
  2. /home/workenv/android-sdk-linux/tools/ant/build.xml:518: Unable to resolve project target ‘android-15‘
  3. $ vim vlc-android/project.properties

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

  1. $ vim vlc-android/AndroidManifest.xml

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

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

时间: 2024-11-07 07:11:54

【转】vlc android 代码编译的相关文章

如何把iOS代码编译为Android应用

新闻 <iPhone 6/6 Plus中国销量曝光:单月销量650万>:据iSuppli Corp.中国研究总监王阳爆料,iPhone 6和iPhone 6 Plus在国内受欢迎的情况大大超过预期,苹果在中国的单月销量在11月超过了650万台,全年在中国的销量将超过4000万台. 教程 < Date parsing performance on iOS>:文章介绍了一个关于格式化时间的”黑科技“,作者使用 sqlite 替换 NSDateFormatter,提高了16倍的转换效率.

Proguard android代码混淆 防止反编译

Proguard android代码混淆 防止反编译 http://www.360doc.com/content/13/1030/13/9171956_325290258.shtml

Ubuntu14.04编译WebRTC For Android代码 2014-07-24

整整快一年没有写博客了,最近基于Google开源的WebRTC项目做了一款音视频聊天的即时通信项目,期间在下载WebRTC代码时就碰到了一些问题,在此以作记录,也希望能够帮助到正在下载编译WebRTC代码中碰到类似问题的童鞋们 1). 准备环境 1. Ubuntu14.04 LTS 系统 2. 准备一个稳定的速度还可以的VPN 或者 VPS ,这个很重要,大家都懂,大部分下载代码失败都是因为访问google服务失败导致的.(本人用的Digital Ocean, 之前试过几个VPN都以失败而告终,

Android - 使用JD-GUI反编译Android代码

使用JD-GUI反编译Android代码 本文地址: http://blog.csdn.net/caroline_wendy Android程序出现Bug时,需要根据Bug寻找问题出错的地方; 需要使用工具dex2jar.sh和JD-GUI,并把dex2jar.sh添加进系统路径; 把需要反编译的apk包修改为zip文件, 解压, 找到".dex"文件, "classes.dex"; 使用命令: sh dex2jar.sh ~/Desktop/ChunyuDocto

Android代码混淆防反编译解决方案研究

做Android开发的都知道要做混淆去防apk被反编译.破解,通过proguard进行Java代码混淆.但是,Android代码混淆真的能起到实质性的作用吗?看下面分析 1.Android代码混淆 如上图,对Android 代码进行混淆后混淆器将代码中的所有变量.函数.类的名称加密为简短的英文字母代号,在APP被破解后增加破解者对代码的阅读难度. 但是混淆的功效只能运作在APP已经被破解后,而且只是增加破解者的难度时间,对其防止破解的作用意义不是很大. 那么,Android代码混淆不能从根本上防

【转】Android源代码编译命令m/mm/mmm/make分析--不错

原文网址:http://blog.csdn.net/luoshengyang/article/details/19023609 在前文中,我们分析了Android编译环境的初始化过程.Android编译环境初始化完成后,我们就可以用m/mm/mmm/make命令编译源代码了.当然,这要求每一个模块都有一个Android.mk文件.Android.mk实际上是一个Makefile脚本,用来描述模块编译信息.Android编译系统通过整合Android.mk文件完成编译过程.本文就对Android源

使用proguard混淆android代码

当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的.为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等.我们需要对代码进行混淆,android的sdk中为我们提供了ProGrard这个工具,可以对代码进行混淆(一般是用无意义的名字来重命名),以及去除没有使用到的代码,对程序进行优化和压缩,这样可以增加你想的难度.最近我做的项目,是我去配置的混淆配置,因此研究了一下,这里分享一下. 如何启用ProGuard ant项目和eclipse

android反编译odex文件

关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android-apktool/downloads/list dex2jar 用于将dex反编译成.jar包 下载地址:http://code.google.com/p/dex2jar/downloads/list 生成的jar包可用jd-gui来查看(前提是代码未被混淆) 但是如果我们从rom里面提取出的apk是

【转】Android代码混淆指南

请尊重他人的劳动成果,转载请注明出处:<Android代码混淆指南> 本文将和大家分享使用Eclipse+ADT与使用Android Studio进行代码混淆打包的方法. 使用Eclipse+ADT进行代码混淆打包的方法 新版本SDK下进行打包混淆 如果使用新版本的SDK创建的Android项目会在项目的根目录下生成一个proguard-project.txt文件,该文件是默认的混淆规则文件. 混淆打包的步骤: 1.在proguard-project.txt文件中添加混淆的项目规则,大家可参考