MacOS编译ffmpeg并引入android

2020-06-17  本文已影响0人  eliteTyc

ffmpeg编译

编译环境:

1.下载源码

下载地址

解压得到目录

image.png

2.修改configure脚本

3.新建编译脚本build_android_clang.sh

image.png

内容如下 具体内容需要根据自己电脑上面ndk环境进行修改

#!/bin/bash
set -x
# 目标Android版本
API=19
CPU=armv7-a
#so库输出目录
OUTPUT=/Users/tanyuanchao/Desktop/ffmpeg/ffmpeg-4.2.3/android/$CPU
# NDK的路径,根据自己的NDK位置进行设置
NDK=/Users/tanyuanchao/Library/Android/sdk/ndk/21.2.6472646
# 编译工具链路径
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
# 编译环境
SYSROOT=$TOOLCHAIN/sysroot

function build
{
  ./configure \
  --prefix=$OUTPUT \
  --target-os=android \
  --arch=arm \
  --cpu=armv7-a \
  --enable-asm \
  --enable-neon \
  --enable-cross-compile \
  --enable-shared \
  --disable-static \
  --disable-doc \
  --disable-ffplay \
  --disable-ffprobe \
  --disable-symver \
  --disable-ffmpeg \
  --sysroot=$SYSROOT \
  --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
  --cross-prefix-clang=$TOOLCHAIN/bin/armv7a-linux-androideabi$API- \
  --extra-cflags="-fPIC"

  make clean all
  # 这里是定义用几个CPU编译
  make -j12
  make install
}

build

4.修改文件为可执行文件

chmod +x build_android_clang.sh

5.执行开始编译

./build_android_clang.sh

6.编译完成后得到的目录

image.png

android中引入编译后的库

新建项目或者已有项目中进行以下操作

1.修改app的build.gradle新增如下内容

android {
    defaultConfig {
        // 新增1
        externalNativeBuild {
            cmake {
                cppFlags ""
                // 配置cmake编译的cpu架构,否则会还回去找其他架构,由于我们只编译的armeabi-v7a,所以找不到其他会报错
                abiFilters  'armeabi-v7a'
            }
        }
    }
        // 新增2
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }


}

2.创建jniLibs文件夹来放动态库!!!!这里有坑

image.png

3.创建cpp文件夹

4.MainActivity修改

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tvName.text = ffmpegName()

    }

    private  external  fun ffmpegName():String

    companion object{
        init {
            System.loadLibrary("native-lib")
        }
    }
}

5.进行运行

出现的问题

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.elitetyc.elitevideo-Ixc9OTEY7urV3gNO0Lazeg==/base.apk"],nativeLibraryDirectories=[/data/app/com.elitetyc.elitevideo-Ixc9OTEY7urV3gNO0Lazeg==/lib/x86, /system/lib, /system/product/lib]]] couldn't find "libnative-lib.so"

因为我们提供的so文件值提供了armeabi-v7a架构支持的,所以会出现这个问题,解决方案,换cpu架构的模拟器,或者直接运行到手机

就可以打包成功了

运行效果

image.png

以上内容根据:开发的猫 的文章进行操作,记录实现过程中出现的问题

上一篇下一篇

猜你喜欢

热点阅读