分享下自己編譯 XBMC 的過程(zhuan)

刷YunOS贏魅族MX3
首先要感謝下網上其他網友的經驗,沒有這些經驗有的問題還是不太好解決~

先介紹下編譯環境,操作系統是 CentOS 6.5 64位 (最小桌面版本安裝,除了最基本的組件外,類似 java 什么的都沒有安裝),系統是在 vmware 虛擬機上安裝的,virutalbox 也安裝過,不過相對于 vmware 在多線程編譯時,virutalbox 似乎不能完全用到 CPU 資源。官方 github 上的文檔說明是基于 ubuntu 的,和 CentOS 還是有些差別的,主要是一些包的名稱和用法不太一樣。正是基于這些差別,所以才把 CentoOS 上的編譯過程和大家分享一下。另外,本說明是通過 git 直接獲取最新源碼,來進行編譯的,和官方的每日構建版本差不多,只不過加入了天貓魔盒硬解相關的編譯參數。

下面開始逐步介紹下如何進行編譯,其實主要步驟還是參照上面提到的官方編譯文檔,只是有些地方遇到問題,把如何解決的介紹下,類似一些切換編譯目錄什么的,如果沒有說清楚還需要參照官方文檔來對照下。

1、安裝編譯需要的環境支持:

yum install git curl autoconf unzip zip gawk gperf cmake gcc gcc-c++

2、因為是 64 位的 CentOS,所以還需要安裝 32 位支持,官方文檔上介紹的方式是 ubuntu 特有的,不適用于 CentOS


yum install glibc-2.12-1.80.el6.i686

yum install libstdc++-4.4.6-4.el6.i686

yum install zlib-1.2.3-29.el6.i686
注:如果編譯過程中提示某些 .so 文件有問題,可以通過 yum whatprovides 來查找對應的安裝包,如上述三個包其實就是通過這種方式找到的
yum whatprovides */ld-linux.so.2
yum whatprovides libstdc++.so.6
yum whatprovides libz.so.1

3、由于官方文檔中說明需要使用 android api 版本是 14,gcc 版本是 4.8,CentOS 6.5 提供的 gcc 版本是 4.4 的,所以需要手動編譯下最新版本的 gcc,我這里用到的是 4.8.2 版本的,編譯過程參考的是這篇文章:http://blog.csdn.net/yanxiangtianji/article/details/12782839

4、從 oracle 下載 1.6 版本的 JDK 并安裝,配置 .bashrc,這里只演示下大概的操作
chmod 755 jdk-6u41-linux-x64.bin
./jdk-6u41-linux-x64.bin


進入當前登錄用戶的 HOME 目錄,我使用 root 登錄的
cd ~
vim .bashrc
JAVA_HOME=寫入上面 jdk 的安裝路徑
export JAVA_HOME
export $PATH=$PATH:$JAVA_HOME/bin

5、下載并安裝 android sdk
wget http://dl.google.com/android/android-sdk_r22.3-linux.tgz
tar zxvf android-sdk_r22.3-linux.tgz
cd android-sdk-linux/tools
./android update sdk -u -t android-14,platform-tool
這里有點和官網文檔不一樣,官網上的命令會下載所有 android 的 api 相關的包,下載量相當大,網速不佳的情況下非常耗時,所以這里精簡了一下。使用這種方式下載的 platform-tools 是 r19 版本的,而實際上編譯到最后會執行類似的命令 /home/android/android-sdk-linux/platform-tools/aapt p -f -I /home/android/android-sdk-linux//platforms/android-14/android.jar -S tmp/res/ -M xbmc/AndroidManifest.xml -F images/xbmcapp-debug-skeleton.apk -J xbmc/src。也就是要在 platform-tools 中運行命令 aapt。上述安裝的 platform-tools 的版本是 r19,僅僅有 adb 等工具,相比于 r14 版本,少了很多東西,所以需要用 r14 版本的進行替換。r14 版本下載地址為 http://dl-ssl.google.com/android/repository/platform-tools_r14-linux.zip,下載完成后解壓縮到 /home/android/android-sdk-linux/ 即可。

6、下載并安裝 ndk
當前的 XBMC 源碼必須使用 android-ndk-r9 版本的 NDK,r9b 不行,后面會報錯。參考:http://forum.xbmc.org/showthread.php?tid=177292。下載完成解壓縮后,執行
./make-standalone-toolchain.sh --ndk-dir=../../ --install-dir=/home/android/arm-linux-androideabi-4.8-vanilla/android-14 --platform=android-14 --toolchain=arm-linux-androideabi-4.8 --system=linux-x86_64

7、生成簽名密鑰,參考官方文檔

8、到這里 XBMC 需要的環境基本準備完畢,根據官方文檔通過 git 下載源碼后,開始編譯 XBMC
先加入天貓魔盒平臺需要的編譯參數,在/xbmc-android/tools/depends/target/xbmc/Makefile 中加入
CONFIGURE += --enable-codec=amcodec
CONFIGURE += --enable-player=amlplayer
MakeFile 文件修改完成后,執行配置
./configure --with-tarballs=/home/android/xbmc-tarballs --host=arm-linux-androideabi --with-sdk-path=/home/android/android-sdk-linux/ --with-ndk=/home/android/android-ndk-r9 --with-toolchain=/home/android/arm-linux-androideabi-4.8-vanilla/android-14/ --prefix=/home/android/xbmc-depends
此處注意 --with-toolchain 必須與第 6 步中的 --install-dir 一致,否則會報 pcre-8.33 編譯錯誤

9、make -j20,make -C 成功后輸出:
————————
XBMC Configuration:
————————
git Rev.: 20131217-4da7cfb
Shared lib Yes
Debugging: Yes
Profiling: No
Optimization: Yes
SWIG Available: Yes
JRE Available: Yes
Doxygen Available: No
Crosscomp.: Yes
Native Root: /home/android/xbmc-depends/x86_64-linux-gnu-native
target ARCH: arm
target CPU: cortex-a9
OpenGLES: Yes
ALSA: No
DBUS: No
VDPAU: No
VAAPI: No
CrystalHD: No
VTBDecoder: No
OpenMax: No
Joystick: No
XRandR: No
Waveform: Yes
Spectrum: Yes
GOOM: No
RSXS: Yes
FishBMC: No
ProjectM: No
Skin Touched: Yes
X11: No
Wayland: No
Bluray: Yes
TexturePacker:Yes
MID Support: No
ccache: No
ALSA Support: No
PulseAudio: No
HAL Support: No
DVDCSS: Yes
Google Test Framework Configured: No
Avahi: No
mDNSEmbedded: Yes
Non-free: Yes
ASAP Codec: No
MySQL: Yes
Webserver: Yes
libssh support: Yes
libRTMP support: Yes
libsmbclient support: Yes
libnfs client support:Yes
libafpclient support: Yes
AirPlay support: Yes
AirTunes support (libshairplay): Yes
UPnP support: Yes
Optical drive: No
libudev support: No
libusb support: Yes
libcec support: Yes
libmp3lame support: Yes
libvorbisenc support: Yes
libcap support: No
additional players: Yes, amlplayer
additional codecs: Yes, amcodec
External FFmpeg: No
PVR add-ons: No
prefix: /home/android/xbmc-depends/arm-linux-androideabi-android-14

10、執行
make
make apk
編譯完成。

經測試編譯后的 apk 是可以在天貓魔盒上使用的,不過 XBMC 上顯示的分辨率是 1280×720,root 以后,也是如此。參考小米上網友的方案,通過 rootexplorer 修改 /system/build.prop 里面的縮放和寬高參數,XBMC 是可以識別到 1920×1080 的,但此時整個盒子系統的 UI 就很不正常了。

2013-12-25 更新
經過測試,正確 root 后雖然 XBMC 里面仍然顯示分辨率是 1280×720,不過已經可以自動全屏顯示了。用的 root 工具是壇子里面提供的一鍵 root 工具,里面用的是 kingroot,所以理論上 kingroot 可以直接 root。
看有網友想要個編譯好的版本,上傳到了百度上,需要的自己下吧:http://pan.baidu.com/s/1jGLVOz0

?

轉載于:https://www.cnblogs.com/fireflyxml/p/3992137.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376626.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Xcode和Instruments調試解決iOS內存泄露

雖然iOS 5.0版本之后加入了ARC機制,但由于相互引用關系比較復雜時,內存泄露還是可能存在。所以了解原理很重要。 這里講述在沒有ARC的情況下,如何使用Instruments來查找程序中的內存泄露,以及NSZombieEnabled設置的使用。 本文假設…

0755、0644、0600 linux文件權限

0755->即用戶具有讀/寫/執行權限,組用戶和其它用戶具有讀寫權限; 0644->即用戶具有讀寫權限,組用戶和其它用戶具有只讀權限; 0600->僅擁有者具有文件的讀取和寫入權限

[Android] (在ScrollView里嵌套view)重疊view里面的onTouchEvent的調用方法

在我前面的自定義裁剪窗口的代碼中,我把裁剪的view放在了大的scrollview里,這樣就出現了程序只能觸發scrollview,無法操作我的裁剪窗口。所以我加了那篇博客下面最后兩段代碼。其實我遇到這個問題的時候是在一個scrollview里添加了一個Editte…

帶點擊事件的Spinner

最近有一個蛋疼的需求,在下拉框中,如果只有一個值,默認顯示出來,有兩個或者沒有顯示請選擇,沒有點擊不彈框,但是要清空,兩個點擊開要移掉請選擇字樣的項 本來以為很簡單,后來發現沒有…

linux進程間通信快速入門【二】:共享內存編程(mmap、XSI、POSIX)

文章目錄mmap內存共享映射XSI共享內存POSIX共享內存參考使用文件或管道進行進程間通信會有很多局限性,比如效率問題以及數據處理使用文件描述符而不如內存地址訪問方便,于是多個進程以共享內存的方式進行通信就成了很自然要實現的IPC方案。LInux給我們提…

ROBOTS.TXT屏蔽筆記、代碼、示例大全

自己網站的ROBOTS.TXT屏蔽的記錄,以及一些代碼和示例: 屏蔽后臺目錄,為了安全,做雙層管理后臺目錄/a/xxxx/,蜘蛛屏蔽/a/,既不透露后臺路徑,也屏蔽蜘蛛爬后臺目錄 緩存,阻止蜘蛛爬靜態…

五大主流瀏覽器 HTML5 和 CSS3 兼容性比較

轉眼又已過去了一年,在這一年里,Firefox 和 Chrome 在拼升級,版本號不斷飆升;IE10 隨著 Windows 8 在去年10月底正式發布,在 JavaScript 性能和對 HTML5 和 CSS3 的支持方面讓人眼前一亮。這篇文章給大家帶來《五大主流…

Ubuntu下將Sublime Text設置為默認編輯器

轉自將Sublime Text 2設置為默認編輯器 修改defaults.list 編輯/etc/gnome/default.list文件,將其中的所有gedit.desktop替換為sublime_text.desktop。 sublime_text.desktop在/opt/sublime_text目錄下,使用ls -al *sublime*命令查看具體文件名。 轉載于…

python獲取最近N天工作日列表、節假日列表

# 獲取最近兩周工作日列表、節假日列表 import datetime import chinese_calendar import time import pandas as pd# 將時間戳轉換成格式化日期 def timestamp_to_str(timestampNone, format%Y-%m-%d %H:%M:%S):if timestamp:time_tuple time.localtime(timestamp) # 把時間…

保存頁面的瀏覽記錄

我的設計思想是將用戶的瀏覽記錄保存到cookie里面,然后根據情況處理。cookie里面的數據格式是json格式,方便根據自己的需要添加或者修改屬性。引用了3個js文件,下載地址如下。 https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js …

開竅小老虎,一步一個腳印之 初識匯編(一)

最近一直浸淫在計算機編程中無法自拔。哲學 認識論中講過。人類的求知的過程是由兩次飛躍。第一是從感性認識到理性認識;第二是從理性認識到實踐。這段話對有些人是適用的。我就是其中的一名。在知乎上求助問題“學計算機要懂匯編嗎?”,地下有…

python腳本 請求數量達到上限,http請求重試

由于在內網發送http請求同一個token會限制次數,所以很容易達到網關流量上限。 業務中使用了多線程并發,一個線程發起一次http請求,得到正確結果后返回。這里采用的策略是,如果解析出來達到流量上限,那么該線程休眠一段…

shell 字符串操作

string"abcABC123ABCabc" 字符串長度: echo ${#string} #15 echo expr length $string #15 索引 用法:expr index $string $substring expr index $string "ABC" #4 提取子串 用法:${string:position} echo ${string:3} #A…

Linux 之目錄 -鳥哥的Linux私房菜

因為利用 Linux 來開發產品或 distributions 的社群/公司與個人實在太多了, 如果每個人都用自己的想 法來配置檔案放置的目錄,那么將可能造成很多管理上的困擾。 你能想象,你進入一個企業之后,所 接觸到的 Linux 目錄配置方法竟然跟你以前學的完全不同嗎? 很難想象吧~所以,后來…

python腳本:向表中插入新數據,刪除表中最舊的數據

一張表存儲歷史數據,最多存儲HISTORY_TABLE_MAX_ROWS條數據,當表中數據未達到HISTORY_TABLE_MAX_ROWS,直接插入;如果達到的話需要保證插入新數據的時候將最舊的數據刪除 這里使用先update最新數據,然后再重新update全表…

精通 VC++ 實效編程280例 - 02 菜單和光標

菜單和關閉時重要的 Windows 資源之一。SDK 中,用 HCURSOR 和 HMENU 分別表示菜單和光標的句柄。MFC 中,CMenu 類封裝了菜單的功能。 23 動態添加和刪除菜單項 添加菜單項可以調用 CMenu::AppendMenu 或 CMenu::InserMenu 函數,刪除菜單項可以…

POJ 1860: Currency Exchange 【SPFA】

套匯問題,從源點做SPFA,如果有一個點入隊次數大于v次(v表示點的個數)則圖中存在負權回路,能夠套匯,如果不存在負權回路,則判斷下源點到自身的最長路是否大于自身,使用SPFA時松弛操作…

python腳本:判斷字符是否為中文

# 判斷字符是否為中文 def is_chinese(ch):if u\u4e00 < ch < u\u9fff:return Trueelse:return False

Android 廣播 Broadcast學習

Android Broadcast 廣播 進程內本地廣播 如果你是在你的應用之內使用廣播&#xff0c;即不需要跨進程&#xff0c;考慮使用LocalBroadcastManager &#xff0c;這樣更有效率&#xff08;因為不需要跨進程通信&#xff09;&#xff0c;并且你不用考慮一些其他應用可以發送或接收…

python:將時間戳轉換成格式化日期

import time # 將時間戳轉換成格式化日期 def timestamp_to_str(timestampNone, format%Y-%m-%d %H:%M:%S):if timestamp:time_tuple time.localtime(timestamp) # 把時間戳轉換成時間元祖result time.strftime(format, time_tuple) # 把時間元祖轉換成格式化好的時間retur…