android j使用JNI实现ava语言调用C语言

本文详细介绍了如何在Android环境下使用JNI技术,从在Java类中声明native方法,到利用javah生成头文件,接着编写并实现C代码,再到创建Android.mk文件和使用NDK进行编译,最后在Java代码中调用native方法的全过程。
摘要由CSDN通过智能技术生成

1.在java类中定义native方法相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的

public native String helloWorldFromC();


2.使用javah命令,在class目录下生成头文件

#include <jni.h>
/* Header for class com_example_helloworldformc_MainActivity */

#ifndef _Included_com_example_helloworldformc_MainActivity
#define _Included_com_example_helloworldformc_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_helloworldformc_MainActivity
 * Method:    helloWorldFromC
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_helloworldformc_MainActivity_helloWorldFromC
  (JNIEnv *, jobject);


3.根据头文件,实现C代码

#include <stdio.h>
#include "com_example_helloworldformc_MainActivity.h";  // 引入ndk环境里面的头文件 需要用<> 引用代码中的头文件 ""

//public native String helloWorldFromC(){}
jstring Java_com_example_helloworldformc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj){
	// 2 步 实现C代码
		// 返回一个java String 类型的字符串
	//jstring     (*NewStringUTF)(JNIEnv*, const char*);
	//(*env) 相当于 JNINativeInterface* JNIEnv
	//*(*env)  相当于 JNINativeInterface
	///return (**env).NewStringUTF(env,"helloworldfromc");

	return  (*env)->NewStringUTF(env,"helloworldfromc");


	// andrond.mk   告诉编译器 如何把c代码打包成函数库
	// 3 生成 .mk文件
	// 4步 把c代码 打包成函数库
}


4.根据实现C代码需要的函数库,生成Android.mk文件

   LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)
	# 对应打包成函数库的名字
   LOCAL_MODULE    := hello
   # 对应c代码的文件
   LOCAL_SRC_FILES := Hello.c

   include $(BUILD_SHARED_LIBRARY)


5.使用NDK编译


6.在java代码中引入函数库,调用native方法

	static{
		System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so
	}

	public void click(View view){
		// 弹出一个土司 土司的内容 是c代码写出来 	
		// 第6步
		Toast.makeText(getApplicationContext(), hello_world_from_c(), 0).show();
		
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值