Android+JNI 的编写步骤 从HelloWorld开始

本文介绍如何在Android应用中使用C语言与Java进行交互,通过创建JNI包、编写C代码和调整Android.mk文件来实现C函数的调用,并在实际应用中展示如何在Java代码中调用C函数,以及在C代码中调用Java方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、新建一个android 工程
2、新建一个名为jni的包:在其包下创建一个C文件和android.mk文件
C文件的例子:


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


jstring Java_com_itheima_speektest_MainActivity_hellofromc(JNIEnv* env,jobject obj){
return (*(*env)).NewStringUTF(env,"hello android from c");
}




mk文件的格式:




LOCAL_PATH := $(call my-dir)


    include $(CLEAR_VARS)


    LOCAL_MODULE    := Hello(这是想要生成的文件的名字)
    LOCAL_SRC_FILES := Hello.c (这是自己创建的C文件的名称)


    include $(BUILD_SHARED_LIBRARY)




在要调用C函数的android程序中,static{
System.loadLibrary("Hello");//导入编译好的C文件
}
然后再声明一下要调用的函数public native String hellofromc();


在cygwin中要编译C文件cd /cygdrive/F进入F盘,然后一直到达android程序的文件夹下
,ndk-build.会自动在android程序下,libs生成armeabi文件。






打印jni执行过程中的log
#include <android/log.h>
#include<malloc.h>
#define LOG_TAG "System.out.c"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)






、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
C语言调用java里面的方法


就像反射调用方法一样。(如果获取的方法是静态的,就不能用此方法)
1、找到java代码的class文件
(*env)->FindClass(env,"完整的被调用方法所在的类(cn/itcase/demo/DataProvider)")
2、寻找class里面的方法
(*env)->GetMethodID(env,1步中的类,"方法名","()V");第三个
参数是方法的签名。在cmd命令窗口下javap -s 文件名
3、调用这个方法
(*env)->CallVoidMethod(env,obj,method);




///////////////////////////////
当调用的方法是一个静态的方法时,使用
(*env)->GetStaticMethodID();方法
(*env)->CallStaticVoidMethod()方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值