在模块下的build.gradle
添加 cmake的路径和编译构建项目的选项 注意两个 externalNativeBuild
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
defaultConfig { applicationId "com.example.veyvin.osgguideapp" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags "-std=c++11 -frtti -fexceptions -DUSE_ZLIB" abiFilters "arm64-v8a" arguments "-DANDROID_STL=c++_static" } } signingConfig signingConfigs.debug } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "CMakeLists.txt" } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
cmake_minimum_required(VERSION 3.4.1) SET(EXT_PROJ_DIR "${CMAKE_SOURCE_DIR}/../..") SET(OPENGL_PROFILE "GLES2" CACHE STRING "OpenGL variant to use") SET(DYNAMIC_OPENTHREADS OFF CACHE BOOL "Link OpenThreads statically") SET(DYNAMIC_OPENSCENEGRAPH OFF CACHE BOOL "Link OpenSceneGraph statically") SET(OSG_SOURCE_DIR "${EXT_PROJ_DIR}/OpenSceneGraph") SET(OSG_BUILD_DIR "${EXT_PROJ_DIR}/OpenSceneGraph/buildarm8/${ANDROID_ABI}") SET(PROTO_CMAKE_DIR "${EXT_PROJ_DIR}/protobuf/cmake") SET(PROTO_SOURCE_DIR "${EXT_PROJ_DIR}/protobuf") SET(PROTO_BUILD_DIR "${EXT_PROJ_DIR}/protobuf/buildarm8/${ANDROID_ABI}") link_directories( ${OSG_BUILD_DIR}/lib64 ${PROTO_BUILD_DIR}/lib ${OSG_BUILD_DIR}/lib64/osgPlugins-3.6.3) link_libraries( osgDB osgdb_ive osgdb_osg osgdb_rgb osgdb_openflight osgdb_serializers_osg osgdb_serializers_osgfx osgdb_serializers_osganimation osgdb_serializers_osgmanipulator osgdb_serializers_osgparticle osgdb_serializers_osgshadow osgdb_serializers_osgsim osgdb_serializers_osgterrain osgdb_serializers_osgtext osgdb_serializers_osgvolume osgdb_deprecated_osgfx osgdb_deprecated_osg osgdb_deprecated_osgshadow osgdb_deprecated_osgparticle osgdb_deprecated_osgsim osgdb_deprecated_osgterrain osgdb_deprecated_osgtext osgdb_deprecated_osgviewer osgdb_deprecated_osgvolume osgdb_deprecated_osgwidget osgdb_deprecated_osganimation osgdb_dds osgdb_osgterrain osgdb_osga osgdb_scale osgdb_osgtgz osgdb_normals osgPresentation osgManipulator OpenThreads osgWidget osgParticle osgViewer osgShadow osgGA osgText osgVolume osgSim osgFX osgTerrain osgUtil osg protobuf protobuf-lite z GLESv2 ) find_library( log-lib log) INCLUDE_DIRECTORIES(${OSG_SOURCE_DIR}/include) INCLUDE_DIRECTORIES(${OSG_BUILD_DIR}/include) INCLUDE_DIRECTORIES(${PROTO_BUILD_DIR}/include) ADD_LIBRARY( iveParse SHARED src/main/cpp/UnityAPI.cpp src/main/cpp/pch.cpp src/main/cpp/ive.pb.cc src/main/cpp/IveReader.cpp src/main/cpp/GameObjectVisitor.cpp ) target_link_libraries( iveParse ${log-lib} osgDB #osgdb plugin osgdb_ive osgdb_osg osgdb_rgb osgdb_openflight osgdb_serializers_osg osgdb_serializers_osgfx osgdb_serializers_osganimation osgdb_serializers_osgmanipulator osgdb_serializers_osgparticle osgdb_serializers_osgshadow osgdb_serializers_osgsim osgdb_serializers_osgterrain osgdb_serializers_osgtext osgdb_serializers_osgvolume osgdb_deprecated_osgfx osgdb_deprecated_osg osgdb_deprecated_osgshadow osgdb_deprecated_osgparticle osgdb_deprecated_osgsim osgdb_deprecated_osgterrain osgdb_deprecated_osgtext osgdb_deprecated_osgviewer osgdb_deprecated_osgvolume osgdb_deprecated_osgwidget osgdb_osgterrain osgdb_deprecated_osganimation osgdb_osga osgdb_dds osgdb_scale osgdb_osgtgz osgdb_normals #end osgPresentation OpenThreads osgWidget osgParticle osgViewer osgShadow osgGA osgText osgVolume osgSim osgFX osgTerrain osgUtil osgAnimation osg protobuf protobuf-lite z GLESv2 ) |
Set 为赋值, 设置路径和编译选项等等
link_directories 相当于VS的添加链接库的目录
link_libraries 从 link_directories 找到相应的链接库
INCLUDE_DIRECTORIES 则是添加头文件
ADD_LIBRARY 是 生成的.so 用到的 源文件
target_link_libraries 是将 链接库 连接到
target_link_libraries 第一行 的iveParse 里。
最后通过 android studio的 build 或者 命令行 cmake build ..
生成.so 文件。
转载请注明:veyvin » Android ndk 使用cmake编译.so文件