分享下自己编译 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.mzph.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…