android的ndk开发简介-android学习之旅(93)
环境搭建
1.安装ndk
2.安装cygwin (android是基于linux的Framework,运行的本地库是.SO,而不是.dll库,大部分都实在windows下开发,如果是linux就没这个必要)
3.安装cygwin时候,在安装包时候,要安装Devel下面的gcc-core,g++,make三个包
配置cygwin环境
配置,为ndk的安装目录加进path。验证是否成功:打开cygwin,输入ndk-build,看是否执行
实现一个java层调用c语言实现的两个整数相加功能的函数,本地方法对应java层方法,本地函数代表c方法
java层的核心调用代码NDKExam.java如下:
{
//调用本地方法,加载本地库
System.loadLibrary("ndk-exam");
txetView.setText(add(1,1)+"");
}
//本地方法声明
public native int add(int x,int y);
生成jni本地函数原型,衣eclipse为例,编译NDKExam.java方法,eclispe自动编译了。使用javah命令处理NDKExam.class,生成.h文件,包含与本地方法add(),对应的本地函数原型
在project目录下新建jni目录,新建second.c文件,根据获得的函数名 ,实现本地函数,second的具体实现,又调用了first.c文件,second的代码如下:
#include "first.h";
#include "jni.h";
jint java_org_example_NDKExam_add(
JNIEnv* env,
jobject this,
jint x,
jint y)
{
return first(x,y);
}
编写first.c和first.h,包括和second.c全部放入jni中,代码如下:
//first.c
#include "first.h"
int first(int x,int y){
return x+y;
}
//first.h
#ifndef FIRST_H
#define FIRST_H
extern int first(int x,int y);
#endif/* FIRST_H */
编写android.mk文件放入jni中 ,具体代码如下:
#指定源文件的位置
LOCAL_PATH:= $(call my-dir)
#初始化与make相关的环境变量
include $(CLEAR_VARS)
#库编译相关信息(库名,源码)
LOCAL_MODULE := ndk-exam
LOCAL_SRC_FILES := first.c second.c
#生成共享库
include $(BUILD_SHARED_LIBRARY)
最后执行cygwind的ndk-build命令
打开cygwin,进入jni的存在工程的根目录,既是jni的上级目录,执行ndk-build命令,会自动查找androidManifest.xml文件爱,找到了然后进入jni目录,编译生成libndk-exam.so文件,然后存放在lib文件夹下面
android的ndk开发简介-android学习之旅(93)的更多相关文章
- 【转】 Android的NDK开发(1)————Android JNI简介与调用流程
原文网址:http://blog.csdn.net/conowen/article/details/7521340 ****************************************** ...
- Android的NDK开发(1)————Android JNI简介与调用流程
1.JNI简介 JNI全称为Java Native Interface(Java本地调用).从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C ...
- Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
1. 在Android的Java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121 在JN ...
- Android之NDK开发(转)
Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...
- Android之NDK开发
转自:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支持C ...
- 【转】Android之NDK开发
原文网址:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支 ...
- Android之NDK开发(转载)
http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C+ ...
- Android下NDK开发环境搭建
Android下NDK开发环境搭建 1. AndroidNDK安装与配置 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...
- android Jni NDK开发环境搭建及其简单实例的编写
android Jni NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...
随机推荐
- 有n个数,输出其中所有和为s的k个数的组合。
分析:此题有两个坑,一是这里的n个数是任意给定的,不一定是:1,2,3...n,所以可能有重复的数(如果有重复的数怎么处理?):二是不要求你输出所有和为s的全部组合,而只要求输出和为s的k个数的组合. ...
- Java学习之参数传递详解
Java中的参数传递问题: 基本类型:形式参数的改变对实际参数没有影响.在参数传递过程中,形参和实参占用了两个完全不同的内存空间. 引用类型:形式参数的改变直接影响实际参数.在参数传递的过程中,形参和 ...
- java设计模式-----单例设计模式
设计模式是个很高深的东西,我也是略懂皮毛,下面让我用最简洁易懂的语言描述下单例设计模式吧. 一些人总结出来用来解决特定问题的固定的解决方案. 解决一个类在内存中只存在一个对象,想要保证对象的唯一. 1 ...
- TDD实践感悟
每个开发者都想开发出高质量的代码,更少的Bug.更容易维护不仅让人心情愉悦,也让我们有更多时间去学习和生活. 少加一些班,多陪家人,:) 当开发任务非常简单时,比如基本的增删改查,可能使用怎样的方式开 ...
- Spark 1.0 开发环境构建:maven/sbt/idea
因为我原来对maven和sbt都不熟悉,因此使用两种方法都编译了一下.下面记录一下编译时候遇到的问题.然后介绍一下如果使用IntelliJ IDEA 13.1构建开发环境. 首先准备java环境和sc ...
- 手把手教你轻松实现listview上拉加载
上篇讲了如何简单快速的的实现listview下拉刷新,那么本篇将讲解如何简单快速的实现上拉加载更多.其实,如果你已经理解了下拉刷新的实现过程,那么实现上拉加载更多将变得轻松起来,原理完全一致,甚至实现 ...
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...
- (NO.00004)iOS实现打砖块游戏(五):游戏场景类
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 创建游戏场景类头文件 在Xcode创建新GameScene类,继 ...
- iOS中 图文混排/自定义图文混排 作者:韩俊强
指示根视图:(准备几张图片,把label加载在window上) CustomLable *label = [[CustomLable alloc]initWithFrame:CGRectMake(0, ...
- Linux IPC实践(1) -- 概述
进程的同步与互斥 进程同步: 多个进程需要相互配合共同完成一项任务. 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些 ...