使用Android Sutdio创建一个新的工程后,接下来记录创建NDK工程的基本步骤。

本文将达到:

1. 创建NDK工程

2. 在JNI中输出Log语句

3. 指定编译的so库的abi版本

4. 解决在创建NDK工程中的问题

Step: 1. 添加native接口

注意写好native接口和System.loadLibrary()即可了,并无特别之处。

P.S:onCreate()中对R.id.txt执行setText(),所以这里需要对xml布局文件按正常的开发步骤进行修改即可。

直接给出代码如下:

Step: 2.执行Build->Make Project

这一步骤执行一下,验证工程中并无其它错误,并对工程进行了编译,生成了.class文件.

.class文件的生成路径是在 app_path/build/intermediates/classes/debug下的.如下图:

Step: 3.javah生成c头文件

点击"View->Tool Windows->Terminal",即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件。

这里需要注意的是要进入 <Project>\app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在<Project>\app\src\main路径下,可以在Studio的工程结构中直接看到。

操作命令:

javah -d jni -classpath <SDK_android.jar>;<APP_classes> lab.sodino.jnitest.MainActivity

具体操作图如下:

  1. javah -d jni -classpath c:\Users\sodinochen\AppData\Local\Android\sdk\platforms

  2. \android-16\android.jar;..\..\build\intermediates\classes\debug lab.sodino.jnitest.MainActivity

对于"主版本51比50新,此编译器支持最新的主版本"则是由于电脑上安装了两个版本的jdk引起的,而当前使用的是旧的jdk。

把旧的jdk删除,并执行java version命令后显示当前jdk为最新的1.7时,则不会再有此提示了。如下图:

最后的生成结果:

Step: 4.编辑c文件

在main.c文件中实现头文件中的方法,具体功能为直接return回一个String,并且使用android_log打印出相关日志。

代码如下:

  1. /* DO NOT EDIT THIS FILE - it is machine generated */

  2. #include <jni.h>

  3. #include <android/log.h>

  4. #ifndef LOG_TAG

  5. #define LOG_TAG "ANDROID_LAB"

  6. #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)

  7. #endif

  8. /* Header for class lab_sodino_jnitest_MainActivity */

  9. #ifndef _Included_lab_sodino_jnitest_MainActivity

  10. #define _Included_lab_sodino_jnitest_MainActivity

  11. #ifdef __cplusplus

  12. extern "C" {

  13. #endif

  14. /*

  15. * Class: lab_sodino_jnitest_MainActivity

  16. * Method: getStringFromNative

  17. * Signature: ()Ljava/lang/String;

  18. */

  19. JNIEXPORT jstring JNICALL Java_lab_sodino_jnitest_MainActivity_getStringFromNative

  20. (JNIEnv * env, jobject jObj){

  21. LOGE("log string from ndk.");

  22. return (*env)->NewStringUTF(env,"Hello From JNI!");

  23. }

  24. #ifdef __cplusplus

  25. }

  26. #endif

  27. #endif

到这里后,我们再执行一个"Build->Make Project",发现"Messages Gradle Build"会给出提示如下:

  1. Error:Execution failed for task ':app:compileDebugNdk'.

  2. > NDK not configured.

  3. Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.

  4. (On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)

这里提示了NDK未配置,并且需要在工程中的local.properties文件中配置NDK路径。好了,提示很清楚了,那我们就进入下一步吧。

Step: 5.配置NDK

这一步包括两个动作:

下载NDK文件然后在local.properties中指定NDK的目录。

或者在file>settings>Android Sdk>sdk tools中选择NDK,Cmake,LLDB插件。

1.指明ndk路径

2. 修改build.gradle配置

工程中共有两个build.gradle配置文件,我们要修改的是在<Project>\app\build.gradle这个文件。为其在defaultConfig分支中增加上

    以上配置代码指定的so库名称为SUSILib,链接时使用到的库,对应android.mk文件中的LOCAL_LDLIBS,及最终输出指定三种abi体系结构下的so库。

添加后如下图:

这时,再执行"Build->Rebuild Project",就可以编译出so文件了。

编译出来的库文件被Studio输出到了下图的路径中

Step: 6.安装运行

界面:

查看Log打印:

原 Android studio下的DNK开发JNI详解流程相关推荐

  1. Android Studio安装与App开发步骤详解

    环境准备 使用的软硬件具体如下: Windows 7 Android Studio 3.3.2[简称:AS,从官网可以下载,或者使用低版本升级:help->check for update] J ...

  2. android studio下的NDK开发详解

    点击右边,选择你解压的NDK,点击应用.这一步将工具包关联到android  studio. 在 local.properties 文件中设置ndk的路径: 就是你解压的NDK工具集的路径  我的是  ...

  3. android工程怎么连手机,android studio与手机连接调试步骤详解

    android studio 版本不同连接手机方式有细微的不同,主要方式相似.介绍主要分手机和电脑两部分介绍. 一.手机部分 1.手机端下载一个"一键root权限获取",在安装的过 ...

  4. Android Studio项目中Build.gradlle配置详解

    许多对gradlle不了解的宝宝们总是会在配置的过程中遇到一系列的问题,大体都是对gradlle不够了解.所以在此详细说明gradlle中每一项的用处,如下 1. apply plugin: 'com ...

  5. Android studio 下 JNI 开发实例

    在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 到底什么是JNI,什么是NDK? 何为"交叉编译"? 先看什么是 JNI?JNI 的全称就是 Java ...

  6. Android Studio 下安卓 jni 开发错误 undefined reference to AndroidBitmap_getInfo

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 又掉坑里了 今天开发 uvc,又遇到了坑: 和之前的这个坑类似:Android Studio 下安卓 jni 开发错误 ...

  7. 26.Android Studio下Ndk开发(ffmpeg导入Android studio以cmake方式编译的过程)

    Android studio 2.2开始支持cmake的方式进行jni开发,我在另一篇10.Eclipse下Ndk开发(ffmpeg解码)中写过Eclipse下编译ffmpeg的过程,但是现在几乎没有 ...

  8. Android Studio下jni应用

    最近在将一个小应用从eclipse开发迁移到android studio,程序中有native代码实现,在eclipse是靠Android.mk这么个mk文件来组织编译的,但到android stud ...

  9. Android studio 使用NDK工具实现JNI编程

    前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...

  10. Android Studio下项目构建的Gradle配置及打包应用变体

    Gradle简介   Gradle是一个自动化构建工具,采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑.具有语法简洁.可读性强.配置灵活等特点. ...

最新文章

  1. Hadoop文件系统元数据fsimage和编辑日志edits
  2. 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.1节模式:Ubiquitous Language...
  3. php mssql 端口,MSSQL_SQL Server端口更改后的数据库连接方式,SQL Server端口,大家可以通过quot - phpStudy...
  4. websocket导致spring boot 项目单元测试启动失败的问题解决
  5. ps抠头发插件_PS顶级抠图插件Topaz Mask AI 1.0.2!支持2020Win/Mac,转发领取
  6. SQL SERVER 数据库如何限制一列不能重复(已经有主键)
  7. java byte转bigdecimal_Java BigDecimal byteValueExact()用法及代码示例
  8. JavaFX 2:如何加载图像
  9. Taro+react开发(28)小程序怎么进行自适应
  10. (三)Mybatis总结之动态sql
  11. 寻找二值图像的连通域算法分析
  12. android第三方好用,有哪些好用的安卓ROM值得推荐?安卓端最好的第三方ROM介绍...
  13. 创业之前必须要做的八个测试
  14. 为什么学古琴的人越来越多?——【唐畅古琴】
  15. 百行代码手撸扫雷(下)c/c++
  16. ubuntu共享文件夹不显示及设备空间不足解决[随手笔记]
  17. OAuth 2.0实战(一)-通俗光速入门
  18. UWA 技术分享连载 转载
  19. 服务器装系统提示获取分区失败,u盘装系统时获取硬盘分区失败怎么办
  20. java 批量图片下载

热门文章

  1. 关键词搜索-免费搜索关键词排名软件
  2. C语言实现推箱子游戏完整代码
  3. 发送邮件被对方服务器退回是什么原因导致的?
  4. 英语六级口语 计算机,英语六级口语
  5. svn 命令行使用总结
  6. java代码在图片上画框
  7. 2021最新MyEclipse安装教程
  8. python计算等额本息还款房贷_一个简单的房贷计算器(等额本息)
  9. Unable to read entire header,0 bytes read;expected 512 bytes
  10. ‘文件夹正在使用‘解决方案