From df74ea2ce7d4a5f30a89927f3fa37baea1d949bc Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Fri, 1 Jan 2021 11:26:35 +0700 Subject: [PATCH] Attempt: invoke UIApplicationMain from java --- .github/workflows/ios.yml | 2 +- JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java | 8 +++----- JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java | 1 + Natives/AppDelegate.m | 1 + Natives/CMakeLists.txt | 4 ++-- Natives/JavaLauncher.c | 5 ----- Natives/JavaLauncher.h | 3 --- Natives/UILauncher.m | 4 ++-- Natives/input_bridge_v3.c | 6 ++++++ Natives/main.c | 4 ---- 10 files changed, 16 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index a1baa36c..a4c34673 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -52,7 +52,7 @@ jobs: - name: Sign and Package IPA run: | - mkdir -p packages/pojavlauncher_iphoneos-arm/{DEBIAN,Applications,var/lib/pojavlauncher} + mkdir -p packages/pojavlauncher_iphoneos-arm/{DEBIAN,Applications,var/mobile/Documents/minecraft} cp -R Natives/build/Release-iphoneos/PojavLauncher.app packages/pojavlauncher_iphoneos-arm/Applications cp control packages/pojavlauncher_iphoneos-arm/DEBIAN ldid -Sentitlements.xml packages/pojavlauncher_iphoneos-arm/Applications/PojavLauncher.app diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java index 9f3740c9..1f2e8471 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java @@ -1,8 +1,7 @@ package net.kdt.pojavlaunch; import java.io.*; - -import javafx.application.Application; +import java.util.Arrays; import org.lwjgl.glfw.CallbackBridge; /* @@ -77,8 +76,9 @@ public class PLaunchApp /* extends UIApplicationDelegateAdapter */ { } */ + System.out.println("Input args: " + Arrays.toString(args)); System.out.println("We are on java now! Starting UI..."); - launchUI(); + org.lwjgl.glfw.CallbackBridge.nativeLaunchUI(args); LauncherPreferences.loadPreferences(); @@ -122,6 +122,4 @@ public class PLaunchApp /* extends UIApplicationDelegateAdapter */ { Tools.showError(th); } } - - public static native void launchUI(); } diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java index f76e4bc6..3f5ae56d 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -161,6 +161,7 @@ public class CallbackBridge { private static native void nativeSendScreenSize(int width, int height); public static native boolean nativeIsGrabbing(); + public static native void nativeLaunchUI(String[] uiArgs); static { System.loadLibrary("pojavexec"); diff --git a/Natives/AppDelegate.m b/Natives/AppDelegate.m index aa2ccb40..73fa6947 100644 --- a/Natives/AppDelegate.m +++ b/Natives/AppDelegate.m @@ -14,6 +14,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + NSLog(@"Hello from app launch!"); // TODO callback return YES; diff --git a/Natives/CMakeLists.txt b/Natives/CMakeLists.txt index 223f735f..06dac9de 100644 --- a/Natives/CMakeLists.txt +++ b/Natives/CMakeLists.txt @@ -4,7 +4,7 @@ project(PojavLauncher) # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_C_FLAGS "-x objective-c") -add_executable(PojavLauncher main.c AppDelegate.m UILauncher.m JavaLauncher.c) +add_executable(PojavLauncher main.c JavaLauncher.c) target_link_libraries(PojavLauncher "-framework UIKit" ) @@ -14,7 +14,7 @@ set_target_properties(PojavLauncher PROPERTIES MACOSX_FRAMEWORK_IDENTIFIER org.cmake.ExecutableTarget MACOSX_BUNDLE_INFO_PLIST "../Info.plist") -add_library(pojavexec SHARED egl_bridge_ios.m egl_bridge.c input_bridge_v3.c utils.c) +add_library(pojavexec SHARED AppDelegate.m UILauncher.m egl_bridge_ios.m egl_bridge.c input_bridge_v3.c utils.c) target_link_libraries(pojavexec "-framework OpenGLES" ) diff --git a/Natives/JavaLauncher.c b/Natives/JavaLauncher.c index cb65c09a..84c028b1 100644 --- a/Natives/JavaLauncher.c +++ b/Natives/JavaLauncher.c @@ -49,7 +49,6 @@ void append(char* s, char* c) { int launchJVM(int argc, char *argv[]) { printf("Beginning JVM launch\n"); - mkdir("/var/mobile/Documents/minecraft", 0700); char *args_path = "/var/mobile/Documents/minecraft/overrideargs.txt"; char *log_path = "/var/mobile/Documents/minecraft/latestlog.txt"; char *main_jar = "/Applications/PojavLauncher.app/launcher.jar"; @@ -125,7 +124,3 @@ int launchJVM(int argc, char *argv[]) { (const_jargs != NULL) ? JNI_TRUE : JNI_FALSE, const_cpwildcard, const_javaw, const_ergo_class); } - -JNIEXPORT jint JNICALL Java_net_kdt_pojavlaunch_PLaunchApp_launchUI(JNIEnv* env, jclass clazz) { - return launchUI(); -} diff --git a/Natives/JavaLauncher.h b/Natives/JavaLauncher.h index 7c3e530c..145ffdae 100644 --- a/Natives/JavaLauncher.h +++ b/Natives/JavaLauncher.h @@ -2,8 +2,5 @@ static bool started = false; -static int first_argc; -static char *first_argv[]; - int launchJVM(int argc, char *argv[]); int launchUI(); diff --git a/Natives/UILauncher.m b/Natives/UILauncher.m index 72474997..3623008e 100644 --- a/Natives/UILauncher.m +++ b/Natives/UILauncher.m @@ -7,8 +7,8 @@ #include "JavaLauncher.h" -int launchUI() { +int launchUI(int argc, char *argv[]) { @autoreleasepool { - return UIApplicationMain(first_argc, first_argv, nil, NSStringFromClass([AppDelegate class])); + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } diff --git a/Natives/input_bridge_v3.c b/Natives/input_bridge_v3.c index 4a5da715..ed42d08a 100644 --- a/Natives/input_bridge_v3.c +++ b/Natives/input_bridge_v3.c @@ -170,6 +170,12 @@ void closeGLFWWindow() { exit(-1); } +JNIEXPORT jint JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeLaunchUI(JNIEnv* env, jclass clazz, jstringArr args) { + int argc = (*env)->GetArrayLength(env, jstringArray); + char **argv = convert_to_char_array(env, args); + return launchUI(argc, argv); +} + JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeAttachThreadToOther(JNIEnv* env, jclass clazz, jboolean isAndroid, jboolean isUseStackQueueBool) { #ifdef DEBUG LOGD("Debug: JNI attaching thread, isUseStackQueue=%d\n", isUseStackQueue); diff --git a/Natives/main.c b/Natives/main.c index 11e26dfe..53176195 100644 --- a/Natives/main.c +++ b/Natives/main.c @@ -1,9 +1,5 @@ #include "JavaLauncher.h" int main(int argc, char * argv[]) { - if (!started) { - first_argc = argc; - first_argv = argv; - } launchJVM(argc, argv); }