Mac环境下交叉编译生成Android版本的Assimp.so

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sky_person/article/details/89009063

Assimp地址:https://github.com/assimp/assimp

要想编译Assimp的Android so库,Android SDK,NDK,Gradle(也可以装上)首先是需要准备就绪的。

配置好Android SDK以及NDK的环境变量,如下:

ANDROID_HOME=/Users/Test/AndroidRes/sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

GRADLE_HOME=/Users/Test/AndroidRes/gradle-4.4
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin

export ANDROID_NDK_PATH=/Users/Test/AndroidRes/sdk/ndk-bundle
export ANDROID_SDK_PATH=/Users/Test/AndroidRes/sdk
export CMAKE_TOOLCHAIN=/Users/Test/AndroidRes/sdk/ndk-bundle/build/cmake/android.toolchain.cmake
NDK_PATH=/Users/Test/AndroidRes/sdk/ndk-bundle
export PATH=$PATH:NDK_PATH

装上cmake,指令如下:

brew install cmake

装上zlib,指令如下:

brew install zlib

要认真的开始了:

1.NDK目录下对应的有make-standalone-toolchain.sh文件,确认NDK版本没毛病。

$ANDROID_NDK/build/tools/make-standalone-toolchain.sh
2.执行如下脚本生成toolchain

export NDK_PATH=/Users/hi/Library/Android/sdk/ndk-bundle
sh make-standalone-toolchain.sh –platform=android-8 –ndk-dir=$NDK_PATH –install-dir=/Users/hi/Library/Android/sdk/android-toolchain –toolchain=arm-linux-androideabi-4.4.3

指令执行成功会有如下提示:

Package installed to /var/folders/9_/q2k248tj62x7734zchpn6btm0000gn/T/.

到这个目录下会发现名为arm-linux-androideabi.tar.bz2的压缩文件,请把它解压,并放到*/Users/hi/Library/Android/sdk/android-toolchain

3.环境变量中再添加如下配置:

#下面内容是根据上面描述的整理出的toolchain对应的位置
export ANDROID_NDK_TOOLCHAIN=/Users/Test/AndroidRes/sdk/android-toolchain/arm-linux-androideabi
export PATH=$PATH:/Users/Test/AndroidRes/sdk/android-toolchain/arm-linux-androideabi/bin

4.切换到Assimp工程目录下

cd xxx/assimp // 下载assimp,然后解压,进入assimp根目录
mkdir buildAndroid // 创建文件夹
cd buildAndroid // 进入这个文件夹

执行如下指令,生成makefile文件

cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN -DCMAKE_INSTALL_PREFIX=/assimp -DANDROID_ABI=armeabi-v7a -DANDROID_NATIVE_API_LEVEL=android-14 -DANDROID_FORCE_ARM_BUILD=TRUE -DANDROID_STL=c++_shared -DASSIMP_BUILD_OBJ_IMPORTER=TRUE -DASSIMP_BUILD_FBX_IMPORTER=TRUE -DANDROID_NDK=$ANDROID_NDK_PATH -DCMAKE_BUILD_TYPE=Release -DANDROID_FORCE_ARM_BUILD=TRUE -DCMAKE_CXX_FLAGS=-Wno-c++11-narrowing -DANDROID_TOOLCHAIN=clang -DASSIMP_BUILD_TESTS=OFF -DASSIMP_NO_EXPORT=TRUE -DASSIMP_BUILD_ASSIMP_TOOLS=FALSE -DASSIMP_BUILD_SAMPLES=FALSE -DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=FALSE ..

参数说明:

-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN 指向上面生成的toolchain
-DCMAKE_INSTALL_PREFIX=/assimp 最终生成的.so文件的名称
-DANDROID_ABI=armeabi-v7a 应用程序二进制接口类型,详见[ABI Management](https://developer.android.com/ndk/guides/abis)
-DANDROID_NATIVE_API_LEVEL=android-14 api版本,设成这个就行
-DANDROID_FORCE_ARM_BUILD=TRUE 强制编译arm架构
-DANDROID_STL=c++_shared c++类型
-DASSIMP_BUILD_OBJ_IMPORTER=TRUE 支持OBJ格式的3D模型文件导入
-DASSIMP_BUILD_FBX_IMPORTER=TRUE 支持FBX格式的3D模型文件导入
-DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=FALSE assimp默认支持很多种3D模型格式,这里只指定常用的一两种格式即可,减小.so包的大小
-DASSIMP_BUILD_TESTS=OFF 这个要关掉,不然make时会有一些奇怪的错误
-DASSIMP_NO_EXPORT=TRUE 只需要解析3D模型,不需要生成3D模型

5.然后就剩下最后一步了,生成so,指令如下:

make -j8 //j8是多线程编译,j后面的数字越大编译越快,当然了,前提是你机器有那么多处理器哈。

6.上面的指令如果没有错误,就可以生成so了。so位置在assimp/buildAndroid/code目录下。

参考链接:

https://juejin.im/post/5b0abe9f51882538bf5a68ad

http://zhixinliu.com/2016/02/01/2016-02-01-cmake-cross-compile/

http://www.anandmuralidhar.com/blog/android/assimp/

https://www.jianshu.com/p/0284c429362c

猜你喜欢

转载自blog.csdn.net/sky_person/article/details/89009063
今日推荐