文档章节

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

fengsehng
 fengsehng
发布于 2016/11/09 09:18
字数 512
阅读 3
收藏 0
点赞 0
评论 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
朝阳
程序员
Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy ⋅ 2013/09/05 ⋅ 0

Cocos2d-x 2.2.3 使用NDK配置编译环境

https://blog.csdn.net/wwj_748/article/details/30072379 2014年6月11日 Cocos2d-x 3.0以下的开发环境的配置恐怕折磨了很多人,使用cygwin配置编译环境足够让初学者蛋疼一阵子了。本篇博客就...

tropicofcancer9 ⋅ 04/19 ⋅ 0

Android JNI学习(二)——实战JNI之“hello world”

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头 ⋅ 05/09 ⋅ 0

图片和图形之用OpenGL ES显示图形(9)

原文 概要 Android框架提供了大量用于创建有吸引力的功能性图形用户界面的标准工具。但是,如果您想要更多地控制应用程序在屏幕上绘制的内容,或者冒险进入三维图形,则需要使用其他工具。A...

lichong951 ⋅ 05/26 ⋅ 0

Android NDK开发的一点尝试

写在前面 笔者是一个“原始”的C++开发者,对Java编程虽说不上抵触但也没有C++那么顺手。而且,作为一个游戏引擎,不管是在什么地方,效率总是第一位的,尤其是在移动平台这样资源吃紧的环境...

闪电的蓝熊猫 ⋅ 04/06 ⋅ 0

解决JNI在Windows环境下因长路径导致编译失败问题

之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题。得到了下面的编译报错信息: Build command failed. Error while executin...

杰嗒嗒的阿杰 ⋅ 05/04 ⋅ 0

Android 开发者应该知道的 Kotlin 技巧

今年的 Google I/O 大会上,Google 是这样评价 Kotlin:在过去一年里,有35%的专业 Android 开发者在使用 Kotlin,其中95%的开发者都对 Kotlin 非常满意。虽然 Kotlin 正处于发展的初始阶段,...

码云Gitee ⋅ 05/28 ⋅ 0

Android动画:献上一份详细 & 全面的动画知识学习攻略

前言 动画的使用 是 开发中常用的知识 可是动画的种类繁多、使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策 本文将献上一份动画的全面介绍攻略,包括动...

Carson_Ho ⋅ 06/06 ⋅ 0

Qt (5.10.0)for android

Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。那么如何在...

SmileAgain_ ⋅ 05/14 ⋅ 0

我的Android重构之旅:架构篇

EF A舞蹈服 去年10月底来到了新公司,刚开始接手 Android 项目时,发现该项目真的是一团遭,项目开发上没有任何架构可言,开发人员连简单的 MVC、MVP 都不了解,Activity 及其臃肿,业务边界...

codeGoogle ⋅ 05/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部