文档章节

android的ndk开发简介-android学习之旅(93)

fengsehng
 fengsehng
发布于 2016/11/09 09:18
字数 512
阅读 4
收藏 0

环境搭建

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文件夹下面

© 著作权归作者所有

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
私信 提问
2017 我用 5 个月分享了 98 篇优秀博文

对上半年所分享的文章进行一个整理,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细分,已基本可以查找了。 如果觉得...

code小生
10/30
0
0
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 Android 网络编程2 Okhttp缓存机制 Android 网络编程3 Java NIO to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图...

香沙小熊
06/21
0
0
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0
转载 Cocos2d-x android项目移植——各类bug及常见问题解决方案全集

在学习IOS项目如何移植到Android的项目过程中,相信很多初学者会遇到各种各样的问题。特别是移植从事C++语言编程的。在大家学过 java,考试还考的不错。但是说到jni,就直接不知道了。在移植...

Silencer
2013/08/16
0
0
Ubuntu下android学习——(1)开发环境的搭建

强调:你使用的是ubuntu,不是windows,你学习的是Android开发,不是怎么配环境 一、Android简介 Android是基于Linux内核的软件平台和操作系统。 Android构架主要由3部分组成,linux内核层,...

OrionBox
2012/07/21
0
1

没有更多内容

加载失败,请刷新页面

加载更多

使用 React 和 Vue 创建相同的应用,他们有什么差异?

在工作中应用 Vue 之后,我对它有了相当深刻的理解。 不过,俗话说「外国的月亮比较圆」,我好奇「外国的」 React 是怎么样的。 我阅读了 React 文档并观看了一些教程视频,虽然它们很棒,但...

阿K1225
19分钟前
0
0
如何使用Kubernetes的configmap通过环境变量注入到pod里

在Kubernetes官网里,有这样一篇文章,提到了Kubernetes里的一个最佳实践就是把应用代码同配置信息分开,一种方式就是使用Kubernetes 1.2里引入的configmap概念。 https://kubernetes.io/bl...

JerryWang_SAP
34分钟前
0
0
2天闭门培训|以太坊智能合约从入门到实战(北京)

2天培训 16个课时 探寻技术原理,精通以太坊智能合约开发 以太坊智能合约是现在应用的最广泛的区块链应用开发方式,HiBlock区块链社区针对以太坊智能合约的学习特别推出2天闭门研修班,通过2...

HiBlock
37分钟前
0
0
限定某个目录禁止解析php,限制user_agent,php相关配置

11月20日任务 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置 1.限定某个目录禁止解析php 核心配置文件内容 <Directory /data/wwwroot/www.123.com/upload> p...

hhpuppy
48分钟前
3
0
Spring的好文章

孤傲苍狼 https://www.cnblogs.com/xdp-gacl/p/4249939.html 跟我学spring http://jinnianshilongnian.iteye.com/blog/1413846 SpringIoc 和Spring Aop 代理模式: 静态代理 动态代理 cglib代......

wangwei2134
59分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部