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()方法。
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()方法。