JNI编程基础(二)——Android Studio NDK开发
由于笔者目前的工作是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开发相关推荐
- Android Studio NDK开发
以前接触过NDK的开发,是在Eclipse环境下开发的.今天尝试了下用Android Studio来配置,结果真是处处都是坑,现在总结一下: 一.步骤 1. 首先创建MainActivity,添加na ...
- Android Studio NDK 开发配置
一:使用gradle experimental plugin 首先,我们不能用android studio默认的gradle插件,我们需要把android studio的插件改为gradle expe ...
- Android Studio NDK 开发
1.SDK Tools下载DNK,如果已经有下载有DNK的开发工具的话,可以直接导入 当然,AS后面推荐使用CMake方式开发NDK,这个后面再说,这里还是先讲ndk+javah+Android.mk ...
- android studio 和gcc,Android Studio NDK开发总结
一,gcc.make.makefile.cmake.cmakelists区别 1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多 ...
- Andorid Studio NDK 开发 - Hello World
原址 介绍了在Android Studio中配置NDK的开发环境:Android Studio NDK开发-环境配置,NDK开发环境配置完成之后,就要写一下著名的Hello World程序了. 在开始 ...
- [安卓开发笔记二]android Studio通过jni调用C++代码
[安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...
- Android Studio NDK环境配置及JNI使用方法
1.前言 什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.N ...
- Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...
- 《Android Studio应用开发实战详解》——第1章,第1.2节Android系统基础
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.2节Android系统基础,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&quo ...
最新文章
- CentOS7(64位)安装NVIDIA显卡驱动和CUDA8.0
- 和封神一起“深挖”Spark
- swift_001(Swift的注释)
- 神策数据加入中国大数据产业生态联盟,神策营销云及融媒解决方案获联盟认证
- Dijkstra 最短路径算法详解 无向图
- java位图去重_Redis系列(3) Bloom/BitMap/Geo
- 事情又没有后续,吾真想质问头目,汝是为吾干活吗?
- 求立方体的体积、表面积(c++)
- 深入浅出mysql csdn_《深入浅出MySQL:数据库开发、优化与管理维护
- 通向云帝国的铁王座:卖书的贝佐斯和卖软件的纳德拉
- linux下的MBR(msdos)分区与格式化----fdisk mkfs
- 华尔街见闻:泰格马克引领未来AI《见面》之旅
- java获取异常信息
- windows系统重装(绝对干净)、备份还原、引导修复步骤
- 三天打鱼两天晒网python程序_三天打鱼两天晒网
- mysql 加上天数_MySQL Datetime添加天数?
- 山区灭火机器人_帅气!池州市首台消防灭火机器人正式投入基层执勤
- Javaweb学习笔记——Javaweb概述
- 将字符串“name=zhangsan age=18 classNo=201062001”拆分为“zhangsan 18 20162001 ”
- Macbook 466 光驱改造为ssd固态硬盘总结
热门文章
- matlab 添加环境变量,CentOS 添加环境变量的三种方法
- 【动态数组】数据结构01-(java实现)
- 学习笔记Hadoop(十)—— Hadoop基础操作(2)—— HDFS常用Shell操作
- synchronized锁的基本用法
- java语言 文件上传,java中实现文件上传的方法
- mysql 创建唯一索引_Mysql创建索引
- vscode-git中的U,M和D文件标记含义
- 神经网络 深度学习 专业术语解释(Step, Batch Size, Iteration,Epoch)
- css选择器 pa,p~a,p+a区别
- CommonJs, AMD/RequireJs,CMD/seajs