输出Log
- mk 配置添加
LOCAL_LDLIBS += -llog
gradle中配置ldLibs "log"
- C++ 文件中
1 2 3 4 5 6 7 |
#include <android/log.h> // 直接__android_log_print函数或下面这样 #define LOG_TAG "JNICALL" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) //使用 LOGE("Log输出"); |
C++中回调java中的方法
jclass javaClass;
jobject javaObject;
jmethodID jMethodid;
JNIEnv *env ;
获得类
1 2 3 |
jclass javaClass = env->GetObjectClass(javaObject); jclass javaClass = env->FindClass("com/mxguo/model/ModelLink"); . |
获得方法
1 2 3 4 5 |
// 静态方法 jmethodID jMethodid = env->GetStaticMethodID(javaClass, "btCallBack2","()V");//void static btCallBack2() // 非静态方法 jmethodID jMethodid = env->GetMethodID(javaClass, "btCallBack2","()V");//void btCallBack2() . |
调用Java的方法
非静态方法使用javaObject
1 2 3 4 5 6 7 |
// 已调用返回值为Void的方法为例 // 调用静态方法 env->CallStaticVoidMethod (javaClass, jMethodid);//无参数 env->CallStaticVoidMethod(javaClass, jMethodid, 2);//有参数 // 调用非静态方法,第一个参数为javaObject env->CallVoidMethod(javaObject, jMethodid);// 无参数 env->CallVoidMethod(javaObject, jMethodid, 2); //有参数 |
CallXXXMethod, XXX 表示 调用方法的返回值 ,如:Void,Object,等等。(调用静态方法的时候Call后面要加Static)
C++里新建对象
- 新建String对象: jstring mstring = env->NewStringUTF("string values");
异常
1 2 3 4 5 6 |
java.lang.NoSuchMethodError: no static or non-static method LOCAL_PROGUARD_ENABLED:= disabled java.lang.ExceptionInInitializerError: java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate symbol "tcgetattr" referenced by 找到该方法所在的类, 直接拷贝到jni文件夹下 |
0 Comments