2019独角兽企业重金招聘Python工程师标准>>>

当然事前一定要先配好环境;

下面来说步骤:

1. 在代码里写入要调用的native方法:

String getData();String getData2();

2. 动态链接库;

System.loadLibrary("ndktest")

3. 在build.gradle文件中 加入ndk{...}代码:

defaultConfig {applicationId "com.hong.ndktest"minSdkVersion 19targetSdkVersion 23versionCode 1versionName "1.0"ndk{moduleName "ndktest"abiFilters "armeabi", "armeabi-v7a", "x86"}
}

4. 在main目录下创建 jni 文件夹;

5. 在jni 文件夹里面创建 .c 文件:

6. 用javah生成c的头文件
         a,控制台先进入工程的目录下    项目路径\AndroidStudioProjects\NDKDemo\ndkdemo2\src\main>
         b,执行下面命令:
           javah -d jni -classpath D:\AndroidStudio\sdk\platforms\android-23\android.jar;..\..\build\intermediates\classes\debug yourPackageName.MainActivity

(注释: 红字 23 这里要根据你build.gradle文件中的 tartgetSdkVersion 更改);

当回车之后没有反应 就成功了,在jni文件夹里可以看到生成的头文件(在第5步的图片中" com_hong_ndktest_MainActivity.h" 便是生成的头文件)

7. 生成头文件成功后,会在  build\intermediates\ndk\debug 中生成 .mk 文件。打开头文件,里面有 对应的 native 方法(方法签名都省了):

/** Class:     com_hong_ndktest_MainActivity* Method:    getData* Signature: ()Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_com_hong_ndktest_MainActivity_getData(JNIEnv *, jobject);
/** Class:     com_hong_ndktest_MainActivity* Method:    getData2* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_hong_ndktest_MainActivity_getData2(JNIEnv *, jobject);

8.  把对应的方法黏贴到 .c 文件中,并填写逻辑代码,不要忘了把include<>也黏贴过去:

//
// Created by Hong on 2016/3/30.
//
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_hong_ndktest_MainActivity */#define _Included_com_hong_ndktest_MainActivity
/** Class:     com_hong_ndktest_MainActivity* Method:    getData* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_hong_ndktest_MainActivity_getData(JNIEnv * env, jobject jobj) {return (*env)->NewStringUTF(env, "from C");
}/** Class:     com_hong_ndktest_MainActivity* Method:    getData2* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_hong_ndktest_MainActivity_getData2(JNIEnv *env, jobject jobj) {return (*env)->NewStringUTF(env, "fromCgetData2");
}

9. 在 java 端可以调用 c 了;

==================================分割线就是我可恨=======================

下面粘贴源码:

MainActivity;

package com.hong.ndktest;import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;public class MainActivity extends Activity {TextView tv_show;{System.loadLibrary("ndktest");//加载库}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_show = (TextView) findViewById(R.id.tv_show);}/** button 点击事件*/public void show(View view) {String data = getData()+"===="+getData2();//调用native方法tv_show.setText(data);}//声明native方法public native String getData();public native String getData2();}

TestJNI.c

#include <jni.h>#define _Included_com_hong_ndktest_MainActivity
/** Class:     com_hong_ndktest_MainActivity* Method:    getData* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_hong_ndktest_MainActivity_getData(JNIEnv * env, jobject jobj) {return (*env)->NewStringUTF(env, "from C");
}/** Class:     com_hong_ndktest_MainActivity* Method:    getData2* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_hong_ndktest_MainActivity_getData2(JNIEnv *env, jobject jobj) {return (*env)->NewStringUTF(env, "fromCgetData2");
}

效果:

点击button后:

最后说一句:如果项目报错的话 在 gradle.properties 文件中最后一行添加如下语句:

android.useDeprecatedNdk=true

demo下载地址: http://download.csdn.net/download/qq_33363534/9477065

转载于:https://my.oschina.net/u/2526599/blog/649998

NDK开发简单demo相关推荐

  1. 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  2. NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)

    原文地址:http://blog.csdn.net/cuiyufeng2/article/details/64125594 前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的.  1. 它没 ...

  3. Android Studio2.2 CMAKE高效NDK开发

    转自:http://www.it165.net/pro/html/201611/76734.html 前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的. 1. 它没有代码提示!!!这意味着 ...

  4. NDK开发_cwin配置+编程简单步骤

    最近在调试 车辆识别demo,说实话,虽然最初接触jni的时候,是在eclipse工程中进行开发的,不过后面遇到的项目都是直接放到了android 源码中编译的,所以对于在eclipse中的ndk开发 ...

  5. JavaWeb开发:从购买服务器到简单demo运行

    写这篇文章的目的: 一个是为了记录实施过程,方便自己日后查阅: 另一个是给项目组成员提供一个参考,方便他们以后搭建自己的项目环境: 当然若能帮助到更多的朋友,那就再好不过了:D 需要注意: 我本身也是 ...

  6. Android之NDK开发

    一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语 ...

  7. Android之NDK开发学习总结

    Android之NDK开发 http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台 ...

  8. 016 Android之NDK开发

    文章目录 NDK入门指南 下载NDK和工具 NDK工程说明 JNI数据类型 JNI中的描述符 JNI基本使用 JAVA代码调用C++代码 C++代码调用JAVA代码 C++代码修改JAVA字段 动态注 ...

  9. OpenCV android sdk配置OpenCV android NDK开发实例

    OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...

  10. 使用Android Studio 进行NDK开发和调试

    2019独角兽企业重金招聘Python工程师标准>>> 尽管Android Studio已经越来越流行了,但很多人还是习惯于Eclipse或源码环境下开发JNI应用.个人认为使用An ...

最新文章

  1. 基于DOM的Web信息提取方法
  2. python 读取wav 音频文件的两种方式
  3. 亲爱的,我是一条Linux运维技术学习路径呀。
  4. 你写的 Python 代码总是不规范?用它!
  5. JavaWeb学习总结(1-53)
  6. 细说安防宽动态:背光补偿与二次曝光
  7. 防暴力破解一些安全机制
  8. Kubernetes 学习2 k8s基础概念
  9. NodeJs或者命令行爬取网络教程并生成PDF文件,以阮一峰JavaScript教程和ES6教程为例 ...
  10. 拷贝linux系统镜像
  11. Java权限管理系统完整案例
  12. tp对接支付宝转账提现
  13. 浙江概况——经济发展篇
  14. 顶级计算机专家一年赚多少,成为一个计算机专家需要多高的IQ?请实话实说
  15. Linux下编译程序/usr/bin/ld: cannot find -l*错误的解决方法
  16. 07_Python3.6+selenium2.53.6自动化测试_通过id定位百度输入框
  17. 分布式数据库架构路线大揭秘
  18. comsol-亥姆霍兹线圈
  19. python学习笔记(一)PIP
  20. 利用Java8新特性stream流给集合中的某个属性赋值

热门文章

  1. 【VS2010学习笔记】【编程实例】 (含有类的动态链接库的封装和调用)
  2. 智能优化算法:吉萨金子塔建造优化算法-附代码
  3. STLC++(队列queue、栈stack、set\multiset 的用法)
  4. ENVI学习总结(十三)——波谱库的浏览与创建
  5. ENVI学习总结(十一)——NDVI的计算
  6. for(;;)和while(true)的区别
  7. DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Labeled Tra
  8. 性能测试--jmeter中参数化【14】
  9. matlab padarray,MATLAB中padarray函数用法
  10. pythonsocket中tcp通信接收不到数据_通信中数据发生错误,接收方如何判决?检错码与纠错码必不可少...