NDK开发简单demo
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相关推荐
- 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)
在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...
- NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)
原文地址:http://blog.csdn.net/cuiyufeng2/article/details/64125594 前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的. 1. 它没 ...
- Android Studio2.2 CMAKE高效NDK开发
转自:http://www.it165.net/pro/html/201611/76734.html 前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的. 1. 它没有代码提示!!!这意味着 ...
- NDK开发_cwin配置+编程简单步骤
最近在调试 车辆识别demo,说实话,虽然最初接触jni的时候,是在eclipse工程中进行开发的,不过后面遇到的项目都是直接放到了android 源码中编译的,所以对于在eclipse中的ndk开发 ...
- JavaWeb开发:从购买服务器到简单demo运行
写这篇文章的目的: 一个是为了记录实施过程,方便自己日后查阅: 另一个是给项目组成员提供一个参考,方便他们以后搭建自己的项目环境: 当然若能帮助到更多的朋友,那就再好不过了:D 需要注意: 我本身也是 ...
- Android之NDK开发
一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语 ...
- Android之NDK开发学习总结
Android之NDK开发 http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台 ...
- 016 Android之NDK开发
文章目录 NDK入门指南 下载NDK和工具 NDK工程说明 JNI数据类型 JNI中的描述符 JNI基本使用 JAVA代码调用C++代码 C++代码调用JAVA代码 C++代码修改JAVA字段 动态注 ...
- OpenCV android sdk配置OpenCV android NDK开发实例
OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...
- 使用Android Studio 进行NDK开发和调试
2019独角兽企业重金招聘Python工程师标准>>> 尽管Android Studio已经越来越流行了,但很多人还是习惯于Eclipse或源码环境下开发JNI应用.个人认为使用An ...
最新文章
- 基于DOM的Web信息提取方法
- python 读取wav 音频文件的两种方式
- 亲爱的,我是一条Linux运维技术学习路径呀。
- 你写的 Python 代码总是不规范?用它!
- JavaWeb学习总结(1-53)
- 细说安防宽动态:背光补偿与二次曝光
- 防暴力破解一些安全机制
- Kubernetes 学习2 k8s基础概念
- NodeJs或者命令行爬取网络教程并生成PDF文件,以阮一峰JavaScript教程和ES6教程为例 ...
- 拷贝linux系统镜像
- Java权限管理系统完整案例
- tp对接支付宝转账提现
- 浙江概况——经济发展篇
- 顶级计算机专家一年赚多少,成为一个计算机专家需要多高的IQ?请实话实说
- Linux下编译程序/usr/bin/ld: cannot find -l*错误的解决方法
- 07_Python3.6+selenium2.53.6自动化测试_通过id定位百度输入框
- 分布式数据库架构路线大揭秘
- comsol-亥姆霍兹线圈
- python学习笔记(一)PIP
- 利用Java8新特性stream流给集合中的某个属性赋值
热门文章
- 【VS2010学习笔记】【编程实例】 (含有类的动态链接库的封装和调用)
- 智能优化算法:吉萨金子塔建造优化算法-附代码
- STLC++(队列queue、栈stack、set\multiset 的用法)
- ENVI学习总结(十三)——波谱库的浏览与创建
- ENVI学习总结(十一)——NDVI的计算
- for(;;)和while(true)的区别
- DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Labeled Tra
- 性能测试--jmeter中参数化【14】
- matlab padarray,MATLAB中padarray函数用法
- pythonsocket中tcp通信接收不到数据_通信中数据发生错误,接收方如何判决?检错码与纠错码必不可少...