Android Studio的NDK开发环境搭建
来源:互联网 发布:linux配置nfs 编辑:程序博客网 时间:2024/03/29 22:54
目标
由于要涉及到音视频的开发,所以要用到JNI,之前一直用AS2.0的,发现用这个做NDK开发太麻烦了,后来看到动脑学院老师的一个教学视频,android studio的NDK开发配置,做了一个学习笔记,视频可以百度搜索的到。
配置要求
Android Studio 2.2以上(因为在2.2以上更好的兼容了ndk开发)
- gradle2.5 以上
- android-ndk-r10以上
如果配置一个过高一个过低容易出现兼容性问题
如何下载
Android的工具下载网站:http://www.androiddevtools.cn/
- Android studio 的下载工具:http://www.android-studio.org/
- 我是直接用了green vpn,然后在
- help-chack for update里面可以更新,他会检查AS本身的版本和SDK和其他工具的一些跟新的,如果能翻墙的话基本更新这里就OK的,注意:更新的AS的版本会提供一个最新的稳定版本的(我更新的时候是2.2.3的-2017-01-13)。
Android Studio的目录结构(include C++ support)
- 新建一个AS工程,注意新建的时候
- 要把include C++ Support勾选上,这样就说明新建一个jni项目。
- 再看目录结构:
- 看目录结构 会发多了三个文件夹
- 第一个 .externNativeBuild :
- 这里会决定如何编译,即编译的规则,等会重点讲android_gradle_build.json文件
- 第二个文件:cpp文件
- 这个文件里面本来只有native-lib.cpp,但是由于AS本身问题,如果只有一个cpp文件的话容易报错,所以一般都先建立一个空的cpp文件。
- 第三个文件:CMakeList.txt,决定了编译的内容。等于是第一个文件中那个.json的入口的。
CMakeList.txt 分析
- 这里是我建立的HelloJNI的这个文件的
# cmake 是跨平台的一个命令,这个命令是在linux环境下也有,主要编译一些C/C++cmake_minimum_required(VERSION 3.4.1)#这句话 就是cmake的版本号最低要3.4.1 有可能githup上的版本号要低于我现在的最低版本# add_library:这里是代表增加一个.so动态库,包含的文件为 src/main/cpp/native-lib.cpp 和src/main/cpp/demo.cppadd_library( # Sets the name of the library. native-lib> 设置 .so 的名称 运行后在app根目录下有> \build\intermediates\cmake\debug\obj\armeabi\libnative-lib.so的生成,这个生成路径由上面.json的output的路径来决定,跟视频中的不一样 # Sets the library as a shared library. SHARED 1-如果加了一个demo.cpp 2-需要在这下面加一个.cpp src/main/cpp/native-lib.cpp src/main/cpp/demo.cpp # 编译的源文件的目录 )# 这时候注意,如果你想生成两个.so文件,那么就要再次的add_library一下,内容由自己来添加#连接动态的预编译库find_library( # Sets the name of the path variable. #打印日志的so库 log-lib # Specifies the name of the NDK library that # you want CMake to locate. log )target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${log-lib} )
android_gradle_build.json ###
- 这个文件是一个json格式的文件,他是有CMakeList.txt来决定是什么样的。真正入口是在build.gradle中过的android{
在这里面有一句这样的代码: externalNativeBuild {
cmake {
path “CMakeLists.txt”
}
}
这就决定开始运行cmake命令,然后就生成了json格式的上面的语句
}
{ "buildFiles" : [ 。。。], "cleanCommands" : [ " 。。。" ], "cppFileExtensions" : [ "cpp" ], "libraries" : { "demo-Debug-arm64-v8a" : { "abi" : "arm64-v8a", "artifactName" : "demo", "buildCommand" : " 。。。", "buildType" : "debug", "files" : [ { "flags" : " 。。。", "src" : " 。。。demo.cpp", "workingDirectory" : " 。arm64-v8a" } ], "output" : " build/intermediates/cmake/debug/obj/arm64-v8a/libdemo.so", "toolchain" : "1057882217" }, "native-lib-Debug-arm64-v8a" : { "abi" : "arm64-v8a", "artifactName" : "native-lib", "buildCommand" : " 。。。", "buildType" : "debug", "files" : [ { "flags" : " 。。。", "src" : " 。。。native-lib.cpp", "workingDirectory" : " 。。。externalNativeBuild/cmake/debug/arm64-v8a" } ], "output" : " 。。。build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so", "toolchain" : "1057882217" } }, "toolchains" : { "1057882217" : { "cCompilerExecutable" : "E:/LycHy/android-ndk-r13b/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe", "cppCompilerExecutable" : "E:/LycHy/android-ndk-r13b/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe" } }}
- 这里面的话可清晰的看出整个框架,这里我是生成了两个.so的库所以在”libraries” : {这个大括号里面有两个artifactName}
- 在artifactName中flags就代表编译这个CPP的平台方式等等,比如demo这里面有include
要注意的地方
- 在源文件.cpp 中,要在代码最外层,除了include下面加上 extern “C”{这个是最外层}
- 在java中可以自动去生成,然后在cpp中可以用.来拉出来提示,而不是用—>,不过.完之后还是生成—>的标志。
0 0
- Android Studio的NDK开发环境搭建
- Android Studio 的NDK开发环境搭建
- Android Studio NDK 开发环境搭建
- Android Studio 2.0 NDK开发环境搭建
- Android Studio 2.2 NDK开发环境搭建
- NDK开发 Android Studio环境搭建
- Android Studio 2.2 NDK开发环境搭建
- 搭建Android Studio NDK 开发环境
- Android studio NDK开发环境搭建
- android studio ndk环境搭建 和开发
- android studio NDK开发环境搭建实践
- Ubuntu + Android Studio NDK环境的搭建
- android NDK——搭建Android Studio的NDK环境
- android NDK——搭建Android Studio的NDK环境
- android NDK——搭建Android Studio的NDK环境
- android NDK——搭建Android Studio的NDK环境
- Android Studio NDK环境搭建
- Android studio ndk 环境搭建
- sensor hal 实现
- mysql数据库replace、regexp的用法
- ASP.NET MVC学习总结(更新中。。。)
- 判断线程池中的线程是否全部执行完毕
- repo 命令
- Android Studio的NDK开发环境搭建
- android studio使用过程中遇到的问题(笔记)
- 使用阿里云的ip地址查询服务-使用界面上的调试工具进行调试
- ubuntu16.04 网易源
- java判断字符串为空的方式方法
- Spark的Kryo序列化注册
- SVN is already locked
- maven 聚合继承
- 工具类库系列(九)-ReflectEnum