一、安装适用于Linux的Windows子系统
1.1 什么是WSL
Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
1.2 先决条件
必须运行 Win10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Win11
1.3 安装WSL(这里的图以win11为例。win10大同小异)
1、通过快捷键"windows键+R",打开运行窗口,输入:control appwiz.cpl。
2、在打开的控制面板的程序和功能界面,点击左边的“启用或关闭windows功能”。
3、在弹出的“windows功能”窗口中找到“适用于Linux的windows子系统”,勾选中然后点击“确定”。
4、从开始菜单中找到并点击“Microsoft Store”图标并进入windows应用商店。
5、在windows应用商店中搜索“linux”关键字,从结果中选择“在windows上运行Linux”。
6、在新打开的页面中,会显示可以在windows 10上安装的linux系统,选择自己想要安装的一款,然后跟从向导安装。(这里选择了Ubuntu 20.04.5 LTS)
二、安装编译环境
2.1 配置JDK
下载linux版本中后缀为 .tar.gz 的包,x86 代表 32 位,x64 代表 64 位。我下载的是 jdk-8u351-linux-x64.tar.gz。
JDK官方发下载地址 Java Downloads | Oracle 中国
提升权限
sudo su
创建工程目录
mkdir App
进入App文件夹
cd App
上传 jdk-8u351-linux-x64.tar.gz 到App文件夹。
解压压缩包
sudo tar xvf jdk-8u351-linux-x64.tar.gz
解压完成后,打开/etc/profile,在/etc/profile文件里配置JDK的环境变量
sudo gedit /etc/profile
打开后在该文件的最后一行,添加下面几行
export JAVA_HOME=/home/liming/App/jdk1.8.0_351
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
要注意你的 JAVA_HOME 的路径要配制成你的jdk的目录,需要修改的地方如下图所示
关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。
source /etc/profile
查看是否配置成功
java -version
如下图显示表示配置成功
2.1 配置SDK
SDK的配置和JDK的配置大同小异
下载linux版本的SDK包,将该包放到App文件夹目录下,解压
sudo tar -zxvf android-sdk_r24.4.1-linux.tgz
解压完成后,打开/etc/profile,在/etc/profile文件里配置SDK的环境变量
sudo gedit /etc/profile
打开后在该文件的最后一行,添加下面几行:
export ANDROID_SDK=/home/liming/App/android-sdk-linux
export PATH=${PATH}:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。
source /etc/profile
2.3 配置NDK
下载 NDK 10
wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin
下载好以后,逐次执行以下两条命令进行解压缩,解压结束会提示Everything is Ok
chmod a+x android-ndk-r10e-linux-x86_64.bin
./android-ndk-r10e-linux-x86_64.bin
如果你是下载的zip后缀的压缩包,使用下面命令行解压缩:
unzip android-ndk-r10e-linux-x86_64.zip
如果解压失败,可能是权限问题,在上级目录给App文件夹权限:
chamod 777 -R ndk
解压缩后,打开/etc/profile,在/etc/profile文件里配置NDK的环境变量,命令行:
sudo gedit /etc/profile
打开后在该文件的最后一行,添加下面几行:
export ANDROID_NDK=/home/liming/App/android-ndk-r10e
export PATH=$PATH:$ANDROID_NDK
关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。
source /etc/profile
查看NDK是否配置成功
ndk-build -v
以下表示安装成功
三、编译ijkplayer
3.1 安装git
sudo apt-get install git
3.2 安装yasm
sudo apt-get install yasm
3.3 下载 ijkplayer 代码
sudo git clone https://github.com/Bilibili/ijkplayer ijkplayer-android
3.4 初始化
初始化可能要花一段时间
cd ijkplayer-android
./init-android.sh
3.5 修改编译配置文件module-default.sh。
cd config
按需修改module-default.sh内的配置
常用音频编译方式小结 供参考
mp3
--enable-libmp3lame
--enable-decoder=mp3
--enable-demuxer=mp3
--enable-muxer=mp3
--enable-encoder=libmp3lame
支持vorbis
--enable-libvorbis
--enable-parser=vorbis
--enable-encoder=vorbis
--enable-decoder=vorbis
--enable-encoder=libvorbis
--enable-decoder=libvorbis
--enable-muxer=ogg
--enable-demuxer=ogg
支持wav
--enable-libwavpack
--enable-muxer=wav
--enable-demuxer=wav
--enable-decoder=wavpack
--enable-encoder=wavpack
--enable-decoder=wav
--enable-encoder=wav
--enable-encoder=pcm_s16le
--enable-decoder=pcm_s16le
--enable-encoder=pcm_u8
--enable-decoder=pcm_u8
--enable-muxer=pcm_u8
--enable-demuxer=pcm_u8
支持aac
--enable-libvo-aacenc
--enable-libfdk_aac
--enable-libfaac
--enable-parser=aac
--enable-encoder=aac
--enable-decoder=aac
--enable-encoder=libfaac
--enable-encoder=libvo_aacenc
--enable-encoder=libaacplus
--enable-encoder=libfdk_aac
--enable-decoder=libfdk_aac
--enable-demuxer=aac
--enable-muxer=adts
支持mp2
--enable-encoder=mp2
--enable-decoder=mp2
--enable-muxer=mp2
--enable-decoder=mp2float
--enable-encoder=mp2fixed
flac 支持
--enable-encoder=flac
--enable-decoder=flac
--enable-demuxer=flac
--enable-muxer=flac
--enable-parser=flac
jpeg等
--enable-encoder=jpeg2000
--enable-encoder=mjpeg
--enable-encoder=ljpeg
--enable-encoder=jpegls
--enable-decoder=jpeg2000
--enable-decoder=jpegls
--enable-decoder=mjpeg
--enable-decoder=mjpegb
--enable-muxer=mjpeg
--enable-demuxer=mjpeg
--enable-encoder=png
--enable-decoder=png
--enable-parser=png
添加scale的支持
--enable-swscale
--enable-swscale-alpha
--enable-filter=scale
ac3
--enable-encoder=ac3
--enable-decoder=ac3
--enable-encoder=ac3_fixed
--enable-decoder=atrac3
--enable-decoder=atrac3p
--enable-encoder=eac3
--enable-decoder=eac3
--enable-muxer=ac3
--enable-demuxer=ac3
--enable-muxer=eac3
--enable-demuxer=eac3
支持wma/wmv
--enable-decoder=wmalossless
--enable-decoder=wmapro
--enable-encoder=wmav1
--enable-decoder=wmav1
--enable-encoder=wmav2
--enable-decoder=wmav2
--enable-decoder=wmavoice
--enable-demuxer=xwma
--enable-demuxer=avi
--enable-muxer=avi
--enable-demuxer=asf
--enable-muxer=asf
--enable-encoder=wmv1
--enable-decoder=wmv1
--enable-encoder=wmv2
--enable-decoder=wmv2
--enable-decoder=wmv3
--enable-decoder=wmv3_crystalhd
--enable-decoder=wmv3_vdpau
--enable-decoder=wmv3image
3.6 建立软链接。
rm module.sh
ln -s module-default.sh module.sh
3.7初始化openssl
cd ..
./init-android-openssl.sh
3.8编译opens
cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all
3.9初始化 android
cd ../..
./init-android.sh
3.10编译ffmpeg
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
3.11编译ijk
cd ..
./compile-ijk.sh all
3.12复制so文件
cp ijkplayer/ijkplayer-armv5/src/main/libs ijkplayer-java/src/main/jniLibs
cp ijkplayer/ijkplayer-armv7a/src/main/libs ijkplayer-java/src/main/jniLibs
cp ijkplayer/ijkplayer-arm64/src/main/libs ijkplayer-java/src/main/jniLibs
cp ijkplayer/ijkplayer-x86/src/main/libs ijkplayer-java/src/main/jniLibs
最后编译出来的so库在ijkplayer-java/src/main/jniLibs文件下