文档章节

android初探ndk开发-eclipse版

moz1q1
 moz1q1
发布于 2016/10/07 10:40
字数 856
阅读 2490
收藏 30

正如其他所说,ndk r7开始,无需使用cygwin,就能生成so文件。对我这些菜鸟非常有帮助 - -

在eclipse新建一个android project,在根目录创建一个jni目录,如图所示:

在src目录创建一个JniTest.java文件,我的包名是com.mo.android_jni_2016.JniTest,如图所示:

在JniTest.java里面写上native代码

public class JniTest {
	public static native String addStr(String str1, String str2);

	public static native int addInt(int int1, int int2);
}

由于eclipse能很方便能生成JniTest.class文件,只需要到对应的项目工程路径下,就能找到class文件,文件路径如类似:E:\xxxx\eclipse\workspace\Android_Jni_2016\bin\classes,在cmd下,使用javah com.mo.android_jni_2016.JniTest.class,就能在classes目录下,生成了一个com_mo_android_jni_2016_JniTest.h文件,如图所示:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_mo_android_jni_2016_JniTest */

#ifndef _Included_com_mo_android_jni_2016_JniTest
#define _Included_com_mo_android_jni_2016_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_mo_android_jni_2016_JniTest
 * Method:    addStr
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_mo_android_1jni_12016_JniTest_addStr
  (JNIEnv *, jclass, jstring, jstring);

/*
 * Class:     com_mo_android_jni_2016_JniTest
 * Method:    addInt
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_mo_android_1jni_12016_JniTest_addInt
  (JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

接着,打开这个com_mo_android_jni_2016_JniTest.h头文件,拷贝重命名一份,改为com_mo_android_jni_2016_JniTest.c,修改相应的内容

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "com_mo_android_jni_2016_JniTest.h"
#include <stdlib.h>
#include <stdio.h>
/* Header for class com_mo_android_jni_2016_JniTest */

/*
 * Class:     com_mo_android_jni_2016_JniTest
 * Method:    addStr
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_mo_android_1jni_12016_JniTest_addStr(
		JNIEnv *env, jclass this, jstring str1, jstring str2) {
	jstring result = (*env)->NewStringUTF(env, "hello jni by moziqi ");
	return result;
}

/*
 * Class:     com_mo_android_jni_2016_JniTest
 * Method:    addInt
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_mo_android_1jni_12016_JniTest_addInt(
		JNIEnv *evn, jclass this, jint int1, jint int2) {
	return int1 + int2+66;
}

编写Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Android_Jni_2016  #用户自定义
LOCAL_SRC_FILES := com_mo_android_jni_2016_JniTest.c  #对应的c文件
include $(BUILD_SHARED_LIBRARY)

把这3个文件拷贝到jni目录下,如图所示:

=========================配置buidler环境===========================================

(a)Project->Properties->Builders->New,新建一个Builder。 
(b)在弹出的【Choose configuration type】对话框,选择【Program】,点击【OK】: 
(c)在弹出的【Edit Configuration】对话框中,配置选项卡【Main】。 
在“Name“中输入新builders的名称(这个名字可以任意取)。

在“Location”中输入nkd-build.cmd的路径(这个是下载完ndk8后解压后的路径,这个建议放在根目录下面,路径不能有空格和中文)。根据各自的ndk路径设置,也可以点击“Browser File System…”来选取这个路径。 
在“Working Diretcoty”中输入TestNdk位置(也可以点击“Browse Workspace”来选取TestNdk目录)。如图1

clip_image002

图1

(d)继续在这个【Edit Configuration】对话框中,配置选项卡【Refresh】。如图2 
勾选“Refresh resources upon completion”, 
勾选“The entire workspace”, 
勾选“Recuresively include sub-folders”。

clip_image004

图2

(e)继续在【Edit Configuration】对话框中,配置选项卡【Build options】。 
勾选“After a “Clean””,(勾选这个操作后,如果你想编译ndk的时候,只需要clean一下项目 就开始交叉编译) 
勾选“During manual builds”, 
勾选“During auto builds”, 
勾选“Specify working set of relevant resources”。如图3

clip_image006

图3

点击“Specify Resources…”勾选TestNdk工程中新建的“jni“目录,点击”finish“。 点击“OK“,完成配置。 如图4

image

clip_image008

图4

=============================生成不同的cpu架构===================================

在buidler文件中加入这段话APP_ABI="armeabi armeabi-v7a x86 mips arm64-v8a mips64 x86_64"

转载请表明来之这里https://my.oschina.net/moziqi/blog/edit/754866

觉得这篇文章帮助到你了,你可以请我吃个糖。哈哈

谢谢以下博主

http://blog.csdn.net/byxdaz/article/details/39354495
http://www.2cto.com/kf/201502/377185.html

http://www.cnblogs.com/yejiurui/p/3476565.html

http://blog.csdn.net/yxnyxnyxnyxnyxn/article/details/18036459

http://www.jianshu.com/p/cb05698a1968

© 著作权归作者所有

moz1q1
粉丝 55
博文 351
码字总数 117569
作品 0
东莞
程序员
私信 提问
加载中

评论(7)

厉害吧24中
厉害吧24中
还有人用eclipse写安卓吗?心疼
moz1q1
moz1q1 博主

引用来自“亢宇飞”的评论

Android studio2.2ndk支持已经很好了

引用来自“executor”的评论

可是我公司还是用eclipse。。。

引用来自“吞鱼小王子”的评论

膜拜,还要人不
不知道啊,我菜鸟一个
moz1q1
moz1q1 博主

引用来自“亢宇飞”的评论

Android studio2.2ndk支持已经很好了

引用来自“executor”的评论

可是我公司还是用eclipse。。。

引用来自“吞鱼小王子”的评论

膜拜,还要人不
不要啊,我们公司搞sdk开发的,不搞app开发啊。
木头r
木头r
换了吧。。android studio同样可以加载eclipse的目录结构的工程,设置下代码和资源等路径就可以了。
吞鱼小王子
吞鱼小王子

引用来自“亢宇飞”的评论

Android studio2.2ndk支持已经很好了

引用来自“executor”的评论

可是我公司还是用eclipse。。。
膜拜,还要人不
moz1q1
moz1q1 博主

引用来自“亢宇飞”的评论

Android studio2.2ndk支持已经很好了
可是我公司还是用eclipse。。。
亢宇飞
亢宇飞
Android studio2.2ndk支持已经很好了
Android 必备开发包下载

作为Android开发的爱好者,您应该而且也必须要拥有下面的几个开发包才能进行基本的开发,没有的赶紧下载吧!下面的开发包主要有Android SDK、Java运行时库(JRE)、Eclipse、ADT插件等。 官方下...

无鸯
2011/09/15
21K
2
[Android] 环境配置之Android Studio开发NDK

======================================================== 作者:qiujuer 博客:my.oschina.net/u/1377710 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:http://my.osc......

Qiujuer
2014/12/21
0
8
使用 Android NDK 重用现有的 C 代码

开始之前 首先,了解 Android 原生开发工具包(NDK)的动机之一是得以利用开源项目,大多数项目都是用 C 语言编写的。完成本教程后,您将了解到如何创建 Java 本地接口(JNI)库,它使用 C ...

IBMdW
2012/01/05
952
0
【QT5.1】Windows 下的 安卓开发环境配置

本文参考 http://qt-project.org/wiki/buildingqt-androidon_windows 本人开发环境: win8 64 位,win7 ,xp 应该更没有问题,注意选择 32 位 ,64位的区分 1. 安装 Perl http://strawberryperl...

冰星零
2013/07/06
0
0
AIDE 2.0 发布,在 Android 上开发 Android

AIDE 2.0 发布了,AIDE 是一个直接在 Android 设备上开发真正的 Android 应用的集成开发环境。2.0 版本为我们提供了全新的界面以及支持使用 C++ 编写 Android 应用(集成 Android NDK)。同时...

oschina
2013/05/15
4.5K
18

没有更多内容

加载失败,请刷新页面

加载更多

NIO基于长度域的报文在Netty下的解码

1, 先复习一下粘包/拆包 1.1, 粘包/拆包的含义 TCP是个“流”协议, 并不了解上层业务数据的具体含义, 它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP...

老菜鸟0217
今天
8
0
从零开始搭建spring-cloud(2) ----ribbon

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。 其实我们已经在上...

Vincent-Duan
今天
19
0
get和post的区别?

doGet:路径传参。效率高,安全性差(get的传送数据量有限制,不能大于2Kb) doPOST:实体传参。效率低,安全性好 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Pos...

花无谢
昨天
4
0
当谈论迭代器时,我谈些什么?

当谈论迭代器时,我谈些什么? 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直...

豌豆花下猫
昨天
14
0
10天学Python直接做项目,我做了这5件事

初学者如何尽快上手python? 市面上关于如何学python的资料很多,但是讲的都太复杂。 我就是很简单的几句话,从小白到开发工程师,我只做了五件事。 我觉得任何商业计划书如果不能用几句话讲...

Python派森
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部