由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍。

随着Android Studio 2.2的推出,Android Studio的NDK开发支持Cmake和ndk-build两种方式,简化了Android Studio上NDK开发流程,提升了开发效率。接下来就介绍下两种开发方式。

1. CMake

CMake是一个跨平台的编译(安装)工具,支持通过用较为简单的语言来描述编译(安装)过程,最后输出适配不同平台的makefile货project文件。Android Studio通过引入CMake来简化JNI函数的编译。接下来通过一个例子来展示基于CMake的Android Studio NDK开发:

1. 创建一个Android工程,创建时勾选支持c++开发

创建完成后会看到在工程中会有一个c++目录,与Java目录同级

2. 在c++目录下创建两个文件:jni_lic.cpp/h。

3.在c++目录下创建CMakeLists.txt文件,文件内容如下:

# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.cmake_minimum_required(VERSION 3.4.1)# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.
AUX_SOURCE_DIRECTORY(./src/main/cpp DIR_SRCS)
add_library( # Sets the name of the library.jni-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.${DIR_SRCS})
include_directories(src/main/cpp/)# Searches for a specified prebuilt library and stores the path as a
# variable. Because system libraries are included in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.find_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log )# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in the
# build script, prebuilt third-party libraries, or system libraries.target_link_libraries( # Specifies the target library.jni-lib# Links the target library to the log library# included in the NDK.${log-lib} )

4. 在gradle中加入相关配置

android {compileSdkVersion 24buildToolsVersion "24.0.3"defaultConfig {applicationId "com.asia.jni"minSdkVersion 15targetSdkVersion 24versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"externalNativeBuild {cmake {cppFlags ""}}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}externalNativeBuild {cmake {path "src/cpp/CMakeLists.txt"}}
}

5.配置NDK路径

file->project structure->SDK Location:

如果没有安装NDK,可以通过SDK Manager安装。

6. JNI函数开发

这部分可以参考上一篇博客:JNI编程基础(一)

NDK-BUILD

ndk-build方式与cmake方式类似,只需要将cmake文件改写为Android.mk和Appliction.mk文件。在CMakeLists.txt加载的位置将CMakeLists.txt替换为Android.mk即可

1.Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
APP_ABI := allLOCAL_MODULE    := jni-lib
LOCAL_CPPFLAGS     := -O0 -D_UNICODE -DUNICODE -DUSE_DUMP -Wno-error=format-security
LOCAL_CPP_EXTENSION := .cpp
LOCAL_LDLIBS    := -lm -llog -lz
LOCAL_SHORT_COMMANDS := true
INC_DIRS = -I$(LOCAL_PATH)/src/cpp
LOCAL_CPPFLAGS += $(INC_DIRS)LOCAL_SRC_FILES    := \jni_lib.cpp    \    \LOCAL_SHARED_LIBRARIES += libandroid_runtimeinclude $(BUILD_SHARED_LIBRARY)

2.Application.mk

APP_ABI := all
NDK_TOOLCHAIN_VERSION := clang
APP_SHORT_COMMANDS      := true
APP_STL := stlport_static
APP_CPPFLAGS := -std=gnu++11 -D__STDC_LIMIT_MACROS

3.替换gradle的配置中cmake

//    externalNativeBuild{
//        cmake{
//            path file("src/main//CMakeLists.txt")
//        }
//    }externalNativeBuild{ndkBuild{path file("src/main/cpp/Android.mk")}}

JNI编程基础(二)——Android Studio NDK开发相关推荐

  1. Android Studio NDK开发

    以前接触过NDK的开发,是在Eclipse环境下开发的.今天尝试了下用Android Studio来配置,结果真是处处都是坑,现在总结一下: 一.步骤 1. 首先创建MainActivity,添加na ...

  2. Android Studio NDK 开发配置

    一:使用gradle experimental plugin 首先,我们不能用android studio默认的gradle插件,我们需要把android studio的插件改为gradle expe ...

  3. Android Studio NDK 开发

    1.SDK Tools下载DNK,如果已经有下载有DNK的开发工具的话,可以直接导入 当然,AS后面推荐使用CMake方式开发NDK,这个后面再说,这里还是先讲ndk+javah+Android.mk ...

  4. android studio 和gcc,Android Studio NDK开发总结

    一,gcc.make.makefile.cmake.cmakelists区别 1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多 ...

  5. Andorid Studio NDK 开发 - Hello World

    原址 介绍了在Android Studio中配置NDK的开发环境:Android Studio NDK开发-环境配置,NDK开发环境配置完成之后,就要写一下著名的Hello World程序了. 在开始 ...

  6. [安卓开发笔记二]android Studio通过jni调用C++代码

    [安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...

  7. Android Studio NDK环境配置及JNI使用方法

    1.前言 什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.N ...

  8. Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...

  9. 《Android Studio应用开发实战详解》——第1章,第1.2节Android系统基础

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.2节Android系统基础,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&quo ...

最新文章

  1. CentOS7(64位)安装NVIDIA显卡驱动和CUDA8.0
  2. 和封神一起“深挖”Spark
  3. swift_001(Swift的注释)
  4. 神策数据加入中国大数据产业生态联盟,神策营销云及融媒解决方案获联盟认证
  5. Dijkstra 最短路径算法详解 无向图
  6. java位图去重_Redis系列(3) Bloom/BitMap/Geo
  7. 事情又没有后续,吾真想质问头目,汝是为吾干活吗?
  8. 求立方体的体积、表面积(c++)
  9. 深入浅出mysql csdn_《深入浅出MySQL:数据库开发、优化与管理维护
  10. 通向云帝国的铁王座:卖书的贝佐斯和卖软件的纳德拉
  11. linux下的MBR(msdos)分区与格式化----fdisk mkfs
  12. 华尔街见闻:泰格马克引领未来AI《见面》之旅
  13. java获取异常信息
  14. windows系统重装(绝对干净)、备份还原、引导修复步骤
  15. 三天打鱼两天晒网python程序_三天打鱼两天晒网
  16. mysql 加上天数_MySQL Datetime添加天数?
  17. 山区灭火机器人_帅气!池州市首台消防灭火机器人正式投入基层执勤
  18. Javaweb学习笔记——Javaweb概述
  19. 将字符串“name=zhangsan age=18 classNo=201062001”拆分为“zhangsan 18 20162001 ”
  20. Macbook 466 光驱改造为ssd固态硬盘总结

热门文章

  1. matlab 添加环境变量,CentOS 添加环境变量的三种方法
  2. 【动态数组】数据结构01-(java实现)
  3. 学习笔记Hadoop(十)—— Hadoop基础操作(2)—— HDFS常用Shell操作
  4. synchronized锁的基本用法
  5. java语言 文件上传,java中实现文件上传的方法
  6. mysql 创建唯一索引_Mysql创建索引
  7. vscode-git中的U,M和D文件标记含义
  8. 神经网络 深度学习 专业术语解释(Step, Batch Size, Iteration,Epoch)
  9. css选择器 pa,p~a,p+a区别
  10. CommonJs, AMD/RequireJs,CMD/seajs