转自:http://blog.csdn.net/luhaoying1111/article/details/72468867

安装NDK

在工具栏点击File->Settings->Appearance & Behavior->System Settings->Android SDK->SDK Tools选中LLDB和NDK,点击确认,软件会自动安装NDK。
  • 1
  • 2

默认安装路径: 你的sdk路径\ndk-bundle文件夹

新建一个工程

在main文件夹下新建一个目录jni

在jni目录下新建一个文件 hello-jni.c

在hello-jni.c 中编写c代码

        #include <jni.h>
//jstring: 返回值类型 String
//规则: Java_包名_类名_方法名(jvm虚拟机的指针,调用者对象)
jstring Java_com_lhy_jnidemo01_MainActivity_helloFromC(JNIEnv* env,jobject thiz){
return (*env)->NewStringUTF(env, "你好,我来自C代码 !!!");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在jni目录下新建Android.mk文件

添加如下内容:

        #指定编译的文件夹  指定当前文件目录
LOCAL_PATH := $(call my-dir)
#编译器会定义很多的临时变量,中间变量,最好清空所有的中间变量。
include $(CLEAR_VARS)
#编译出来模块的名称
LOCAL_MODULE := hello-jni
# 编译的源代码的名称
LOCAL_SRC_FILES := hello-jni.c
#编译一个动态库,静态库
#静态库 文件名.a 包含所有的函数并且函数运行的依赖,体积大,包含所有的API
#动态库 文件名.so 包含函数,不包含函数运行的依赖,体积小,运行的时候,去操作系统寻找需要的API
include $(BUILD_SHARED_LIBRARY)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在build.gradle中配置

        externalNativeBuild {
ndkBuild {
path file("src\\main\\jni\\Android.mk")
}
}
  • 1
  • 2
  • 3
  • 4
  • 5

点击 Make Project(或Ctrl+F9) 即可生成.so文件

.so文件的路径: app\build\intermediates\ndk-build

在MainActivity里面:

1,需要把动态链接库加载到jvm虚拟机,添加以下代码:

        static{
//System.loadLibrary("库文件名称不带前缀,后缀名");
System.loadLibrary("hello-jni");
}
  • 1
  • 2
  • 3
  • 4

2,声明native的方法:

 public native String helloFromC();
  • 1

3,像调用一般java代码一样调用native的方法.

 String str = helloFromC();
  • 1

[demo源码下载]

版权声明:本文为博主原创文章,未经博主允许不得转载。

在AndroidStudio2.3.2下JNI开发的详细步骤(转)的更多相关文章

  1. android下JNI开发

    android下JNI开发 what 什么是JNI JNI java native interface native本地 java本地接口 通过JNI可以实现java和本地代码之间相互调用 jni可以 ...

  2. Android studio 下 JNI 开发实例

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

  3. centos7下安装oracle11gR2的详细步骤

    环境准备 安装包: CentOS-7-x86_64-DVD linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip 本教 ...

  4. linux下JNI开发—Hello为例

    转自:https://www.cnblogs.com/snake-hand/archive/2012/05/25/2517412.html 前期准备: 1.Java JDK 2.gcc 3.g++ 确 ...

  5. 01_c++下jni开发说明

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  6. [傻瓜版] Redis在Windows下的开发环境配置步骤

    redis默认运行在unix体系下,windows无法直接运行官方版.以下是几种解决方案, 一)Windows移植版.启动速度飞快,优先推荐使用. a) 2.6.12 是稳定版,我用64位版来做开发环 ...

  7. CentOS 6.5下搭建LAMP环境详细步骤

    1.确认搭建LAMP所需的环境是否已经安装: [root@localhost ~]#rpm -q make gcc gcc-c++ zlib-devel libtool libtool-ltdl li ...

  8. xxx金融后台管理系统详细版:包括本地开发调试详细步骤

    效果演示地址, github地址: demo演示:         1.About 此项目是 vue2.0 + element-ui + node+mongodb 构建的后台管理系统,所有的数据都是从 ...

  9. 【申嵌视频】基于VMWare虚拟机下安装ubuntu操作系统的详细步骤

    [申嵌视频]基于VMWare虚拟机下安装ubuntu操作系统 适合搭建mini2440, Tiny6410, smart210,Tiny4412, NanoPC-T2, NanoPC-T3, Nano ...

随机推荐

  1. setmetamode - define the keyboard meta key handling

    总览 setmetamode [ meta|bit|metabit | esc|prefix|escprefix ] 描述 没有参数时, setmetamode 将打印当前 Meta 键模式; 有参数 ...

  2. C#驱动mysql明明数值不为空却一直说DBNull.Value的诡异情况

    最近遇见了一个很诡异的情况,就是当我们关联表查询时,副表如果有bit类型的字段的话,C#驱动读取该列时就会抛出“DBNull.Value不能转换为其他类型”的异常,但是我们如果拿出sql语句单独查询的 ...

  3. java23种设计模式(一)-- 工厂模式、抽象工厂模式和单例模式

    一.工厂模式 1.定义统一的接口,并在接口中定义要实现的抽象方法. 2.创建接口的具体实现类,并实现抽象方法. 3.创建一个工厂类,根据传递的参数,生成具体的实现类对象,执行具体的方法. 优点: 1. ...

  4. 树形查询sql

    DROP FUNCTION IF EXISTS PersonName; CREATE FUNCTION PersonName(parent_id smallint) RETURNS VARCHAR(2 ...

  5. 如何给 List 集合排序

    一,List<Integer>的排序示例代码:List<Integer> list = new ArrayList<Integer>();list.add(6);l ...

  6. 【leetcode】908. Smallest Range I

    题目如下: 解题思路:简单的不能再简单的题目了,对于任意一个A[i]来说,其可能的最小的最大值是A[i]-K,最大的最小值是A[i]+K.遍历数组,求出所有元素中最大的最小值和最小的最大值,两者之差( ...

  7. 【leetcode】421. Maximum XOR of Two Numbers in an Array

    题目如下: 解题思路:本题的难点在于O(n)的复杂度.为了减少比较的次数,我们可以采用字典树保存输入数组中所有元素的二进制的字符串.接下来就是找出每个元素的异或的最大值,把需要找最大值的元素转成二进制 ...

  8. shell脚本编写nginx部署脚本

    下面为shell脚本编写的nginx的安装及修改nginx.conf的脚本,脚本比较简单: #!/bin/bash function yum_install(){ yum install epel-r ...

  9. boost库:多线程

    1.线程管理 最重要的一个类是boost::thread,是在boost/thread.hpp里定义的,用来创建一个新线程. #include <boost/thread.hpp> #in ...

  10. 带你认识SATA、mSATA 、PCIe和M.2四种接口

    http://mst.zol.com.cn/615/6150989.html 犹记得当年Windows7系统体验指数中,那5.9分磁盘分数,在其余四项的7.9分面前,似乎已经告诉我们机械硬盘注定被时代 ...