天天看點

VLC For Android Ubuntu14.04編譯環境搭建

        VLC多媒體播放器(英語:VLC media player,最初為VideoLAN Client,是VideoLAN計劃的開放源代碼多媒體播放器。)支援衆多音頻與視訊解碼器及檔案格式,并支援DVD影音CD光牒,VCD影音CD光牒及各類流協定,它是一個開源并且支援多種平台。還有一款 Android 與 iOS 平台上的全能多媒體開發架構Vitamio,這裡隻講VCL

官網:https://wiki.videolan.org/AndroidCompile#Get_VLC_Source

環境:

主控端:Windows XP

虛拟機:VirtualBox-4.3.12-93733-Win.exe

虛拟機系統:ubuntu14.04

環境搭建要求:

在Linux系統上,我安裝的是Ubuntu14.04

需要安裝的工具:

apache-ant (or ant), autoconf, automake, autopoint, cmake, gawk (or nawk), gcc, g++, libtool, git,

m4, patch, pkg-config, ragel, subversion, unzip.

提示:

1、如果是編譯Android-x86裝置,應該安裝yasm

一、Android SDK

1.建立一個名為android_tools的目錄

2.到官網上下載下傳最新的SDK http://developer.android.com/sdk/index.html

3.解壓到android目錄下

4.運作:tools/android (也可以運作: "tools/android update sdk -u -t platform,platform-tool,extra")

5.在tool目錄,安裝"SDK Platform Android 4.3, API 18",根據提示操作

注:VLC的工程屬性檔案project.properties的target=android-18一定是已經安裝的,否則會報問題三:

二、Android NDK

1.確定SDK已經安裝成功,NDK要r9 版本以上的,因為在compile.sh檔案中已經配置好了,如果版本過低會提示:You need the NDKv9 or later

2.下載下傳NDK for Linux http://developer.android.com/intl/zh-cn/tools/sdk/ndk/index.html

3.解壓到android_tools目錄下,確定和SDK放在同一目錄下

注意安裝SDK和NDK時一定要注意機器是64還是32位,下載下傳對應的版本安裝,否則會有一些莫名其妙的問題

SDK和NDK的安裝,都是解壓的目前目錄android_tools下

[email protected]:~/android_tools$ sudo tar -xvf /mnt/shared/android-ndk-r9d-linux-x86.tar.bz2

[email protected]:~/android_tools$ sudo unzip /mnt/shared/adt-bundle-linux-x86-20140702.zip

三、配置環境變量

Environment setup

在~/.bashrc最後添加 sudo gedit ~/.bashrc

export ANDROID_SDK=/home/dzt/android_tools/adt-bundle-linux-x86_64-20140321/sdk

export ANDROID_NDK=/home/dzt/android_tools/android-ndk-r9d

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

根據實際安裝路徑寫

設定環境變量等效:

[email protected]:~/android_tools$ sudo source ~/.bashrc

Devices在指令行中指定裝置,這個不是在檔案中配置的,每次編譯後退出再進來都需要重新設定

[email protected]:/home/dzt/android_vlc/android# export ANDROID_ABI=armeabi

[email protected]:/home/dzt/android_vlc/android# export NO_FPU=1

四、編譯

1.Get VLC Source

在之前建立的android目錄下運作以下指令

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

2.Compile

運作:sh compile.sh

[email protected]:/home/dzt/android_vlc/android# sh compile.sh

For an ARMv6 device without FPU:

$ export NO_FPU=1

For an ARMv5 device:

$ export NO_ARMV6=1

If you plan to use a release build, run 'compile.sh release'

VLC source not found, cloning

正克隆到 'vlc'...

remote: Counting objects: 426425, done.

remote: Compressing objects: 100% (80869/80869), done.

remote: Total 426425 (delta 343977), reused 425830 (delta 343585)

接收對象中: 100% (426425/426425), 237.54 MiB | 201.00 KiB/s, done.

處理 delta 中: 100% (343977/343977), done.

檢查連接配接... 完成。

Checking out files: 100% (3413/3413), done.

切換到一個新分支 'android'

Building tools

我下載下傳的是r9d

需要更新compile.sh檔案,如果NDK版本過低或過高會提示:You need the NDKv9 or later

此時就需要修改compile.sh檔案

[email protected]:/home/dzt/android_vlc/android# gedit compile.sh

# try to detect NDK version

REL=$(grep -o '^r[0-9]*.*' $ANDROID_NDK/RELEASE.TXT 2>/dev/null|cut -b2-)

echo $REL    //列印出版本

case "$REL" in

    9|9*)       #主要修改這一行

        GCCVER=4.8

        CXXSTL="/"${GCCVER}

    ;;

    7|8|*)

        echo "You need the NDKv9 or later"

        exit 1

    ;;

esac

相關庫的下載下傳:http://download.videolan.org/pub/contrib/有可能會進不去,我是用了VPN

依賴的一些庫,這些庫在編譯過程中會進行下載下傳,但有可能會下載下傳失敗,此時就需要手動去下載下傳,拷貝到這個目錄下。

[email protected]:~/android_vlc/android/vlc/contrib/tarballs$ ls
a52dec-0.7.4.tar.gz       libebml-1.3.0.tar.bz2      LibVNCServer-0.9.9.tar.gz
ffmpeg-2763179.tar.gz     libgcrypt-1.6.1.tar.bz2    libvorbis-1.3.4.tar.xz
flac-1.3.0.tar.xz         libgpg-error-1.13.tar.bz2  libxml2-2.9.1.tar.gz
freetype-2.5.3.tar.gz     libgsm_1.0.13.tar.gz       live.2014.05.27.tar.gz
fribidi-0.19.6.tar.bz2    libiconv-1.14.tar.gz       nettle-2.6.tar.gz
gmp-6.0.0.tar.bz2         libmad-0.15.1b.tar.gz      openjpeg-1.5.0.tar.gz
gnutls-3.1.25.tar.xz      libmatroska-1.4.1.tar.bz2  opus-1.1.tar.gz
jpegsrc.v9a.tar.gz        libmodplug-0.8.8.5.tar.gz  postproc-git.tar.gz
libass-0.11.2.tar.gz      libmpeg2-0.5.1.tar.gz      speexdsp-git.tar.gz
libdvbpsi-1.2.0.tar.bz2   libogg-1.3.2.tar.xz        speex-git.tar.gz
libdvdcss-1.2.13.tar.bz2  libpng-1.6.12.tar.xz       taglib-1.9.1.tar.gz
libdvdnav-git.tar.xz      libssh2-1.4.3.tar.gz       zlib-1.2.8.tar.gz
libdvdread-4.9.9.tar.bz2  libtheora-1.1.1.tar.xz
           

以上庫的下載下傳位址: http://pan.baidu.com/s/1jGJukq6

在編譯過程中遇到的問題整理

問題一

=== configuring in gettext-runtime (/home/dzt/android_vlc/android/vlc/contrib/contrib-android-arm-linux-androideabi/gettext/gettext-runtime)

configure: running /bin/bash ./configure --disable-option-checking '--prefix=/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi' '--datarootdir=/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi/share' '--includedir=/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi/include' '--libdir=/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi/lib' '--build=i686-linux-gnu' '--host=arm-linux-androideabi' '--target=arm-linux-androideabi' '--program-prefix=' '--enable-static' '--disable-shared' '--disable-dependency-tracking' '--with-pic' '--disable-java' '--disable-native-java' '--without-emacs' 'build_alias=i686-linux-gnu' 'host_alias=arm-linux-androideabi' 'target_alias=arm-linux-androideabi' 'CC=arm-linux-androideabi-gcc --sysroot=/home/dzt/android_vlc/android/android-ndk-r9d/platforms/android-9/arch-arm' 'CFLAGS= -g -mfpu=vfpv3-d16 -mcpu=cortex-a8 -mthumb -mfloat-abi=softfp -O2 -I/home/dzt/android_vlc/android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include -I/home/dzt/android_vlc/android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi/include -g' 'LDFLAGS= -L/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi/lib' 'CPPFLAGS= -g -mfpu=vfpv3-d16 -mcpu=cortex-a8 -mthumb -mfloat-abi=softfp -O2 -I/home/dzt/android_vlc/android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include -I/home/dzt/android_vlc/android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi/include' 'CXX=arm-linux-androideabi-g++ --sysroot=/home/dzt/android_vlc/android/android-ndk-r9d/platforms/android-9/arch-arm' 'CXXFLAGS= -g -mfpu=vfpv3-d16 -mcpu=cortex-a8 -mthumb -mfloat-abi=softfp -O2 -I/home/dzt/android_vlc/android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include -I/home/dzt/android_vlc/android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I/home/dzt/android_vlc/android/vlc/contrib/arm-linux-androideabi/include -g' --cache-file=/dev/null --srcdir=.

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for arm-linux-androideabi-strip... arm-linux-androideabi-strip

checking for a thread-safe mkdir -p... /bin/mkdir -p

checking for gawk... no

checking for mawk... mawk

checking whether make sets $(MAKE)... yes

checking whether make supports nested variables... yes

checking for arm-linux-androideabi-gcc... arm-linux-androideabi-gcc --sysroot=/home/dzt/android_vlc/android/android-ndk-r9d/platforms/android-9/arch-arm

checking whether the C compiler works... no

configure: error: in `/home/dzt/android_vlc/android/vlc/contrib/contrib-android-arm-linux-androideabi/gettext/gettext-runtime':

configure: error: C compiler cannot create executables

See `config.log' for more details

configure: error: ./configure failed for gettext-runtime

make: *** [.gettext] 錯誤 77

fix:

由于我的機器的32位的,我用了64位的軟體,把SDK和NDK換成32位的就沒這個問題了。

問題二:

checking whether byte ordering is bigendian... no

checking for pthread_create in -lpthread... no

configure: error: pthread needed

make: *** [.dvdnav] 錯誤 1

Fix:

我按照上面的步驟重新下載下傳一遍就沒有報這個錯誤。

我之前是

第一步git clone git://git.videolan.org/vlc-ports/android.git

再做後面的事,是以才報了這個問題,我全部删除後再按上面的步驟執行相當順利。

問題三:

-set-mode-check:

-set-debug-files:

-check-env:

[checkenv] Android SDK Tools Revision 23.0.2

[checkenv] Installed at /home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk

-setup:

[echo] Project Name: VLC

[gettype] Project Type: Application

-set-debug-mode:

-debug-obfuscation-check:

-pre-build:

-build-setup:

[getbuildtools] Using latest Build Tools: 20.0.0

[echo] Resolving Build Target for VLC...

BUILD FAILED

/home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk/tools/ant/build.xml:542: Unable to resolve project target 'android-19'

Total time: 6 seconds

make: *** [vlc-android/bin/VLC-debug.apk] 錯誤 1

rm android-libs/libmedia.c android-libs/libutils.c android-libs/libstagefright.c android-libs/libbinder.c

[email protected]:/home/dzt/android_vlc/android#

Fix:

出錯原因

BUILD FAILED

/home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk/tools/ant/build.xml:542: Unable to resolve project target 'android-19'

因為我沒有安裝"android-19"的SDK,

解決辦法有兩種(經實驗第一種方法不可行)

1、修改工程屬性檔案vlc-android/project.properties檔案

# This file is automatically generated by Android Tools.

# Do not modify this file -- YOUR CHANGES WILL BE ERASED!

#

# This file must be checked in Version Control Systems.

#

# To customize properties used by the Ant build system use,

# "ant.properties", and override values to adapt the script to your

# project structure.

# Project target.

target=android-18

android.library.reference.1=../java-libs/appcompat

android.library.reference.2=../java-libs/SlidingMenu

android.library.reference.3=../java-libs/WheelView

2、安裝"android-19"SDK即可,運作以下指令

[email protected]:/home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk# tools/android

出現如下畫面,下載下傳你需要的SDK即可,但不一定都能下載下傳,因為最近連google都無法連上,你懂的

VLC For Android Ubuntu14.04編譯環境搭建

問題四:

BUILD FAILED

/home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk/tools/ant/build.xml:601: The following error occurred while executing this line:

/home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk/tools/ant/build.xml:542: Unable to resolve project target 'android-19'

Total time: 11 seconds

make: *** [vlc-android/bin/VLC-debug.apk] 錯誤 1

rm android-libs/libmedia.c android-libs/libutils.c android-libs/libstagefright.c android-libs/libbinder.c

Fix:

這裡根據自己所安裝的SDK包進行更改

android/vlc-android/project.properties

還有java-libs目錄下,最好是查找出來,修改所有的android-x,包括AndroidManifest.xml檔案

[email protected]:~/android_vlc/android/java-libs$ find ./ -name project.properties

./SlidingMenu/project.properties

./WheelView/project.properties

./appcompat/project.properties

android/java-libs/SlidingMenu/project.properties

android/java-libs/WheelView/project.properties

android/java-libs/appcompat/project.properties檔案中的android-x,

但是對于vlc-android0.0.5版本的一定是4.0及以上版本(因為0.0.5版本的界面需要4.0及以上的特性)是以這裡一定是14及以上,

否則還會報錯error: Error retrieving parent for item: No resource found that matches the given name'android:Widget.Holo.ActionBar'.

編譯時隻是這裡需要4.0這個包的界面特性,但是不影響最終生成的APK的運作目标(隻要不調用4.0及以上的API),比如我這裡在AndroidManifest.xml中可以設定

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="18" />,重新執行編譯指令。

如果還是報錯就建議安裝提示的SDK最簡單

問題五:

-compile:
    [javac] Compiling 95 source files to /home/dzt/android_vlc/android/vlc-android/bin/classes
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:64: 找不到符号
    [javac] 符号: 類 Presentation
    [javac] 位置: 軟體包 android.app
    [javac] import android.app.Presentation;
    [javac]                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:80: 找不到符号
    [javac] 符号: 類 MediaRouter
    [javac] 位置: 軟體包 android.media
    [javac] import android.media.MediaRouter;
    [javac]                     ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:127: 找不到符号
    [javac] 符号: 類 MediaRouter
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity
    [javac]     private MediaRouter mMediaRouter;
    [javac]             ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:128: 軟體包 MediaRouter 不存在
    [javac]     private MediaRouter.SimpleCallback mMediaRouterCallback;
    [javac]                        ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2141: 找不到符号
    [javac] 符号: 類 Presentation
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity
    [javac]     private final class SecondaryDisplay extends Presentation {
    [javac]                                                  ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/audio/AudioService.java:672: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2140: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:245: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:496: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:554: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1024: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1686: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2086: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2113: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/libvlc/LibVLC.java:103: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR2
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]             else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2)
    [javac]                                                                  ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/libvlc/LibVlcUtil.java:63: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]         return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN;
    [javac]                                                                                  ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/libvlc/LibVlcUtil.java:68: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]         return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
    [javac]                                                                                  ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/libvlc/LibVlcUtil.java:73: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR2
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]         return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
    [javac]                                                                                  ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/libvlc/LibVlcUtil.java:78: 找不到符号
    [javac] 符号: 變量 KITKAT
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]         return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT;
    [javac]                                                                                  ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/audio/AudioService.java:733: 找不到符号
    [javac] 符号: 變量 bigContentView
    [javac] 位置: 類 android.app.Notification
    [javac]                 notification.bigContentView = view_expanded;
    [javac]                             ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/BrowserAdapter.java:149: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]         if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    [javac]                                                                    ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java:468: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR1
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]         if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    [javac]                                                                    ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:251: 找不到符号
    [javac] 符号: 類 MediaRouter
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity
    [javac]             mMediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);
    [javac]                             ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:251: 找不到符号
    [javac] 符号: 變量 MEDIA_ROUTER_SERVICE
    [javac] 位置: 類 android.content.Context
    [javac]             mMediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);
    [javac]                                                                  ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:252: 軟體包 MediaRouter 不存在
    [javac]             mMediaRouterCallback = new MediaRouter.SimpleCallback() {
    [javac]                                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:271: 運算符 == 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         setContentView(mPresentation == null ? R.layout.player : R.layout.player_remote_control);
    [javac]                                      ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:388: 運算符 != 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation != null && !mSettings.getBoolean("enable_secondary_display_hardware_acceleration", false)) {
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:411: 運算符 == 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation == null) {
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:502: 運算符 != 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation != null) {
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:504: 找不到符号
    [javac] 符号: 方法 dismiss()
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]             mPresentation.dismiss();
    [javac]                          ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:559: 找不到符号
    [javac] 符号: 變量 MediaRouter
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity
    [javac]             mMediaRouter.addCallback(MediaRouter.ROUTE_TYPE_LIVE_VIDEO, mMediaRouterCallback);
    [javac]                                      ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:696: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN_MR2
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]             if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
    [javac]                                                            ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1030: 運算符 == 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation == null) {
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1034: 找不到符号
    [javac] 符号: 方法 getWindow()
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]             sw = mPresentation.getWindow().getDecorView().getWidth();
    [javac]                               ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1035: 找不到符号
    [javac] 符号: 方法 getWindow()
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]             sh = mPresentation.getWindow().getDecorView().getHeight();
    [javac]                               ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1041: 運算符 == 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation == null) {
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1115: 運算符 == 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation == null) {
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1206: 運算符 == 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]             if (coef > 2 && mPresentation == null) {
    [javac]                                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1642: 運算符 != 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]             if (mPresentation != null) mOverlayBackground.setVisibility(View.VISIBLE);
    [javac]                               ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1668: 運算符 != 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]             if (mPresentation != null) {
    [javac]                               ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1692: 找不到符号
    [javac] 符号: 變量 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    [javac] 位置: 類 android.view.View
    [javac]             layout = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    [javac]                          ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1692: 找不到符号
    [javac] 符号: 變量 SYSTEM_UI_FLAG_LAYOUT_STABLE
    [javac] 位置: 類 android.view.View
    [javac]             layout = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    [javac]                                                                       ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1692: 不相容的類型
    [javac] 找到: boolean
    [javac] 需要: int
    [javac]             layout = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    [javac]                                                                 ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:1705: 運算符 == 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation == null)
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2092: 軟體包 MediaRouter 不存在
    [javac]         MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(
    [javac]                    ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2093: 找不到符号
    [javac] 符号: 變量 MediaRouter
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity
    [javac]             MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
    [javac]             ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2101: 找不到符号
    [javac] 符号: 方法 setOnDismissListener(android.content.DialogInterface.OnDismissListener)
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]             mPresentation.setOnDismissListener(mOnDismissListener);
    [javac]                          ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2103: 找不到符号
    [javac] 符号: 方法 show()
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]                 mPresentation.show();
    [javac]                              ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2104: 找不到符号
    [javac] 符号: 類 InvalidDisplayException
    [javac] 位置: 接口 android.view.WindowManager
    [javac]             } catch (WindowManager.InvalidDisplayException ex) {
    [javac]                                   ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2123: 運算符 != 不能應用于 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay,<nulltype>
    [javac]         if (mPresentation != null) mPresentation.dismiss();
    [javac]                           ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2123: 找不到符号
    [javac] 符号: 方法 dismiss()
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]         if (mPresentation != null) mPresentation.dismiss();
    [javac]                                                 ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2133: 運算符 == 不能應用于 android.content.DialogInterface,org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]             if (dialog == mPresentation) {
    [javac]                        ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2154: 找不到符号
    [javac] 符号: 方法 setOwnerActivity(android.app.Activity)
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]                 setOwnerActivity((Activity) context);
    [javac]                 ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2181: 找不到符号
    [javac] 符号: 方法 getOwnerActivity()
    [javac] 位置: 類 org.videolan.vlc.gui.video.VideoPlayerActivity.SecondaryDisplay
    [javac]             VideoPlayerActivity activity = (VideoPlayerActivity)getOwnerActivity();
    [javac]                                                                 ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java:2164: 方法不會覆寫或實作超類型的方法
    [javac]         @Override
    [javac]         ^
    [javac] /home/dzt/android_vlc/android/vlc-android/src/org/videolan/vlc/util/AndroidDevices.java:70: 找不到符号
    [javac] 符号: 變量 JELLY_BEAN
    [javac] 位置: 類 android.os.Build.VERSION_CODES
    [javac]                     (VERSION.SDK_INT <= VERSION_CODES.JELLY_BEAN)));
    [javac]                                                      ^
    [javac] 56 錯誤

BUILD FAILED
/home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk/tools/ant/build.xml:720: The following error occurred while executing this line:
/home/dzt/android_tools/adt-bundle-linux-x86-20140702/sdk/tools/ant/build.xml:734: Compile failed; see the compiler error output for details.

Total time: 26 seconds
make: *** [vlc-android/bin/VLC-debug.apk] 錯誤 1
rm android-libs/libmedia.c android-libs/libutils.c android-libs/libstagefright.c android-libs/libbinder.c
[email protected]:/home/dzt/android_vlc/android# 
           

Fix:

使用最新的SDK就可以了

總結:

在編譯的過程中碰到很多問題,有問題可以先百度一下,看别人有沒有碰到類似的情況,一般都能在網上找到答案,需要具體問題具體分析,如果找不到要想下自己執行的步驟跟官網上的是否一緻;

實在沒辦法就按步驟多試幾遍也許能行。