通过JNI使用ndk来编写HelloWorld程序

原创 2013年12月02日 11:10:57

在本篇文章之前,必须确保你的cdt、cygwin、ndk的环境已经搭建好,及确保你的JNI环境已经搭建好。。


1、MainActivity

package com.njupt.ndkhelloworld1;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

	static{//在雷第一次被创建的时候执行
		System.loadLibrary("zhangzetian");//将生成的so文件加载到JVM中
	}
	
	public native String helloFromC();//这里只需声明,实现是在Hello.c文件中...
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	public void click(View view){
		Toast.makeText(this, helloFromC(), 1).show();
	}
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


2、新建jni/Hello.c

#include <stdio.h>
#include <jni.h>//这个必须要有...在这里面我们可以查看java的数据类型的对应关系

/**
 *jstring: 返回值类型
 *Java_com_njupt_ndkhelloworld1_MainActivity_helloFromC: 命名规则为:Java_包名_类名_方法名(JNIEnv* env,jobject obj)
 */
jstring Java_com_njupt_ndkhelloworld1_MainActivity_helloFromC(JNIEnv* env,jobject obj){
	return (*(*env)).NewStringUTF(env,"hello from zhangzetian...");
}


3、在jni目录下新建Android.mk文件

 LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)

   LOCAL_MODULE    := zhangzetian   
   LOCAL_SRC_FILES := Hello.c

   include $(BUILD_SHARED_LIBRARY)


4、在cygwin下进入到工程目录中

输入命令ndk-build,这是并对refresh工程


这时候运行项目便能成功调用到c中的方法



版权声明:本文为博主原创文章,未经博主允许不得转载。

JNI/NDK开发指南(一)—— JNI开发流程及HelloWorld

转载请注明出处:http://blog.csdn.net/xyang81/article/details/41777471        JNI全称是Java Native Interface(Jav...
  • xyang81
  • xyang81
  • 2014年12月07日 14:54
  • 16096

JNI开发----一点一点搞清楚NDK开发的步骤

NDK开发流程不同版本的Android Studio可能对于NDK的配置是不一样的,本文记录我在AS2.2.2版本上的配置过程。步骤1:安装配置NDK(1)打开AS的Project Structure...
  • ccg_201216323
  • ccg_201216323
  • 2017年01月15日 18:13
  • 1177

Android jni/ndk编程一:jni初级认识与实战体验

Android平台很多地方都可以看到jni的身影,比如之前接触到一个投屏的项目,主要的代码是c/c++写的,然后通过Jni供java层调用;另外,就拿Android系统中的Service来说,很多的S...
  • u011913612
  • u011913612
  • 2016年09月19日 18:53
  • 1877

android JNI运行NDK编译成的可执行文件

1.android环境的可执行文件的生成 所谓的android下的可执行文件,其实就是一般的c/c++代码使用NDK编译出来的应用程序。它和linux下用gcc编译出来的程序和windows系统下...
  • csdn49532
  • csdn49532
  • 2016年02月19日 16:31
  • 1998

使用IDEA开发jni

使用IDEA或者Android Studio可以进行ndk开发。 由于Android Studio是基于IDEA的,所以方法都是通用的。(eclipes请参考网上其他网友的博文) 1、搭建JNI...
  • Mislead
  • Mislead
  • 2015年06月03日 10:29
  • 4099

NDK 崩溃查找方法

NDK的异常会不会导致程序Crash,NDK的常见的有哪些类型异常? NDK编译生成的.so文件作为程序的一部分,在运行发生异常时同样会造成程序崩溃。不同于Java代码异常造成的程序崩溃,在NDK...
  • u012554967
  • u012554967
  • 2015年02月03日 10:12
  • 1661

Android NDK——配置NDK及使用Android studio开发Hello JNI并简单打包so库

Android系统框架来看,我们上层是通过JNI方式来调用NDK层的,使用这个工具可以很方便的编写和调试JNI的代码。因为C语言不跨平台,在Windows系统下使用NDK编译在Linux下能执行的函数...
  • CrazyMo_
  • CrazyMo_
  • 2016年11月04日 19:05
  • 5642

android NDK JNI so文件的制作和使用

为何要用到NDK? 概括来说主要分为以下几种情况:  1. 代码的保护,由于apk的Java层代码很容易被反编译,而C/C++库反编译难度较大; 2. 在NDK中调用第三方C/C++库,因为大部...
  • hard_working1
  • hard_working1
  • 2016年10月01日 00:20
  • 534

NDK 与 JNI 的关系

简介  JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码。JNI 是本地编程接口,Java和...
  • banketree
  • banketree
  • 2013年10月09日 11:50
  • 36167

NDK基础(java ,c/c++, jni之间的关系及java和c/c++之间的相互调用)

1.java,c/c++,和jni之间的关系 java和c/c++可以相互调用,是因为java虚拟机中的JNI。简单的说就是用c/c++编写一个动态链接库让Java虚拟机去调用。(在windows...
  • lishihaojie
  • lishihaojie
  • 2015年05月28日 09:27
  • 929
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过JNI使用ndk来编写HelloWorld程序
举报原因:
原因补充:

(最多只允许输入30个字)