Android studio的NDK开发基础
2017-02-22 12:24
225 查看
环境
我用的是android studio 2.2.3版本,直接在SDK Tools 中选择安装 NDK 和 CMake 即可。然后新建项目的时候,选择Include C++ Support 选项
我们可以发现新建的项目在main下会出现一个cpp目录,src目录下会出现一个CMakeLists.txt
CMakeList.txt编译方式
cpp目录就是你写相关sdk代码的地方,CMakeLists.txt就是CMake的编译规则配置文件。选择Make Project编译一下,编译成功就会如下提示:
cpp目录下就是放c/cpp的源码,和之前jni目录类似,
只是源码之间操作的时候 include头文件的时候会需要include一个比较完整的路径。
例如:第一种情况才可以正常引用到需要的头文件。
当然自己添加的文件是用“”include,而系统的依然用<>include是没问题的。
CMakeList.txt讲解
然后我们来大致将一下CMakeList.txt#设置CMake最低编译版本。 cmake_minimum_required(VERSION...) ... #创建库 add_library( #第一个参数是设置新建的库的名称 xxx-native-lib #第二个参数是设置库类型,静态(STATIC)/共享 SHARED SHARED #后面就是提供源码的相对路径 src/main/cpp/native-lib.cpp ) ... #这个里面可以帮你找你需要链接的其他的库 #因为系统库被包含在默认的搜索路径,你只需要指定要添加的公共NDK库名称。 find_library( #第一个参数是设置路径变量的名称 log-lib #第二个参数是指定你想让CMake找到NDK库名称 log ) ... #指定要链接到你的库的库。你可以链接多个库,就像你在构建脚本的定义,建立第三方库或系统库。 target_link_libraries( #第一个参数是指定目标库,一般就是你当前这个库 native-lib #链接的到的指定库。 ${log-lib} )
如果我们需要设置一个固定的编译目录,就可以如下操作
set(SDK_PATH ${CMAKE_SOURCE_DIR}/src/main/sdk_src/)
然后在add_library就可以简单的调用到目录文件了
add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). # Associated headers in the same location as their source # file are automatically included. ${SDK_PATH}/util/time_util.c )
嗯基本CMake开发就是这样配置的。
Android.mk编译方式
后面我们再提一下之前写过的Android.mk,然后使用ndk直接编译的方式。建立Android.mk,到cpp目录下,或者src任意目录其实都可以的,只是Android.mk里面对应的源码路径进行修改即可。
然后我们在cmd模式下,切换到这个Android.mk文件目录下,执行你ndk目录下安装的ndk-build.cmd文件(例如我的目录是 C:\android\sdk\ndk-bundle\build\ndk-build.cmd),如下图
执行就可以编译了,编译log会打印对应导入的.c、cpp文件,和.a,编译生成.so文件
如果需要清理旧的生成文件,只需要在加关键字clean就可以了,例如
>C:\android\sdk\ndk-bundle\build\ndk-build.cmd clean
这样的话,在android studio,两种ndk编译方式都大致过了一遍。
相关文章推荐
- android studio 手把手叫你NDK开发环境搭建及基础使用
- Android Studio 2.2.3 NDK开发基础教程
- NDK开发基础①使用Android Studio编写NDK
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android-NDK开发之基础--Android JNI实例代码(二)-- 获取/设置类的域或者说属性字段
- Android开发基础2-NDK安装和使用(图)
- Android开发基础(2.1)--NDK 的搭建和基本用法
- Android-NDK开发之基础--Android JNI实例代码(三)-- 在JNI中构造和实例化Java类
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android-NDK开发之基础--Android JNI开发高级篇(JNI中的常用方法)
- Android-NDK开发之基础--Android JNI实例代码(二)-- 获取/设置类的域或者说属性字段
- Android-NDK开发之基础--Android.mk的用法和基础(转CSDN)
- Android-NDK开发之基础--Android JNI实例代码(四)-- JNI中的异常处理实例代码
- Android-NDK开发之基础--Android JNI实例代码(三)-- 在JNI中构造和实例化Java类
- Android-NDK开发之基础--Android JNI实例代码(三)-- 在JNI中构造和实例化Java类
- Android-NDK开发之基础--Android NDK开发技巧二
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android-NDK开发之基础--Android JNI开发高级篇(JNI中的常用方法)
- Android-NDK开发之基础--Android JNI有关Java类命名方式