mirror of https://github.com/alibaba/MNN.git
65 lines
1.7 KiB
C++
65 lines
1.7 KiB
C++
|
//
|
||
|
// JNIHelper.cpp
|
||
|
// MNN
|
||
|
//
|
||
|
// Created by MNN on 2021/11/01
|
||
|
// Copyright © 2018, Alibaba Group Holding Limited
|
||
|
//
|
||
|
|
||
|
#if defined(ANDROID) || defined(__ANDROID__)
|
||
|
|
||
|
#include "utils/JNIHelper.hpp"
|
||
|
|
||
|
static JavaVM* gjvm = NULL;
|
||
|
|
||
|
// Attaches JVM if needed. Needs to remember to detach JVM if this thread is not
|
||
|
// initially attached.
|
||
|
// See https://stackoverflow.com/questions/27923917/cant-execute-javavm-detachcurrentthread-attempting-to-detach-while-still-r/51501448
|
||
|
JNIEnv* AttachCurrentThread(bool* needsDetach) {
|
||
|
if (gjvm == nullptr) {
|
||
|
return nullptr;
|
||
|
}
|
||
|
*needsDetach = false;
|
||
|
JNIEnv* env = nullptr;
|
||
|
jint ret = gjvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
|
||
|
if (ret == JNI_EDETACHED || !env) {
|
||
|
JavaVMAttachArgs args;
|
||
|
args.version = JNI_VERSION_1_6;
|
||
|
args.group = nullptr;
|
||
|
args.name = nullptr;
|
||
|
ret = gjvm->AttachCurrentThread(&env, &args);
|
||
|
if (ret != JNI_OK) {
|
||
|
MNN_ERROR("Get JVM env failed!\n");
|
||
|
return nullptr;
|
||
|
}
|
||
|
*needsDetach = true;
|
||
|
}
|
||
|
return env;
|
||
|
}
|
||
|
|
||
|
jint DetachCurrentThread() {
|
||
|
return gjvm->DetachCurrentThread();
|
||
|
}
|
||
|
|
||
|
std::string getPackageName() {
|
||
|
FILE *cmdline = fopen("/proc/self/cmdline", "r");
|
||
|
|
||
|
if (!cmdline) {
|
||
|
MNN_ERROR("Cannot find %s\n", "/proc/self/cmdline");
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
char packageName[128] = { 0 };
|
||
|
fread(packageName, sizeof(packageName), 1, cmdline);
|
||
|
fclose(cmdline);
|
||
|
return std::string(packageName);
|
||
|
}
|
||
|
|
||
|
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||
|
MNN_PRINT("JNI_OnLoad for MNN main package.");
|
||
|
gjvm = vm;
|
||
|
return JNI_VERSION_1_6;
|
||
|
}
|
||
|
|
||
|
#endif // defined(ANDROID) || defined(__ANDROID__)
|