Mac編譯vlc-android

這篇文章用於記錄在Mac上編譯vlc-android源碼的過程以及遇到的各種坑。

vlc-android源碼網站:https://code.videolan.org/videolan/vlc-android
編譯指導wiki網址:https://wiki.videolan.org/AndroidCompile/

請尊重博主勞動成果,轉載請標明原文出處和作者。

下載vlc-android

使用git下載將vlc-android下載到本地。

git clone https://code.videolan.org/videolan/vlc-android.git 

Android相關的工具

最好將Android SDK中的tools和platform及編譯sdk更新到最新。NDK的版本需要13+,最好更新到最新版本,使用低版本的NDK會報錯。

在當前用戶的.bash_profile文件中將SDK和NDK的安裝路徑添加到path中:

export ANDROID_SDK=/xxx/xxx/android-sdk
export ANDROID_NDK=/xxx/xxx/android-ndk
export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools

下載其它軟件包

wiki上Ubantu系統上需要安裝的軟件包:

sudo apt-get install automake ant autopoint cmake build-essential libtool \
     patch pkg-config protobuf-compiler ragel subversion unzip git \
    openjdk-8-jre openjdk-8-jdk

Mac上可以參照這個安裝相關的軟件,如果已安裝,則可以跳過。如果沒有安裝Homebrew,需要先安裝該軟件包。具體安裝步驟請查看:https://brew.sh/index_zh-cn.html。然後使用brew命令安裝所缺的軟件包。

安裝過程中遇到的一些問題:

使用brew install autopoint安裝autopoint軟件包,運行結果如下:

MacBook-Air:~ $ brew install autopoint
Error: No available formula with the name "autopoint" 
==> Searching for a previously deleted formula...
Warning: homebrew/core is shallow clone. To get complete history run:
  git -C "$(brew --repo homebrew/core)" fetch --unshallow

Error: No previously deleted formula found.
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
Error: No formulae found in taps.

提示錯誤:Homebrew庫中並沒有該軟件包。

google上找了一大圈,才發現Mac中並沒有這個軟件包。最後在Homebrew的git上的[autopoint #24070]
(https://github.com/Homebrew/legacy-homebrew/issues/24070)問題中找倒解決辦法。其實這個軟件包被存放到gettext中,使用brew install gettext安裝該軟件。它會被安裝到/usr/local/Cellar目錄中,在gettext/0.19.8.1/bin目錄中便有autopoint。需要將‘/usr/local/Cellar/gettext/0.19.8.1/bin’添加到path,這樣就能使用autopoint。

編譯

進入到vlc-android工程的根目錄,執行如下命令:

./compile.sh

在編譯的過程中遇到了不少問題:

1,sha1sum錯誤
錯誤信息:

./compile-libvlc.sh: line 768: sha1sum: command not found

直接使用brew install sha1sum命令安裝,結果安裝失敗,提示沒有sha1sum。在HOWTO: Install md5sum & sha1sum on Mac OS X這篇博客中找到軟件包的名稱:md5sha1sum。然後使用brew install md5sha1sum命令安裝。

2,GP錯誤
錯誤信息:

{standard input}: Assembler messages:
{standard input}:146: Error: unknown register alias 'GP'
clang38: error: assembler command failed with exit code 1 (use -v to see invocation)

需要修改vlc-android/vlc/contrib/src/ffmpeg/rules.mak文件,在該文件的FFMPEGCONF配置中添加’–disable-asm \’。
添加結果如下圖:
add_asm

3,網絡問題
google被牆,導致constraint-layout的pom下載失敗。錯誤信息:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':vlc-android'.
> Could not resolve all dependencies for configuration ':vlc-android:_chromeMIPS64SignedReleaseApkCopy'.
   > Could not resolve com.android.support.constraint:constraint-layout:1.1.0-beta1.
     Required by:
         project :vlc-android
      > Could not resolve com.android.support.constraint:constraint-layout:1.1.0-beta1.
         > Could not get resource 'https://maven.google.com/com/android/support/constraint/constraint-layout/1.1.0-beta1/constraint-layout-1.1.0-beta1.pom'.
            > Could not GET 'https://maven.google.com/com/android/support/constraint/constraint-layout/1.1.0-beta1/constraint-layout-1.1.0-beta1.pom'.
               > Remote host closed connection during handshake

開啓Android Studio,點擊“SDK Manager”圖標,在彈出的“Default Preferences”設置框中選擇“SDK Tools”項,然後勾選“Show Packages Details”,繼續勾選“ConstraintLayout for Android”和“Solver for ConstraintLayout”,再點擊“OK”按鈕,便會自動下載ConstraintLayout相關aar文件。
如下圖:
sdk
下載下來最新的ConstraintLayout版本爲1.0.2,需要將工程根目錄的build.gradle文件中”constraintLayoutVersion = ‘1.1.0-beta1’”中的’1.1.0-beta1’改爲’1.0.2’。

再次運行./compile.sh,又報出編譯問題:

vlc-android/build/intermediates/data-binding-layout-out/vanillaARMv7/debug/layout/info_activity.xml:152: AAPT: No resource identifier found for attribute 'barrierDirection' in package 'org.videolan.vlc.debug'

vlc-android/build/intermediates/data-binding-layout-out/vanillaARMv7/debug/layout/info_activity.xml:152: AAPT: No resource identifier found for attribute 'constraint_referenced_ids' in package 'org.videolan.vlc.debug'

出錯的佈局文件位置:

            <android.support.constraint.Barrier
                android:id="@+id/barrier"
                android:layout_width="0dp"
                android:layout_height="0dp"
                vlc:layout_constraintTop_toTopOf="@id/length_title"
                vlc:layout_constraintBottom_toBottomOf="@id/size_title"
                vlc:barrierDirection="end"
                vlc:constraint_referenced_ids="size_title, length_title"/>

這是因爲1.0.2版本的ConstratintLyaout中無android.support.constraint.Barrier這個類,所以info_activity.xml中’barrierDirection’和’constraint_referenced_ids’獲取不到對應的資源。於是,又將build.gradle文件中constraintLayoutVersion信息改回’1.1.0-beta1’。

再次運行compile.sh文件,結果還是無法獲取pom。

在網上查看許多博客和文檔,最後發現工程根目錄的build.gradle文件maven中的url有一個可選項,於是將url改爲可選的值。如下所示:

allprojects {
    repositories {
        maven {
            //url 'https://maven.google.com'
            // Alternative URL is 'https://dl.google.com/dl/android/maven2/'
            url 'https://dl.google.com/dl/android/maven2/'
        }
        jcenter()
    }
}

繼續運行./compile.sh,等待了幾分鐘,終於編譯成功。

compile_result

運行

編譯生成的apk在vlc-android/build/outputs/apk/VLC-Android-2.1.16-ARMv7.apk。
使用x86的模擬器運行apk,結果安裝後運行失敗。以爲生成的apk有問題,使用手機運行,能夠正常運行。模擬運算失敗的原因是不支持生成的so文件。
運行截圖:
vl c_0

vlc_1

vlc_2

vlc_3

vlc_4

總結

網絡實在是影響編譯最大問題,需要一把暢通的梯子,能夠下載SDK,NDK和工程中引用到的第三方軟件或工程。還有就是最好使用Ubantu或其它linux系統來編譯,這樣遇到的問題會少很多。

如果覺得使用命令行不是很方便,也可以使用Android Studio導入工程,然後Run和修改。

參考博客

Android版本-編譯VLC
http://hanhailong.com/2015/10/27/Android%E7%89%88%E6%9C%AC-%E7%BC%96%E8%AF%91VLC/

【VLC-Android】Mac下編譯vlc-android
http://www.cnblogs.com/over140/p/3924209.html

Mac OS 下編譯Vlc for android
http://www.jianshu.com/p/9b35e3fd2c8c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章