栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

Android C++调JAVA 非静态函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android C++调JAVA 非静态函数

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }
    public void showFrame(){
        Log.d("chenjx","chenjx");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    
    public native String stringFromJNI();


}

#include 
#include 
jclass myclass;
jmethodID methodId;
jobject g_MainActivity = nullptr;

pthread_t thread;
JavaVM *global_jvm;
#define  LOGV(fmt, ...) DLOG(YVERBOSE, "%s %s (line: %d) "  fmt"33[0m ", __FILE__,__FUNCTION__,__LINE__, ##__VA_ARGS__)
#define  LOGD(fmt, ...) DLOG(YDEBUG,   "%s %s (line: %d) "  fmt"33[0m ", __FILE__,__FUNCTION__,__LINE__, ##__VA_ARGS__)
#define  LOGI(fmt, ...) DLOG(YINFO,    "%s %s (line: %d) "  fmt"33[0m ", __FILE__,__FUNCTION__,__LINE__, ##__VA_ARGS__)
#define  LOGW(fmt, ...) DLOG(YWARN,    "%s %s (line: %d) "  fmt"33[0m ", __FILE__,__FUNCTION__,__LINE__, ##__VA_ARGS__)
#define  LOGE(fmt, ...) DLOG(YERROR,   "%s %s (line: %d) "  fmt"33[0m ", __FILE__,__FUNCTION__,__LINE__, ##__VA_ARGS__)

JNIEnv *get_env(int *attach) {
    if (global_jvm == NULL) return NULL;

    *attach = 0;
    JNIEnv *jni_env = NULL;
    int status = global_jvm->GetEnv((void **)&jni_env, JNI_VERSION_1_6);
    if (status == JNI_EDETACHED || jni_env == NULL) {
        status = global_jvm->AttachCurrentThread(&jni_env, NULL);
        if (status < 0) {
            jni_env = NULL;
        } else {
            *attach = 1;
        }
    }
    return jni_env;
}

void del_env() {
    global_jvm->DetachCurrentThread();
}
void * run(void * ch){
    int attach = 0;
    JNIEnv *env = get_env(&attach);
    //jclass cls = env->FindClass("com/example/myapplication/MainActivity");

    env->CallVoidMethod(g_MainActivity, methodId);
    return 0;

}

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved){
    JNIEnv* env = NULL;
    jint result = JNI_ERR;
    global_jvm = vm;

    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
        return result;
    }

    myclass = env->FindClass("com/example/myapplication/MainActivity");
    methodId =env->GetMethodID(myclass, "showFrame", "()V");
    return JNI_VERSION_1_4;

}

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject caller) {
    pthread_t pthread;

    std::string hello = "Hello from C++";
    jstring str=  env->NewStringUTF(hello.c_str());

    g_MainActivity = env->NewGlobalRef(caller);

    pthread_create(&pthread,NULL,run,NULL);
    pthread_detach(thread);
   return str;
    //return env->NewStringUTF(hello.c_str());
}


转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038680.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号