Skip to content

Commit 18422ce

Browse files
committed
feat(JNI):Make the log to Optional
1 parent 0ded01f commit 18422ce

3 files changed

Lines changed: 67 additions & 5 deletions

File tree

binding/src/main/java/dev/eatgrapes/live2d/CubismFramework.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,42 @@ public class CubismFramework {
55
LibraryLoader.load();
66
}
77

8-
public static native void startUp();
8+
public enum LogLevel {
9+
VERBOSE(0),
10+
DEBUG(1),
11+
INFO(2),
12+
WARNING(3),
13+
ERROR(4),
14+
OFF(5);
15+
16+
final int value;
17+
LogLevel(int value) { this.value = value; }
18+
}
19+
20+
public interface LogCallback {
21+
void log(String message);
22+
}
23+
24+
private static LogCallback logCallback;
25+
26+
public static void startUp() {
27+
startUp(null, LogLevel.OFF);
28+
}
29+
30+
public static void startUp(LogCallback callback, LogLevel level) {
31+
logCallback = callback;
32+
startUpNative(callback != null, level.value);
33+
}
34+
35+
private static native void startUpNative(boolean hasCallback, int logLevel);
936
public static native void initialize();
1037
public static native void dispose();
1138
public static native boolean isStarted();
1239
public static native boolean isInitialized();
40+
41+
private static void onLog(String message) {
42+
if (logCallback != null) {
43+
logCallback.log("[Live2D Native] " + message);
44+
}
45+
}
1346
}

example/src/main/java/dev/eatgrapes/live2d/example/Main.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,11 @@ private void init() {
143143
}
144144
});
145145

146-
CubismFramework.startUp();
146+
CubismFramework.startUp(msg -> {
147+
if (!msg.contains("Live2D Cubism SDK Core Version")) {
148+
System.out.println(msg);
149+
}
150+
}, CubismFramework.LogLevel.WARNING);
147151
CubismFramework.initialize();
148152
}
149153

native/src/CubismFramework_JNI.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,30 @@ class JniAllocator : public ICubismAllocator {
6565

6666
static JniAllocator allocator;
6767
static CubismFramework::Option option;
68+
static bool g_useJavaLogger = false;
69+
70+
static void LogFunction(const char* message) {
71+
if (!g_useJavaLogger) return;
72+
73+
JNIEnv* env;
74+
bool attached = false;
75+
if (g_jvm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) {
76+
g_jvm->AttachCurrentThread((void**)&env, nullptr);
77+
attached = true;
78+
}
79+
80+
jclass cls = env->FindClass("dev/eatgrapes/live2d/CubismFramework");
81+
if (cls) {
82+
jmethodID mid = env->GetStaticMethodID(cls, "onLog", "(Ljava/lang/String;)V");
83+
if (mid) {
84+
jstring str = env->NewStringUTF(message);
85+
env->CallStaticVoidMethod(cls, mid, str);
86+
env->DeleteLocalRef(str);
87+
}
88+
}
89+
90+
if (attached) g_jvm->DetachCurrentThread();
91+
}
6892

6993
extern "C" {
7094

@@ -76,9 +100,10 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
76100
return JNI_VERSION_1_6;
77101
}
78102

79-
JNIEXPORT void JNICALL Java_dev_eatgrapes_live2d_CubismFramework_startUp(JNIEnv* env, jclass clazz) {
80-
option.LogFunction = [](const char* message) { };
81-
option.LoggingLevel = CubismFramework::Option::LogLevel_Off;
103+
JNIEXPORT void JNICALL Java_dev_eatgrapes_live2d_CubismFramework_startUpNative(JNIEnv* env, jclass clazz, jboolean hasCallback, jint logLevel) {
104+
g_useJavaLogger = hasCallback;
105+
option.LogFunction = LogFunction;
106+
option.LoggingLevel = static_cast<CubismFramework::Option::LogLevel>(logLevel);
82107
option.LoadFileFunction = LoadFile;
83108
option.ReleaseBytesFunction = ReleaseBytes;
84109
CubismFramework::StartUp(&allocator, &option);

0 commit comments

Comments
 (0)