Skip to content

Latest commit

 

History

History
134 lines (102 loc) · 4.21 KB

android.md

File metadata and controls

134 lines (102 loc) · 4.21 KB

Android 下构建方式


MMDeploy 为 android 平台提供交叉编译的构建方式.

MMDeploy converter 部分在 linux 平台上执行,SDK 部分在 android 平台上执行.

MMDeploy 的交叉编译分为两步:

  1. 在 linux 平台上构建 MMDeploy converter. 请根据 How to build linux 进行构建.

  2. 使用 android 工具链构建 MMDeploy SDK.

本文档仅提供在 linux 平台上使用 android 工具链进行交叉编译构建 MMDeploy SDK 的方法.

源码安装

安装构建和编译工具链

  • cmake

    保证 cmake的版本 >= 3.14.0. 如果不是,可以参考以下命令安装 3.20.0 版本. 如要获取其他版本,请参考 这里

    wget https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-x86_64.tar.gz
    tar -xzvf cmake-3.20.0-linux-x86_64.tar.gz
    sudo ln -sf $(pwd)/cmake-3.20.0-linux-x86_64/bin/* /usr/bin/
  • ANDROID NDK 19+

    保证 android ndk 的版本 >= 19.0. 如果不是,可以参考以下命令安装 r23c 版本. 如要获取其他版本,请参考 这里

    wget https://dl.google.com/android/repository/android-ndk-r23c-linux.zip
    unzip android-ndk-r23c-linux.zip
    cd android-ndk-r23c
    export NDK_PATH=${PWD}

安装依赖包

安装 MMDeploy SDK 依赖

如果您只对模型转换感兴趣,那么可以跳过本章节.

名称 安装方式
OpenCV
(>=3.0)

export OPENCV_VERSION=4.6.0
wget https://github.com/opencv/opencv/releases/download/${OPENCV_VERSION}/opencv-${OPENCV_VERSION}-android-sdk.zip
unzip opencv-${OPENCV_VERSION}-android-sdk.zip
export OPENCV_ANDROID_SDK_DIR=${PWD}/OpenCV-android-sdk
ncnn ncnn 是支持 android 平台的高效神经网络推理计算框架
目前, MMDeploy 支持 ncnn 的 20220721 版本, 且必须使用git clone 下载源码的方式安装。请到 这里 查询 ncnn 支持的 android ABI。

git clone -b 20220721 https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
export NCNN_DIR=${PWD}

export ANDROID_ABI=arm64-v8a

mkdir -p build_${ANDROID_ABI}
cd build_${ANDROID_ABI}

cmake -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake -DANDROID_ABI="${ANDROID_ABI}" -DANDROID_PLATFORM=android-30 -DNCNN_VULKAN=ON -DNCNN_DISABLE_EXCEPTION=OFF -DNCNN_DISABLE_RTTI=OFF ..
make -j$(nproc) install
OpenJDK 编译Java API之前需要先准备OpenJDK开发环境
请参考 Java API 编译 进行构建.

编译 MMDeploy

编译 SDK 和 Demos

下文展示构建 SDK 的样例,用 ncnn 作为推理引擎。

  • cpu + ncnn
    export ANDROID_ABI=arm64-v8a
    cd ${MMDEPLOY_DIR}
    mkdir -p build_${ANDROID_ABI} && cd build_${ANDROID_ABI}
    cmake .. \
        -DMMDEPLOY_BUILD_SDK=ON \
        -DMMDEPLOY_BUILD_EXAMPLES=ON \
        -DMMDEPLOY_BUILD_SDK_JAVA_API=ON \
        -DOpenCV_DIR=${OPENCV_ANDROID_SDK_DIR}/sdk/native/jni/abi-${ANDROID_ABI} \
        -Dncnn_DIR=${NCNN_DIR}/build_${ANDROID_ABI}/install/lib/cmake/ncnn \
        -DMMDEPLOY_TARGET_BACKENDS=ncnn \
        -DMMDEPLOY_SHARED_LIBS=OFF \
        -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
        -DANDROID_ABI=${ANDROID_ABI} \
        -DANDROID_PLATFORM=android-30 \
        -DANDROID_CPP_FEATURES="rtti exceptions"
    
    make -j$(nproc) && make install

参考 cmake 选项说明