1、安装虚拟机VMware-workstation-full-12.0.0-2985596.exe ,版本太旧需要先升级才能安装系统。

2、安装ubuntu-20.04.2.0-desktop-amd64.iso系统。4G运行+36G内存,太小的话系统可能起不来。

3、配置ndk环境,在home目录创建workdir,拷贝android-ndk-r10e-linux-x86_64.zip到该目录下,在当前目录点击右键->open in Terminal 

unzip android-ndk-r10e-linux-x86_64.zip 解压

xxx@ubuntu:/$ cd home/xxx/workdir/android-ndk-r10e/ 
xxx@ubuntu:~/workdir/android-ndk-r10e$ pwd 
/home/xxx/workdir/android-ndk-r10e

使用 sudo gedit /etc/profile 命令打开 /etc/profile 文件,添加如下配置:

export ANDROID_NDK="/home/xxx/workdir/android-ndk-r10e" export PATH="$ANDROID_NDK:$PATH"

然后source /etc/profile ndk-build -v 如果有看到版本号说明配置成功

4、安装git

sudo apt install git

5、下载ijk源码

git clone https://github.com/bilibili/ijkplayer.git ijkplayer-android

6、编译

git checkout -B latest k0.8.8 //在0.8.8版本上创建新分支

如果是依赖服务器库的方式需要在gradle 中 implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' ,版本要与自己编译的版本对应。

如果以lib库方式依赖只需要 implementation project(path:'ijkplayer-java')。

./init-android.sh //拉取ijk编译相关代码

出现问题Cloning into 'android/contrib/ffmpeg-armv5'... fatal: unable to access 'https://github.com/Bilibili/FFmpeg.git/': GnuTLS recv error (-54): Error in the pull function.

解决:vi init-android.sh

将所有 https://github.com/Bilibili/FFmpeg.git/改为git://github.com/Bilibili/FFmpeg.git/ 其他地方以此类推

编译ffmpeg

cd android/contrib/
./compile-ffmpeg.sh clean //清除历史ffmpeg下载文档
./compile-ffmpeg.sh all //下载所有cpu类型的支持库

出现问题make: not found

解决:sudo apt-get install make

出现问题nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

解决:sudo apt-get install yasm

分析:yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。 如果不需要yasm也可以 ./configure --disable-x86asm 下载ffmpeg git clone https://git.ffmpeg.org/ffmpeg.git

编译so

cd ..

./compile-ijk.sh all

编译结束

7、生成文件目录

如果./compile-ijk.sh不带all,只会编译arm-v7a的。 在android/ijkplayer/目录,各种芯片目录下会生成对应的三个.so,(分别在ijkplayer-arm64、ijkplayer-armv5、ijkplayer-armv7a、ijkplayer-x86、ijkplayer-x86_64这些项目的src/main/libs/对应的名称 目录下分别生成libijkffmpeg.so、libijkplayer.so、libijksdl.so这三个so文件)。

8、修改

修改ffmpeg版本, 在init-android.sh 中IJK_FFMPEG_COMMIT=ff3.4--xx--xx

./init-android.sh

修改流程化脚本编译

要在ijkplayer源码根目录config文件夹下module-lite-hevc.sh文件中加上要支持的编码格式,比如添加支持mp2格式的音频编码格式

然后执行:


cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh


初始化openSSL和FFMPEG,这里会同步下载对应的代码,可能会比较耗时

./init-android-openssl.sh
./init-android.sh


编译   cd到android/contrib下,执行清除命令,然后编译需要的so,这里的all是生成所有版本的,如果只需要对应版本的,可以把all替换成armv7a等你需要的版本。编译需要一段时间


./compile-openssl.sh clean//清除
./compile-ffmpeg.sh clean//清除
./compile-openssl.sh all//编译
./compile-ffmpeg.sh all//编译


生成对应so 切换到android目录下,执行脚本就可以生成so啦


./compile-ijk.sh all


在自己项目中使用编译好的so

1.将编译好的so文件拷贝到自己项目中的jniLibs文件夹下

把VMwave改成docker vmware生成vmdk_ubuntu

 

2.然后把ijkplayer-java拷贝过来当library库引用,配置build.gradle :apply plugin: 'com.android.library',并把多余文件删除

3.修改自己APP的build.gradle

把VMwave改成docker vmware生成vmdk_android_02

 

把VMwave改成docker vmware生成vmdk_把VMwave改成docker_03

ok~