• 【转】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.   
    10. Hardware            : P1Lite Samsung Board  
    11. Revision            : 0004  
    12. 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,希望与大家一起交流。

  • 相关阅读:
    [WP]XCTF-Reversing-Newbie_calculations
    [WP]BUUCTF-Reverse-基础题(1-12)
    [WP]XCTF-notsequence
    [WP]XCTF-easyre-153
    [WP]XCTF- 攻防世界-crypto-新手练习区
    [WP]XCTF-simple-check-100
    [WP]XCTF-SignIn
    [WP]XCTF-666
    [WP]XCTF-Reversing-x64Elf-100
    [WP]XCTF-流浪者
  • 原文地址:https://www.cnblogs.com/cslunatic/p/4151501.html
Copyright © 2020-2023  润新知