Assimp 交叉编译 Android iOS 库

基于 Assimp 5.0.1 Release 版裁剪,只保留 OBJ 和 FBX 格式的 3D 模型解析,并使用交叉编译工具链编译成 Android 和 iOS 库

本文链接

编译

  • 编译 Android 静态库:

    记得要修改 build_for_android.sh 中最上面的 MY_NDK、MY_SDK、MY_CMAKE 路径,改成自己对应的安装路径

    ② 执行 build_for_android.sh, 最后会生成 Android 平台 arm64-v8a、armeabi-v7a 的静态库

  • 编译 iOS 静态库:

    ① 执行 build_for_android.sh, 最后会生成 iOS 平台的静态库,默认编译的是 all(包含 armv7、armv7s、arm64)

扩展

  • 如果想支持更多格式解析,拷贝 Assimp 5.0.1 对应格式目录下的源文件,并在 ImporterRegistry.cpp 中注册
  • 如果想支持更多的后处理,拷贝对应的后处理源文件,并在 PostStepRegistry.cpp 注册

预编译好的 Android 、iOS 库见 AssimpLib
预编译好的库在 pre_build 目录,3D 模型解析仅支持 OBJ 和 FBX 格式,后处理仅支持 FlipUVsProcess、TriangulateProcess
在这里插入图片描述

Android 编译脚本

#!/bin/sh

# 记得改成自己的 NDK、SDK 路径,以及 CMake 版本
MY_NDK="/Users/AlanWang/AndroidDev/android-ndk-r16b"
MY_SDK="/Users/AlanWang/AndroidDev/sdk"
MY_CMAKE="${MY_SDK}/cmake/3.10.2.4988404/bin/cmake"

OUTPUT_LIBS="./build/libs/android"

function build_with_armeabi() {
    
    
	ARME_ABI=$1
	API_LEVEL=$2
	PLATFORM="android-${API_LEVEL}"
	echo ${ARME_ABI}
	echo ${PLATFORM}

	BUILD_DIR="./build/android/${ARME_ABI}"
	PRE_EXE_DIR=$(pwd)
	echo ${PRE_EXE_DIR}

	# 使用 android 工具链生成 makefile
	${MY_CMAKE} \
	-H"./" \
	-B"${BUILD_DIR}" \
	-DANDROID_ABI="${ARME_ABI}" \
	-DANDROID_NDK="${MY_NDK}" \
	-DCMAKE_LIBRARY_OUTPUT_DIRECTORY="./build/android/libs/${ARME_ABI}" \
	-DCMAKE_BUILD_TYPE="Release" \
	-DCMAKE_TOOLCHAIN_FILE="${MY_NDK}/build/cmake/android.toolchain.cmake" \
	-DANDROID_PLATFORM=${PLATFORM} \
	-DANDROID_TOOLCHAIN="clang" \
	-DCMAKE_C_FLAGS="-fpic -fexceptions -frtti" \
	-DCMAKE_CXX_FLAGS="-fpic -fexceptions -frtti" \
	-DANDROID_STL="c++_static" \

	# 生成目标文件
	cd ${BUILD_DIR}
	make

	# 将目标文件移至指定目录
	cd ${PRE_EXE_DIR}
	mkdir -p ${OUTPUT_LIBS}/${ARME_ABI}/
	mv ${BUILD_DIR}/libs/* ${OUTPUT_LIBS}/${ARME_ABI}/
	rm -r ./build/android
}

build_with_armeabi armeabi-v7a 16
build_with_armeabi arm64-v8a 21

iOS 编译脚本

#!/bin/sh

OUTPUT_LIBS="./build/libs/ios"

function build_with_platform_and_armeabi() {
    
    
	PLATFORM=$1
	ARME_ABI=$2
	echo ${PLATFORM}
	echo ${ARME_ABI}

	BUILD_DIR="./build/ios/${ARME_ABI}"
	PRE_EXE_DIR=$(pwd)
	echo ${PRE_EXE_DIR}

	cmake \
	-H"./" \
	-B"${BUILD_DIR}" \
	-DCMAKE_BUILD_TYPE="Release" \
	-DCMAKE_TOOLCHAIN_FILE="./toolchain/ios.toolchain.cmake" \
	-DIOS_PLATFORM=${PLATFORM} \
	-DCMAKE_C_FLAGS="-fpic -fexceptions -frtti" \
	-DCMAKE_CXX_FLAGS="-fpic -fexceptions -frtti -std=c++11 -stdlib=libc++" \
#	-DIOS_ARCH=${ARME_ABI} \

	# 生成目标文件
	cd ${BUILD_DIR}
	make

	# 将目标文件移至指定目录
	cd ${PRE_EXE_DIR}
	mkdir -p ${OUTPUT_LIBS}/${ARME_ABI}/
	mv ${BUILD_DIR}/libs/* ${OUTPUT_LIBS}/${ARME_ABI}/
	rm -r ./build/ios
}

build_with_platform_and_armeabi "OS" "all"

#build_with_platform_and_armeabi "OS" "armv7"
#build_with_platform_and_armeabi "OS" "armv7s"
#build_with_platform_and_armeabi "OS" "arm64"
#
#build_with_platform_and_armeabi "SIMULATOR64" "x86_64"
#build_with_platform_and_armeabi "SIMULATOR" "i386"

猜你喜欢

转载自blog.csdn.net/u011520181/article/details/120835360