jni使用基础(四)之javah生成头文件

 

javah使用:帮助我们生成头文件的工具

 

怎样使用javah?

1.先在命令行下运行:javah。如果能执行java而不能执行javah,就需要配置环境变量。

2.cd进入到java的目录文件下,先用javac把.java文件生成.class文件。

3.在.class文件目录下执行javah,生成头文件(注意:.class文件要在相对应的包目录结构下)

如:用eclipse的工程,在bin/classes目录下com/devchina/ndk/DevActivity,需要在classes的目录下使用:

       javah com.devchina.ndk.DevActivity生成.h文件

 

怎样使用javah生成的头文件?

通过javah生成的头文件为:包名+类名.h 的文件。

把.h拷贝到jni目录下,并根据.h中生成的内容,编写相应的.c文件。(注意:要在c文件开头include"*.h"文件)

然后再写Android.mk文件。通过Ndk进行编译,生成.so文件。

最后在相应的java类中,load相应的so文件。

 

例:

#include<stdio.h>
#include<jni.h>
#include"com_hd_ndk2_DemoActivity.h"

JNIEXPORT jstring JNICALL Java_com_hd_ndk2_DemoActivity_hello
  (JNIEnv * env, jobject clazz){

	return (*env)->NewStringUTF(env,"hello");
}

 

时间: 2024-09-19 09:15:41

jni使用基础(四)之javah生成头文件的相关文章

android ndk adt自动生成头文件问题。

问题描述 android ndk adt自动生成头文件问题. android ndk adt自动生成头文件时候,在项目src目录下打开cmd.运行javah加adt复制的方法包名,为什么提示找不到com.zhhd.simplejni.MainActivity的类文件.在bin/classes也不行.怎么办,卡在这么个地方太闹心了 解决方案 javah -classpath . -jni 这里点表示当前路径.

Makefile自动生成头文件依赖

前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖. CC = gcc CFLAGS = -Wall -O INCLUDEFLAGS = LDFLAGS = OBJS = seq.o TARGETS = test_seq .PHONY:all all : $(TARGETS) test_seq:test_seq.o $(OBJS) $(CC) -o

c++ primer第四版的Sale_item头文件的疑问

问题描述 c++ primer第四版的Sale_item头文件的疑问 谁有c++primer第四版的Sales_item头文件?为什么我在官网上下载的头文件中没有same_isbn函数呀 解决方案 百度一下 Sales_item.h 就有 解决方案二: 你最好看看你看的这章节的前面,有可能这个类是自己写的,然后调用他的头文件 解决方案三: http://www.cnblogs.com/suda/archive/2012/03/31/2427114.html 解决方案四: 第七章 函数 习题7.3

解决javah生成c头文件时找不到android类库的问题

问题描述: cmd下面进入工程的bin/classes下面,执行 javah xxx.xxx.A 生成头文件, 一般来说都是可以成功执行的,但是如果xxx.xxx.A类里面引用了android类库里面的类的话,就会报异常,如下图: 上面因为引用了android.graphics.Bitmap,所以导致生成头文件失败.     解决办法: 执行javah命令的时候,可以指定classpath,将需要的jar包引入进去就可以了.如下 javah -classpath D:\ide\android-s

android studio ndk-build 编译C生成.so文件(ndk基础篇

本文转自:你我学习网: https://www.niwoxuexi.com/blog/android/article/246.html 一.概要 最近项目需要,要把代码中加密的部分打包成so文件,刚开始接触的时候真是痛苦呀,网上好多资料,都不是很详细,步骤也不清晰,所以我整理了一下,希望大家喜欢. 现在android studio打包so文件有两种方式,第一种是ndk-build编译项目,还有一种用CMake脚本构建项目,今天主要介绍ndk-build的编译过程 二.ndk-build 构建过程

jni使用基础(八)之jni使用流程及C调用java简单说明

  jni使用步骤: 1.定义好native接口. 2.使用javah工具,生成头文件. 3.根据头文件,创建c文件. 4.编写Android.mk文件. 5.通过cygwin,进入到该工程目录,通过ndk-buld命令,编译c文件,生成so库文件 6.即可完成调用     怎样在c中调用java? 也就是要在c代码中,new出java对象,然后再调用java对象中的方法即可. 要创建java对象,就要找到java类,相当于找到类的class文件,使用jni中的 FindClass去找到相应的类

JNI编程基础(一)

JNI-Java Native Interface,是Java平台提供的一个特性,通过编写JNI函数实现Java代码调用C/C++代码以及C/C++代码调用Java代码的作用.从而达到利用不同语言的特点.为什么需要在Java中调用C/C++代码,在我看来最主要有以下三点: C/C++代码相比Java有着更高的性能 C/C++代码更难被反编译,有更好的安全性 通过JNI函数可以绕开JVM的限制,完成一些在Java层面实现不了的功能.典型的例子就是Android热修复框架AndFix 既然要实现C/

jni使用基础(七)之java调用c事例Demo

    1.界面: package com.devchina.ndk3; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class DemoActivity extends Activity { static{ System.loadLibrary("devchina"); } @Override p

Jni使用基础(一)之简单介绍说明

  JNI(Java Native Interface,JAVA原生接口)  Jni 是一个协议,用来沟通java代码和外部的本地代码(c/c++)相互调用.   为什么要进行交互?  首先,Java语言提供的类库无法满足要求,且在数学运算,实时渲染的游戏上,音视频处理等方面上与C/C++相比效率稍低.   然后,Java语言无法直接操作硬件,C/C++代码不仅能操作硬件而且还能发挥硬件最佳性能.  接着,使用Java调用本地的C/C++代码所写的库,省去了重复开发的麻烦,并且可以利用很多开源的