调用链接.a文件:
.a文件在安卓开发中见的比较少,毕竟安卓开发包就那么多版本,还有那么多平台,很难统一。
所以一般.a是自己做的(如我本人),在就是Cocos2dx那个指定平台的了,毕竟Cocos2dx太大,做.so不划算,还是做成.a要什么就链接进去什么(个人猜测)。
第一步:
把第三方提供的h文件夹,放在cpp的include里面。其实.mk中有调用外部include的标签,但是gradle和cmake中如何设置我不知道。
这一点是规范,不是必须。个人更倾向于将文件夹命名为ainc。
第二步:
将.a文件放在src/main/jniLibs/{ABI名,如armeabi}下
第三步:
在CMakeLists.txt中添加include文件的路径,如:
- include_directories( src/main/cpp/include/jsoncpp
- src/main/cpp/include/curl
- src/main/cpp/include/openssl
- )
这样的话岂不是可以添加外部路径了。
也有说要写成这个样子:
- #将静态库的头文件添加进来
- include_directories(
- ${CMAKE_SOURCE_DIR/src/main/include} #头文件多的话可以继续往下加
- ${CMAKE_SOURCE_DIR/src/main/include/..}
- ${CMAKE_SOURCE_DIR/src/main/include/...}
- 。。。。
- )
添加.a文件的路径,如:
- add_library(jsoncpp STATIC IMPORTED)
- set_target_properties(jsoncpp
- PROPERTIES IMPORTED_LOCATION
- ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libjsoncpp.a)
这里面的${CMAKE_SOURCE_DIR}和${ANDROID_ABI}都是定义好的环境变量哦。
最后修改target_link_libraries,设置要添加的.a库的名字。如:
- target_link_libraries(native-lib
- jsoncpp
- openssl
- curl
- ${log-lib})
还有说加单个(也许).a时用这种写法:
在
- add_library(
- native-lib
- SHARED
- src/main/cpp/native-lib.cpp )
下面添加
- #添加自己所需的静态库 库多的话,可以使用下面的方式添加
- add_library( event #库名字 去掉了 lib 与 .a
- STATIC #必须的
- IMPORTED #必须的
- )
- set_target_properties(
- event
- PROPERTIES IMPORTED_LOCATION
- ${CMAKE_SOURCE_DIR}/libs/libevent.a #库在的路径,以cmakeList.txt所在的路径起
- )
下面是.so的添加方法:
最后再说一句,要指定编译的CPU平台类型(当然是指C++,Java不用考虑这些),可以在.mk中设置
APP_ABI := armeabi armeabi-v7a
也可在ndk-build 指令后添加这句。
另设置NDK路径时要设为ndk-build所在的文件夹,新版的NDK一般在NDK根目录,r10d等等在NDK目录/build中。