1.下载并安装GNUstep

下载地址:http://www.gnustep.org/experience/Windows.html

安装文件

   a.GNUstep MSYS System

    b.GNUstep Core

    c.GNUstep Devel

安装以上文件最新版本,都默认安装在同一个目录.

安装完成后,进入GNUstep菜单,选择shell,进入一个linux的命令界面,输入gcc -v ,如果显示一下gcc的版本信息,安装成功了.我安装的时候,没有安装GNUstep Deve,导致没有正确显示命令      结果,所以这个三个文件是必须安装的

2.在eclipse新建一个android程序.

在HelloJni Activity中:

/**
*
*/
package com.hello.jni; import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView; /**
* @author Johnson
* TODO
* 2013-11-25下午4:13:00
*/
public class HelloJni extends Activity { /**
*
*/
public HelloJni() {
// TODO Auto-generated constructor stub
} @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); String hello = sayHello("johnson");
TextView tv = (TextView) findViewById(R.id.showtext);
tv.setText(hello);
} public native String sayHello(String name);
static{
System.loadLibrary("HelloJNI");
} }

3.生成com_hello_jni_HelloJni.h文件

在windows命令行下,进入到项目地址/bin/classes目录下

执行 javah com.hello.jni.HelloJni

生成的com_hello_jni_HelloJni.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_hello_jni_HelloJni */ #ifndef _Included_com_hello_jni_HelloJni
#define _Included_com_hello_jni_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_hello_jni_HelloJni
* Method: sayHello
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_hello_jni_HelloJni_sayHello
(JNIEnv *, jobject, jstring); #ifdef __cplusplus
}
#endif
#endif

javah 包路径.调用JNI的Activity类的名称.  在之前先build项目,生成classes文件.

4.编写com_hello_jni_HelloJni.c文件

将生成的com_hello_jni_HelloJni.h文件移动到jni文件夹下,在jni文件夹下创建com_hello_jni_HelloJni.c文件

#include <string.h>
#include <com_hello_jni_HelloJni.h> /* This is a trivial JNI example where we use a native method
* to return a new VM String. See the corresponding Java source
* file located at:
*
* apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
*/ jstring Java_com_hello_jni_HelloJni_sayHello( JNIEnv* env,jobject thiz, jstring inputstr )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}

可以直接将com_hello_jni_HelloJni.h中的接口,拷贝到com_hello_jni_HelloJni.c中来,添加上参数,创建方法体.

方法名称和参数要和com_hello_jni_HelloJni.h中的一致.

5.编写Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := HelloJNI
LOCAL_SRC_FILES := com_hello_jni_HelloJni.c include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE  改成自己项目名称
LOCAL_SRC_FILES 改成自己c文件的名称

6.生成.so文件
进入GNUsetp shell
进入到项目的jni目录下
执行 ndk安装路径/ndk-build 成功生成libs/armeabi/libHelloJNI.so
如果生成失败,请仔细查看日志,一般是com_hello_jni_HelloJni.c参数问题,或者方法体内问题. 7.启动项目
如果是报loadLibrary,请检查 System.loadLibrary("HelloJNI");里面调用的名称是否与libHelloJNI.so对应.调用名称为HelloJNI,lib是系统默认的前缀.不用写.
												

最新文章

  1. C/C++: C++变量和基本类型
  2. [水煮 ASP.NET Web API2 方法论](3-7)默认 Action 请求方式以及 NonActionAttribute
  3. javascript宿主对象之window.location
  4. 每日一九度之 题目1030:毕业bg
  5. Delphi7中编译提示“Unsafe type &#39;PChar&#39;”的原因及处理办法
  6. Linux用户空间与内核空间(理解高端内存)
  7. CF 295E Yaroslav and Points(Splay)
  8. JavaScript prototype.js提升JavaScript开发效率
  9. 树莓派安装mysql
  10. Azure IoT 技术研究系列1-入门篇
  11. TDD最佳实践
  12. 分布式代码管理系统Git实践
  13. Dynamics CRM2013 Server2012下部署ADFS和IFD遇到的问题No Organization were retrived
  14. 使用python操作XML增删改查
  15. GridFS and Geospatial
  16. Vue控制路由滚动行为
  17. python之读取和写入csv文件
  18. 「ZJOI2015」地震后的幻想乡 解题报告
  19. iOS 解决汉字联想输入,导致字数限制失效的问题
  20. C#阿里云 移动推送 接入

热门文章

  1. .Net创建windows服务入门
  2. [Python] Python学习笔记之常用模块总结[持续更新...]
  3. BZOJ1565——[NOI2009]植物大战僵尸
  4. 欢迎加入threejs
  5. PHP 图片处理工具类(添加水印与生成缩略图)
  6. DES &amp; 3DES 加密算法
  7. PHP程序员进阶学习书籍参考指南
  8. destoon去掉会员注册email验证
  9. Unity3D LuaBundleLoader(基于cslua)
  10. linux 汇编