Ubuntu系统编译ijkplayer

  • 系统:Ubuntu 16.04 64位 一定要安装64位系统,否则之后编译会出各种问题。

1. 下载NDK r10e

1
2
wget -q https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip && \
unzip android-ndk-r10e-linux-x86_64.zip && \

2. 设置环境变量

1
export ANDROID_NDK=/path/to/android-ndk

也可以将其添加到~/.bashrc,然后执行source ~/.bashrc使其长久生效

3. 使用bash而不是dash

1
2
# choose [No] to use bash
sudo dpkg-reconfigure dash

4. 下载源码并编译

如果下载慢,就挂代理。推荐 Vultr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Build Android
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8

./init-android.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

cd ..
./compile-ijk.sh all

# Android Studio:
# Open an existing Android Studio project
# Select android/ijkplayer/ and import
#
# define ext block in your root build.gradle
# ext {
# compileSdkVersion = 23 // depending on your sdk version
# buildToolsVersion = "23.0.0" // depending on your build tools version
#
# targetSdkVersion = 23 // depending on your sdk version
# }
#
# If you want to enable debugging ijkplayer(native modules) on Android Studio 2.2+: (experimental)
# sh android/patch-debugging-with-lldb.sh armv7a
# Install Android Studio 2.2(+)
# Preference -> Android SDK -> SDK Tools
# Select (LLDB, NDK, Android SDK Build-tools,Cmake) and install
# Open an existing Android Studio project
# Select android/ijkplayer
# Sync Project with Gradle Files
# Run -> Edit Configurations -> Debugger -> Symbol Directories
# Add "ijkplayer-armv7a/.externalNativeBuild/ndkBuild/release/obj/local/armeabi-v7a" to Symbol Directories
# Run -> Debug 'ijkplayer-example'
# if you want to reverse patches:
# sh patch-debugging-with-lldb.sh reverse armv7a
#
# Eclipse: (obselete)
# File -> New -> Project -> Android Project from Existing Code
# Select android/ and import all project
# Import appcompat-v7
# Import preference-v7
#
# Gradle
# cd ijkplayer
# gradle

编译成功后会在/ijkplayer-android/android/ijkplayer/下面,ijkplayer-armv7aijkplayer-arm64module中的/src/main/libs文件夹生成适配不同CPU的so库。

问题1

1
2
3
4
5
6
7
8
--------------------
[*] make NDK standalone toolchain
--------------------
build on Linux i686
ANDROID_NDK=/usr/vlc/android-ndk
NDKr10e-rc4(64-bit) detected
Host system 'linux-x86' is not supported by the source NDK!
Try --system=<name> with one of: linux-x86_64

解决方法:

/ijkplayer-android/android/contrib/tools/do-compile-ffmpeg.sh文件中找到以下内容

1
2
3
4
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
$FF_MAKE_TOOLCHAIN_FLAGS \
--platform=$FF_ANDROID_PLATFORM \
--toolchain=$FF_TOOLCHAIN_NAME

然后增加--system=linux-x86_64变为

1
2
3
4
5
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
$FF_MAKE_TOOLCHAIN_FLAGS \
--platform=$FF_ANDROID_PLATFORM \
--toolchain=$FF_TOOLCHAIN_NAME \
--system=linux-x86_64

问题2

1
2
arm-linux-androideabi-gcc is unable to create an executable file.
C compiler test failed.

解决方法:

安装64位Ubuntu系统。


ijkplayer on github

坚持原创技术分享,您的支持将鼓励我继续创作!