從零開始蛤肌,手把手教你如何在Ubuntu下編譯VLC-Android源碼

前言

公司項(xiàng)目中使用的libvlcjni.so庫文件,有點(diǎn)老,對Android 6.0+系統(tǒng)兼容性太差了儒洛,當(dāng)程序運(yùn)行在Android6.0+系統(tǒng)上時(shí)狼速,回彈出警告框,提示libvlcjni.so:text relocations異常恼蓬,雖然处硬,程序播放視頻沒有問題拇派,但是,總是彈出提示框就非常不友好了疮方,為此茧彤,就需要重新編譯一個(gè)新的庫文件。
由于惫谤,在編譯中遇到了一大堆難題许蓖,足足花了3天時(shí)間才將VLC-Android源碼編譯成功。期間在網(wǎng)上查找了不少參考資料窖式,但是动壤,大都介紹太過詳細(xì),好多地方?jīng)]有將清楚,非常容易誤導(dǎo)他人启妹,所以饶米,決定下一篇詳細(xì)的教程來記錄此次編譯的過程车胡,希望能給大家?guī)韼椭?br> 特別感謝 從零開始在Linux編譯VLC-Android開源項(xiàng)目 這篇博客給我?guī)淼膸椭?br> 本博客同步發(fā)布于XueLong的博客

VLC簡介

VLC 是一款自由匈棘、開源的跨平臺(tái)多媒體播放器及框架主卫,可播放大多數(shù)多媒體文件簇搅,以及 DVD筒主、音頻 CD使兔、VCD 及各類流媒體協(xié)議虐沥。VLC使用C語言開發(fā)镐依,可跨平臺(tái)編譯為其他系統(tǒng)所用槐壳;VLC-android是將VLC編譯為Android可調(diào)用類庫(*.so)的工程。
VLC官網(wǎng)
VLC-Android編譯官方文檔

編譯系統(tǒng)配置

  • 編譯系統(tǒng)環(huán)境為:Windows 10 企業(yè)版(版本1607)下 VMware Workstation 12 Pro(12.5.0 build-4352439)中安裝的 Ubuntu16.04 LTS 64位 虛擬機(jī)吨灭。保證有一個(gè)穩(wěn)定的網(wǎng)絡(luò)環(huán)境,即使不能FQ也可以完成本次編譯。
  • 本次編譯的VLC-Android版本為2.1.16特幔,代碼時(shí)間為2017-08-10,SHA1 ID:6a04fdb0f10daf70ec4cc449c78d53c2a379f399
  • 本次編譯的VLC版本未知遭赂,代碼時(shí)間為2017-08-23,SHA1 ID:85f0e45b2304afa64ace2e3f0ddc19ad8b5accfb
  • VLC編譯環(huán)境代碼 git clone https://code.videolan.org/videolan/vlc-android.git
  • vlc源碼 git clone http://git.videolan.org/git/vlc.git vlc

編譯環(huán)境配置

  • 編譯VLC源碼需要安裝 JDK、NDK锌畸、SDK比默、automake命咐、ant、autopoint钝域、cmake迷捧、build-essential漠秋、 libtool庆锦、patch、pkg-config求晶、protobuf-compiler、ragel吝秕、subversion、unzip、git
  • 為了解決編譯過程中不能下載 build.gradle 中的依賴環(huán)境問題如捅,建議安裝Android-Studio

JDK安裝及環(huán)境變量配置

  • 1、下載jdk

jdk-8u144-linux-x64.tar.gz

  • 2谎僻、解壓并賦權(quán)限
sudo tar zxvf ./jdk-8u144-linux-x64.tar.gz
sudo chmod -R 777 jdk-8u144-linux-x64

如果你下載的是zip格式的則使用下面的命令進(jìn)行解壓

unzip jdk-8u144-linux-x64.zip
  • 3、配置環(huán)境變量

打開配置文件

sudo gedit ~/.bashrc

在配置文件文本末尾輸入環(huán)境變量,保存并退出

export JAVA_HOME=/home/skylark/Software/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_BIN=$JAVA_HOME/bin

使環(huán)境變量生效

source ~/.bashrc

驗(yàn)證是否配置成功

java -version
  • 4、設(shè)置為ubuntu默認(rèn)JDK
sudo update-alternatives --config java    #查看根目錄的Java,目前只有openJDK
sudo update-alternatives --install /usr/bin/java java /home/skylark/Software/jdk1.8.0_144/bin/java 300  #將oracle JDK安裝到根目錄
sudo update-alternatives --install /usr/bin/javac javac /home/skylark/Software/jdk1.8.0_144/bin/javac 300   #將oracle JDK安裝到根目錄
sudo update-alternatives --config java  #再次查看Java配置缭保,輸入對應(yīng)序號,選擇oracle JDK作為默認(rèn)Java

SDK安裝及環(huán)境變量配置

  • 1、下載

android-sdk_r24.4.1-linux

  • 2苞尝、解壓,將解壓后的文件夾命名為 android-sdk
sudo tar zxvf ./android-sdk_r24.4.1-linux.tar
  • 3抡砂、配置環(huán)境變量

打開配置文件

sudo gedit ~/.bashrc

在配置文件文本末尾輸入環(huán)境變量碴巾,保存并退出

export ANDROID_SDK=/home/skylark/Software/android-sdk   #VLC編譯腳本只認(rèn) $ANDROID_SDK 環(huán)境變量
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

使環(huán)境變量生效

source ~/.bashrc

驗(yàn)證是否配置成功

android list target

NDK安裝及環(huán)境變量配置

  • 1啤月、下載

android-ndk-r13b-linux-x86_64

  • 2谎仲、解壓
unzip android-ndk-r13b-linux-x86_64.zip
  • 3绞呈、配置環(huán)境變量

打開配置文件

sudo gedit ~/.bashrc

在配置文件文本末尾輸入環(huán)境變量,保存并退出

export ANDROID_NDK=/home/skylark/Software/android-ndk-r13b   #VLC編譯腳本只認(rèn) $ANDROID_NDK 環(huán)境變量
export PATH=$PATH:$ANDROID_NDK

使環(huán)境變量生效

source ~/.bashrc

驗(yàn)證是否配置成功

ndk-build --version

Android Studio安裝

為了解決編譯過程中不能下載 build.gradle 中的依賴環(huán)境問題,建議安裝Android-Studio
如果你可以FQ的話志鹃,可以跳過次步驟

android-studio-ide-162.3871768-linux.zip

Android Studio的安裝比較簡單曹铃,由于篇幅的原因,這里就不再介紹了评甜,記得安裝時(shí)的SDK路徑和NDK路徑選擇上面步驟中我們自己的路徑。

官方推薦工具包安裝

官方給出了一條指令 sudo apt-get install automake ant autopoint cmake build-essential libtool patch pkg-config protobuf-compiler ragel subversion unzip git 來安裝所需要的包環(huán)境,建議自己逐條安裝嘉抒,一步一步來隶症,以便清楚的了解到每個(gè)包的安裝情況。

protobuf3編譯及安裝

我所使用的代碼,在編譯環(huán)節(jié)要求使用protobuf3胁住,而通過protobuf-compiler安裝的是libprotoc2.6.1版本儡司,會(huì)出現(xiàn)“Unrecognized syntax identifier “proto3”的錯(cuò)誤捕犬。因此需要手動(dòng)下載protobuf3,進(jìn)行安裝垢粮。
這里我采用的是直接下載protobuf-3.0.0的源碼蜡吧,然后進(jìn)行編譯安裝
Google Github Protobuf 安裝介紹

  • 1斩跌、下載

protobuf-3.0.0.tar.gz

  • 2、編譯工具準(zhǔn)備
sudo apt-get install autoconf automake libtool curl make g++ unzip

  • 3、解壓
sudo tar zxvf ./protobuf-3.0.0.tar.gz   #解壓
cd ./protobuf-3.0.0/     #解壓出的文件夾

在執(zhí)行 ./autogen.sh 命令時(shí)上沐,需要從Q外下載一個(gè) gmock-1.7.0.zip 包,但是硫眯,由于網(wǎng)絡(luò)原因下載失敗净宵,所以先提前下載择葡。解壓下載的文件敏储,將文件夾重命名為 gmock,并移動(dòng)到 protobuf-3.0.0 文件夾下酝碳。

  • 5疏哗、編譯安裝
cd ./protobuf-3.0.0/     #解壓出的文件夾
./autogen.sh    #首先生成configure腳本
./configure    #運(yùn)行configure
make
make check
sudo make install
sudo ldconfig # refresh shared library cache.   #千萬不要漏掉了 .
./configure --prefix=/usr   #更改安裝到/usr
  • 6、驗(yàn)證是否安裝成功
protoc --version

VLC環(huán)境變量配置

為VLC指定要編譯的設(shè)備類型吗氏,不設(shè)置環(huán)境變量時(shí)污尉,默認(rèn)采用 armeabi-v7a

打開配置文件

sudo gedit ~/.bashrc

在配置文件文本末尾輸入環(huán)境變量被碗,保存并退出

export ANDROID_ABI=armeabi-v7a

使環(huán)境變量生效

source ~/.bashrc

編譯開始

經(jīng)過上面復(fù)雜的環(huán)境變量配置及編譯工具安裝,現(xiàn)在我們終于要開始真正的VLC源碼編譯了

vlc-andorid源碼下載

  • 克隆vlc-android源碼到本地
git clone https://code.videolan.org/videolan/vlc-android.git    #使用git命令從VLC官網(wǎng)獲取最新vlc-android代碼 
  • 克隆vlc源碼到本地
cd ./vlc-android/
git clone http://git.videolan.org/git/vlc.git vlc   #使用git命令從VLC官網(wǎng)獲取最新vlc代碼
  • 修改vlc-android目錄下的 build.gradle
//將classpath 'com.android.tools.build:gradle:3.4.1'修改為下面的
classpath 'com.android.tools.build:gradle:2.3.3'
  • 修改vlc-android目錄下的 compile.sh 將GRADLE標(biāo)簽中的配置修改如下
read -p "skylark:press any key to start #GRADLE" skylark

if [ ! -d "gradle/wrapper" ]; then
    GRADLE_VERSION=3.4.1

    #skylark: if there is no gradle-v-all.zip,then download it.
    if [ ! -a "gradle-${GRADLE_VERSION}-all.zip" ]; then
        diagnostic "Downloading gradle"
        GRADLE_URL=https://download.videolan.org/pub/contrib/gradle/gradle-${GRADLE_VERSION}-bin.zip
        wget ${GRADLE_URL} 2>/dev/null || curl -O ${GRADLE_URL}
        checkfail "gradle: download failed"
    else
    echo "skylark:#FUNCTIONS find local gradle-${GRADLE_VERSION}-all.zip"
    fi

    unzip -o gradle-${GRADLE_VERSION}-bin.zip
    checkfail "gradle: unzip failed"

    #skylark: change gradle-v-bin.zip downloading url.
    echo "skylark: unzip done. Next step will execute gradle-${GRADLE_VERSION}/bin/gradle wrapper.This execution will lead to the downloading of [ gradle-${GRADLE_VERSION}-bin.zip ]. Notice that,you can use a faster download url in gradle-${GRADLE_VERSION}/gradle/wrapper/gradle-wrapper.properties with the value of [ distributionUrl ] AFTER canceling default downloading process (because gradle-${GRADLE_VERSION}/bin/gradle will not be created until this execution)."
    echo "Or,you can place your own [ gradle-${GRADLE_VERSION}-bin.zip ] to the location like /home/skylark/.gradle/wrapper/dists/gradle-3.3-bin/64bhckfm0iuu9gap9hg3r7ev2 , and run compile.sh again(if gradle/wrapper exists,you should remove it first to run this part shell of compile.sh)"
    read -p "Press any key to continue." skylark

    cd gradle-${GRADLE_VERSION}

    ./bin/gradle wrapper
    checkfail "gradle: wrapper failed"

    ./gradlew -version
    checkfail "gradle: wrapper failed"
    cd ..
    mkdir -p gradle
    mv gradle-${GRADLE_VERSION}/gradle/wrapper/ gradle
    mv gradle-${GRADLE_VERSION}/gradlew .
    chmod a+x gradlew
    #skylark : keep this package.
    #rm -rf gradle-${GRADLE_VERSION}-bin.zip
fi

echo "skylark : #GRADLE done."
  • 將項(xiàng)目導(dǎo)入到 Android Studio

在編譯過程中蘑险,腳本會(huì)去自動(dòng)下載編譯APK所需要的依賴包贵少,但是由于網(wǎng)絡(luò)原因很難下載下來滔灶。
由于公司內(nèi)部網(wǎng)絡(luò)不能FQ,所以沒有辦法下載斗这。但是钮莲,想到每次在使用Android Studio時(shí)總是可以下載下來的崔拥,于是我就將 vlc-andorid 項(xiàng)目導(dǎo)入到 Android Studio 拆魏,雖然同步失敗了俺附,顯示有許多錯(cuò)誤事镣,但是,當(dāng)再次執(zhí)行 compile.sh 腳本時(shí)随闪,竟然破天荒的下載成功了俏讹!

  • 執(zhí)行 compile.sh 腳本泽疆,開始編譯

如果你看到下面的提示梯浪,恭喜你成功了!

vlc_android.png

編譯完成

編譯成功后的APK在 /home/skylark/projects/vlc-android/vlc-android/build/outputs/apk/VLC-Android-2.1.16-ARMv7.apk
編譯成功后的aar包在 /home/skylark/projects/vlc-android/libvlc/build/outputs/aar/libvlc-3.0.0-null.aar

編譯出錯(cuò)解決

  • 如果在執(zhí)行compile.sh腳本時(shí),遇到SDK或NDK環(huán)境變量未指定,則修改compile.sh吻育,手動(dòng)寫死環(huán)境變量
ANDROID_SDK=/home/skylark/Software/android-sdk
ANDROID_NDK=/home/skylark/Software/android-ndk-r13b
ANDROID_ABI=armeabi-v7a
  • 如果在執(zhí)行compile.sh腳本時(shí)摊趾,遇到 compile.sh: line 283: ./compile-libvlc.sh: Permission denied
    ,則修改compile.sh
#./compile-libvlc.sh $OPTS
sh compile-libvlc.sh $OPTS
  • 如果在執(zhí)行compile.sh腳本時(shí),遇到 Could not resolve all dependencies for configuration ':classpath'.
    侨糟,則修改compile.sh
#classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.android.tools.build:gradle:2.3.3'

寫在最后

以上就是如何在 Ubuntu 16.04 下編譯VLC源碼的步驟。

如果你在參考過程中遇到問題,可以在我的聯(lián)系方式中給我提問汰具。

后面會(huì)繼續(xù)介紹吟孙,Android的相關(guān)知識藻治,歡迎繼續(xù)關(guān)注我博客的更新。

參考資源

轉(zhuǎn)載請注明:XueLong的博客 ? 從零開始,手把手教你如何在Ubuntu下編譯VLC-Android源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市变过,隨后出現(xiàn)的幾起案子媚狰,更是在濱河造成了極大的恐慌,老刑警劉巖裳瘪,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泪酱,死亡現(xiàn)場離奇詭異,居然都是意外死亡斯撮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒典,“玉大人,你說我怎么就攤上這事⊥傅校” “怎么了内列?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵寝姿,是天一觀的道長饵筑。 經(jīng)常有香客問我根资,道長部脚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮拉庵,結(jié)果婚禮上茫蛹,老公的妹妹穿的比我還像新娘。我一直安慰自己柬采,他們只是感情好礁遣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布盈包。 她就那樣靜靜地躺著呢燥,像睡著了一般疮茄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徙邻,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天缰犁,我揣著相機(jī)與錄音怖糊,去河邊找鬼伍伤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛麦乞,可吹牛的內(nèi)容都是我干的劝评。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼插龄!你這毒婦竟也來了辫狼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤见秤,失蹤者是張志新(化名)和其女友劉穎鹃答,沒想到半個(gè)月后突硝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體解恰,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腐宋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胸竞。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卫枝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腺占,到底是詐尸還是另有隱情痒谴,我是刑警寧澤积蔚,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布尽爆,位于F島的核電站,受9級特大地震影響槐雾,放射性物質(zhì)發(fā)生泄漏幅狮。R本人自食惡果不足惜崇摄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一逐抑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧进每,春花似錦命斧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽船殉。三九已至,卻和暖如春挨厚,著一層夾襖步出監(jiān)牢的瞬間糠惫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人城菊。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓凌唬,卻偏偏與公主長得像漏麦,于是被迫代替她去往敵國和親唁奢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評論 25 707
  • VLC for Android簡介 關(guān)于VLC for Android,做過音視頻相關(guān)的開發(fā)者應(yīng)該都聽說過他的大名...
    esonyf閱讀 4,338評論 6 4
  • 前端時(shí)間項(xiàng)目中用到了視頻播放的功能脊奋,沒辦法又不想使用系統(tǒng)自帶的播放器熬北,沒有為什么就是不想用,我也希望谷歌爸爸能出一...
    Ggx的代碼之旅閱讀 7,015評論 25 7
  • 塵封多年的舊書又得以見天日 已忘卻了紙上的文字 今日又讀你 被那高貴深處的清澈打動(dòng) 想必那時(shí)的曾經(jīng)年少是讀不懂你的...
    岳Domke閱讀 340評論 2 1
  • 15Arrays工具類 A:Arrays工具類:public class ArraysDemo {public s...
    葡小萄家的貓閱讀 485評論 0 0