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