零、说明:
1、本文的目录结构为,在用户路径/home/sunshine/下,建立android/env/路径,之后的adt、ndk、jdk均直接解压到/home/sunshine/ android/env/路径下,gitclone下来的源码放置在/home/sunshine/android/路径下;
2、按照本文编译成功的vlc运行时有bug:两次点击播放按钮才能播出网络视频,把4月份下载的jni文件取代gitclone中的jni文件可以解决此问题。
一、配置编译环境
1、安装Ubuntu12.04
下载32位的Ubuntu12.04LTS版本并安装,配置好网络使其连接到公网。
2、安装JDK
2.1在oracal官网下载LINUX版本JDK,网址
http://www.oracle.com/technetwork/java/javase/downloads/index.html
(注意下载和ubuntu对应的32位版本)
2.2解压(注意路径,之后的很多配置都和此路径有关)
tar –zxvf jdk-7u25-linux-i586.tar.gz -C /home/sunshine/android/env
2.3配置相关环境变量
在.bashrc中增加(在主目录下执行 "ls -a",可以看到“.bashrc”)如下配置:
export JAVA_HOME=/home/sunshine/android/env/jdk1.7.0_25
export JRE_HOME=/home/sunshine/android/env/jdk1.7.0_25/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
完成后如下图1所示
图1
图1
2.4重新启动终端
2.5验证
在终端中运行java –version来查看Java的版本信息。
如果显示如图2所示,基本可以判定jdk安装成功,最好是编写一个java程序,运行一下进行验证。
图2
3、安装ADT
3.1下载
网址:http://developer.android.com/sdk/index.html
3.2解压
把解压后的文件夹放到与jdk同一个目录下。
3.3配置
运行eclipse,配置sdk路径,默认已经配置好,不需要进行配置。
如果打开eclipse时出现以下错误:
A Java Runtime Environment (JRE) or Java Development Kit (JDK)
must be available in order to run Eclipse. No Javavirtual machine
was found after searching the following locations:
/home/kang/work/env/eclipse/jre/bin/java
java in your current PATH
然而,如果通过终端,及以命令行的方式执行,则不会有问题,可以正常启动。
以下方法可以解决:
$ cd <eclipse dir>
$ ln -sf $JRE_HOME jre
目的是在eclipse安装目录下建立一个名称为jre的链接,将其指向java安装目录下的jre目录。
4、配置NDK
4.1下载
网址:http://developer.android.com/tools/sdk/ndk/index.html
4.2解压
tar –jxvf android-ndk-r8e-linux-x86.tar.bz2 -C /home/sunshine/android/env
4.3 配置环境变量
在PATH中增加/home/sunshine/android/env/android-ndk-r8e
重启使其生效。
4.4 验证
在终端中输入ndk-build,如果见到如图3结果,则配置成功。
图3
5、配置环境变量
如图4所示,在.bash.rc中增加
export ANDROID_SDK=/home/sunshine/android/env/adt-bundle-linux-x86-20130717/sdk
export ANDROID_NDK=/home/sunshine/android/env/android-ndk-r8e
export ANDROID_ABI=armeabi-v7a
在PATH后追加两个路径
$ANDROID_SDK/platform-tools和$ANDROID_SDK/tools,也可以写为绝对路径
/home/sunshine/android/env/adt-bundle-linux-x86-20130717/sdk/platform-tools和
/home/sunshine/android/env/adt-bundle-linux-x86-20130717/sdk/tools
图4
6、安装工具
安装如下全部软件:
git, ant, autoconf, automake, autopoint, cmake, gawk, gcc, g++, libtool, m4, patch, pkg-config, ragel.
二/获得源码
git clone git://git.videolan.org/vlc-ports/android.git
三/编译
执行compile.sh
遇到的问题:
问题1、
“You must define ANDROID_NDK, ANDROID_SDK and ANDROID_ABI before starting
ANDROID_ABI should match your ABI: armeabi-v7a, armeabi or …”
解决方法:执行source .bashrc
问题2
wget: 无法解析主机地址 “heanet.dl.sourceforge.net”
make: *** [../../contrib/tarballs/freetype-2.4.11.tar.gz]错误 4
解决方法:手动下载 freetype-2.4.11.tar.gz,放置在
/home/sunshine/android/android/vlc/contrib/tarballs目录下,注意删除tmp临时文件。
问题3
同问题2相似,如下文件不能自动下载,手动下载后放置到
/home/sunshine/android/android/vlc/contrib/tarballs目录下,
问题即可解决。
经常下载不到的文件:libmpeg2-0.5.1.tar.gz libmodplug-0.8.8.4.tar.gz libpng-1.5.14.tar.bz2 taglib-1.8.tar.gz zlib-1.2.7.tar.gz
附:官网编译流程
网址:http://wiki.videolan.org/AndroidCompile
AndroidCompile
This page is an introduction to the compilation of VLC for Android on Linux.
Contents[hide] · 1 Eclipse, SDK and NDK installation § 3.1.2 Package in Eclipse [optional] o 3.2 Run |
Eclipse, SDK and NDK installation
Requirements
§ You MUST be on Linux, and a recent one; or OSX.
§ You MUST have installed: apache-ant (or ant), autoconf, automake, autopoint, cmake, gawk (or nawk), gcc, g++, libtool, m4, patch, pkg-config,ragel, subversion, and very up-to-date versions of those tools.
§ Special note: Additionally, if you are compiling for an Android-x86 device, you should install yasm.
§ You MUST install: git.
Android SDK
1. Create a working directory android.
2. Go to Android SDK page and download the latest SDK for linux.
3. Decompress into android folder.
4. Run tools/android (from the command line you can also run: "tools/android update sdk -u -t platform,platform-tool,extra")
5. In the tool, install "SDK Platform Android 4.0, API 17", and follow the instructions.
You can have more details, if needed.
Android NDK
1. Check that the SDK installation is correct.
2. Go to Android NDK page and download the NDK r8b for Linux.
3. Decompress into android folder, next to your android-sdk-linux folder.
Eclipse
As used by your distribution, install Eclipse with your package manager:
apt-get install eclipse (debian)
yum install eclipse (Fedora)
pacman -S eclipse (Arch)
emerge -av eclipse-sdk (Gentoo)
...
And run it, at least once, and then quit eclipse.
Note: On Debian-based distributions it is better to download Eclipse indigo builds from the official website: http://www.eclipse.org/downloads/, otherwise it can lead to an error when importing the ADT plugin (see following).
ADT
The ADT plugin is required to compile on Android.
1. Go to ADT page.
2. Start Eclipse, then select Help > Install New Software....
3. Add the "ADT Plugin" repository with https://dl-ssl.google.com/android/eclipse/ as URL
4. Validate and select the checkbox next to Developer Tools and click Next, Next, Finish.
5. Restart Eclipse.
6. Go to Menu > Window > Preferences... and then Android from the left pane.
7. Point the SDK Location in to your downloaded SDK directory.
8. Ok, and quit Eclipse.
Environment setup
Set $ANDROID_SDK to point to your Android SDK directory
export ANDROID_SDK=/path/to/android-sdk
Set $ANDROID_NDK to point to your Android NDK directory
export ANDROID_NDK=/path/to/android-ndk
Add some useful binaries to your $PATH
export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools
Devices
You need to export the ABI for your device. armeabi-v7a
is for devices with ARMv7 or above (regardless of NEON), any other ARM device uses armeabi
, x86/Intel devices use x86
.
export ANDROID_ABI=armeabi-v7a
or
export ANDROID_ABI=armeabi
For a build that will run on x86 Android devices (e.g. certain Intel Android smartphones):
export ANDROID_ABI=x86
For a build that will run on MIPS devices (i.e. Ainol Novo tablets):
export ANDROID_ABI=mips
The following flags (NEON, FPU, ARMV6) are relevant only for the armeabi ABI:
If you plan to use an armeabi device that does not support FPU, you need a build without FPU
export NO_FPU=1
If you plan to use an ARMv5 armeabi device (read: Android Emulator), you need a build without ARMv6
export NO_ARMV6=1
Examples
§ For a normal (2012 consumer phone or tablet), like Cortex-A8 or Cortex-A9
export ANDROID_ABI=armeabi-v7a
§ For a Tegra2 device
export ANDROID_ABI=armeabi-v7a
§ For an ARMv6 device
export ANDROID_ABI=armeabi
§ For an ARMv6 device without FPU
export ANDROID_ABI=armeabi
export NO_FPU=1
§ For an ARMv5 device or the emulator
export ANDROID_ABI=armeabi
export NO_ARMV6=1
§ For a x86 device (e.g. Android-x86, Google TV, Logitech TV, etc)
export ANDROID_ABI=x86
§ For a MIPS device (i.e. Ainol Novo tablets):
export ANDROID_ABI=mips
Those exports must be set at all times, notably for the contribs and the configure.
Building
Get VLC Source
Clone the source from the VLC git!
In your android folder, run:
Compile
Read compile.sh first, as it contains some very useful and important information. Then run it:
sh compile.sh
Note: At this point, you will get an autogenerated debug apk in the bin/ folder, signed with a debug key.
In order to build a non-debug package:
sh compile.sh release
Note: At this point, you will get an unsigned release apk in the bin/ folder, which you will have to sign and zipalign.
Package in Eclipse [optional]
1. In Eclipse, create a new Android Project from existing source by importing from the vlc-android path.
2. Export unsigned/signed apk.
Note: Building against JDK6 is recommended for optimal compatibility (Set Java Compiler Compliance to 1.6).
Run
Run it and enjoy!
Debugging
Here are some helpful links if you wish to debug VLC on Android:
§ DDMS
§ Logcat
Native debugging
If you run VLC Android and you get a crash that looks something like this:
I/DEBUG ( 958): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 958): Build fingerprint: 'MOTO/MBTCA/sesame/XT300:2.1-update1/SESLA_U3_01.71.0/110110:user/release-keys'
I/DEBUG ( 958): pid: 1733, tid: 1733 >>> org.videolan.vlc <<<
I/DEBUG ( 958): signal 11 (SIGSEGV), fault addr 4237be3c
I/DEBUG ( 958): r0 423640a0 r1 7ece77ac r2 42bccdac r3 4237be38
I/DEBUG ( 958): r4 00000000 r5 42bccdac r6 002ed088 r7 002ed018
I/DEBUG ( 958): r8 7ece78e8 r9 2bafa844 10 0000000e fp 7ece794c
I/DEBUG ( 958): ip 00002ba0 sp 7ece7784 lr 423652e4 pc 4237be3c cpsr 60000010
I/DEBUG ( 958): #00 pc 0037be3c /data/data/org.videolan.vlc/lib/libvlcjni.so
I/DEBUG ( 958): #01 lr 423652e4 /data/data/org.videolan.vlc/lib/libvlcjni.so
You have a native crash. To debug it, you need to have compiled VLC as above and installed it on your device. Once your compiled VLC build is on your device, you can find the backtrace as follows:
1. Make sure you are in the directory that you checked out VLC-Android in.
2. cd vlc-android
3. $ANDROID_NDK/ndk-gdb --verbose --force --start
At this point, lots of stuff will appear:
Android NDK installation path: /opt/android-ndk-r8c
Using default adb command: /opt/android-sdk-linux_x86/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.29
Using ADB flags:
Using auto-detected project path: .
Found package name: org.videolan.vlc
...bunch of stuff skipped...
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Remote debugging from host 0.0.0.0
...bunch of stuff skipped...
libthread_db:td_ta_new: Victory: We can debug theads!
warning: Breakpoint address adjusted from 0x400deaa5 to 0x400deaa4.
0x40107a40 in epoll_wait () from /media/data/vlc_android/vlc-android/obj/local/armeabi/libc.so
(gdb)
4. At this point, type in "continue" and press Enter.
5. Perform the actions you did to make it crash. It will spit out something like this:
Program received signal SIGSEGV, Segmentation fault.
0x401120ae in ?? () from /media/data/vlc_android/vlc-android/obj/local/armeabi/libc.so
6. Now, just type in "bt full" (excluding the quotation marks) and press Enter. That is your backtrace that you should give to the developers when they ask for it (possibly on a pastebin, too).
(gdb) bt full
#0 0x401120ae in ?? () from /media/data/vlc_android/vlc-android/obj/local/armeabi/libc.so
No symbol table info available.
#1 0x40107bd8 in abort () from /media/data/vlc_android/vlc-android/obj/local/armeabi/libc.so
No symbol table info available.
#2 0x40118e6a in __assert2 () from /media/data/vlc_android/vlc-android/obj/local/armeabi/libc.so
No symbol table info available.
#3 0x5e0cdfdc in var_SetChecked (p_this=0x40134b94, psz_name=0x5ea2fcb8 "rate", expected_type=80, val=...) at ../../src/misc/variables.c:711
i_ret = 0
p_var = <optimized out>
oldval = {i_int = 4742037487051810480, b_bool = 176, f_float = 2.27765068e+14, psz_string = 0x574f26b0 "X\270|B\001\001", p_address = 0x574f26b0,
p_object = 0x574f26b0, p_list = 0x574f26b0, i_time = 4742037487051810480, coords = {x = 1464805040, y = 1104091640}}
__func__ = "var_SetChecked"
p_priv = <optimized out>
#4 0x5e06dd9c in var_SetFloat (f=1.41421354, psz_name=0x5ea2fcb8 "rate____sample_backtrace", p_obj=0x0) at ../../include/vlc_variables.h:262
val = <optimized out>
#5 libvlc_media_player_set_rate (p_mi=0x0, rate=1.41421354) at ../../lib/media_player.c:1252
p_input_thread = <optimized out>
#6 0x5de7bd18 in Java_org_videolan_vlc_LibVLC_setRate (env=0x41cf0470, thiz=0x8ab00021, rate=1.41421354) at jni/libvlcjni.c:678
mp = 0x0
#7 0x4076de34 in ?? ()
No symbol table info available.
#8 0x4076de34 in ?? ()
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Troubleshooting
Outdated Awk
If you receive the error message while building:
Android NDK: Host 'awk' tool is outdated. Please define HOST_AWK to point to Gawk or Nawk !
The prebuilt version of Awk that comes with the Android NDK is outdated. Defining HOST_AWK in your environment does nothing as the system still tries to just the one that comes with the Android NDK. To get around this issue, simply rename or delete the Awk binary that comes with the Android NDK. For example to move it:
mv $ANDROID_NDK/prebuilt/linux-x86/bin/awk $ANDROID_NDK/prebuilt/linux-x86/bin/awk.old
Can't find Ant
If you're new to Ant, please be aware that some Linux distributions don't install it in the usual spot as with other programs. Try checking to see if the directory /usr/share/java/apache-ant/bin exists and add it to your path.
Outdated autotools-dev
If you get the following error message you may have have an outdated version of autotools-dev:
Invalid configuration `arm-linux-androideabi': system `androideabi' not recognized
You may first want to check if your distribution has any available updates for this package. Alternatively, you can manually update your config.guess and config.sub files from here: [1]. These files are typically located in /usr/share/misc on Debian based distributions.
autoreconf: automake failed with exit status: 1
automake: warnings are treated as errors
configure.ac:41: warning: The 'AM_PROG_MKDIR_P' macro is deprecated, and will soon be removed.
configure.ac:41: You should use the Autoconf-provided 'AC_PROG_MKDIR_P' macro instead,
configure.ac:41: and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.
If you are using Automake 1.13 or higher, you must remove -Werror from vlc/contrib/android/gnutls/configure.ac to continue. (First reported in[2])
See also
§ Android Report bugs - Bug reporting guide for VLC-Android.
· Building