Try start java inside main()
Invoke map: C main() calls JLI_Launch -> Java main() calls UIApplicationMain -> AppDelegate: didFinishLaunchingWithOptions callback to Java -> Init OpenGL ES and start Minecraft client. (TODO)
This commit is contained in:
1 parent
e48ed97716
commit
d2ec05c549
8 files changed
+75
-36
No files matched your search
@@ -77,6 +77,9 @@ public class PLaunchApp /* extends UIApplicationDelegateAdapter */ {
|
||||
}
|
||||
*/
|
||||
|
||||
System.out.println("We are on java now! Starting UI...");
|
||||
launchUI();
|
||||
|
||||
LauncherPreferences.loadPreferences();
|
||||
|
||||
System.setProperty("java.library.path", Tools.DIR_DATA + "/Frameworks");
|
||||
@@ -119,4 +122,6 @@ public class PLaunchApp /* extends UIApplicationDelegateAdapter */ {
|
||||
Tools.showError(th);
|
||||
}
|
||||
}
|
||||
|
||||
public static native void launchUI();
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||
|
||||
launchJVM();
|
||||
// TODO callback
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
@@ -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.m AppDelegate.m JavaLauncher.c)
|
||||
add_executable(PojavLauncher main.c AppDelegate.m UILauncher.m JavaLauncher.c)
|
||||
target_link_libraries(PojavLauncher
|
||||
"-framework UIKit"
|
||||
)
|
||||
|
||||
+38
-21
@@ -4,6 +4,7 @@
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <bool.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
@@ -45,7 +46,7 @@ void append(char* s, char* c) {
|
||||
s[len+1] = '\0';
|
||||
}
|
||||
|
||||
int launchJVM() {
|
||||
int launchJVM(int argc, char *argv[]) {
|
||||
printf("Beginning JVM launch\n");
|
||||
|
||||
mkdir("/var/mobile/Documents/minecraft", 0700);
|
||||
@@ -61,28 +62,33 @@ int launchJVM() {
|
||||
dup2(log_fd, 2);
|
||||
close(log_fd);
|
||||
|
||||
int margv = 0;
|
||||
char* margc[1000];
|
||||
margc[margv++] = "/usr/lib/jvm/java-16-openjdk/bin/java";
|
||||
|
||||
printf("Reading custom JVM args (overrideargs.txt)");
|
||||
char jvmargs[10000];
|
||||
FILE* argsFile = fopen(args_path, "r");
|
||||
if (argsFile) {
|
||||
fscanf(argsFile, "%s", jvmargs);
|
||||
char *pch;
|
||||
pch = strtok(jvmargs, " ");
|
||||
while (pch != NULL) {
|
||||
margc[margv++] = pch;
|
||||
pch = strtok(NULL, " ");
|
||||
int margc = 0;
|
||||
char* margv[1000];
|
||||
// Check if JVM restarts
|
||||
if (!started) {
|
||||
margv[margc++] = "/usr/lib/jvm/java-16-openjdk/bin/java";
|
||||
printf("Reading custom JVM args (overrideargs.txt)");
|
||||
char jvmargs[10000];
|
||||
FILE* argsFile = fopen(args_path, "r");
|
||||
if (argsFile) {
|
||||
fscanf(argsFile, "%s", jvmargs);
|
||||
char *pch;
|
||||
pch = strtok(jvmargs, " ");
|
||||
while (pch != NULL) {
|
||||
margv[margc++] = pch;
|
||||
pch = strtok(NULL, " ");
|
||||
}
|
||||
fclose(argsFile);
|
||||
}
|
||||
margv[margc++] = "-cp";
|
||||
margv[margc++] = main_jar;
|
||||
margv[margc++] = "net.kdt.pojavlaunch.PLaunchApp";
|
||||
|
||||
for (int i = 0; i < argc; i++) {
|
||||
margv[margc++] = argv[i];
|
||||
}
|
||||
fclose(argsFile);
|
||||
}
|
||||
|
||||
margc[margv++] = "-cp";
|
||||
margc[margv++] = main_jar;
|
||||
margc[margv++] = "net.kdt.pojavlaunch.PLaunchApp";
|
||||
|
||||
// Load java
|
||||
void* libjli = dlopen("/usr/lib/jvm/java-16-openjdk/lib/libjli.dylib", RTLD_LAZY | RTLD_GLOBAL);
|
||||
|
||||
@@ -101,8 +107,15 @@ int launchJVM() {
|
||||
}
|
||||
|
||||
printf("Calling JLI_Launch\n");
|
||||
|
||||
int targc = started ? argc : margc;
|
||||
char *targv[] targv = started ? argv : margv;
|
||||
|
||||
if (!started) {
|
||||
started = true;
|
||||
}
|
||||
|
||||
return pJLI_Launch(margc, margv,
|
||||
return pJLI_Launch(targc, targv,
|
||||
0, NULL, // sizeof(const_jargs) / sizeof(char *), const_jargs,
|
||||
0, NULL, // sizeof(const_appclasspath) / sizeof(char *), const_appclasspath,
|
||||
FULL_VERSION,
|
||||
@@ -112,3 +125,7 @@ int launchJVM() {
|
||||
(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();
|
||||
}
|
||||
@@ -1,3 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
int launchJVM();
|
||||
static bool started = false;
|
||||
|
||||
static int first_argc;
|
||||
static char *first_argv[];
|
||||
|
||||
int launchJVM(int argc, char *argv[]);
|
||||
int launchUI();
|
||||
@@ -0,0 +1,14 @@
|
||||
//
|
||||
// main.m
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "AppDelegate.h"
|
||||
|
||||
#include "JavaLauncher.h"
|
||||
|
||||
int launchUI() {
|
||||
@autoreleasepool {
|
||||
return UIApplicationMain(first_argc, first_argv, nil, NSStringFromClass([AppDelegate class]));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
#include "JavaLauncher.h"
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
if (!started) {
|
||||
first_argc = argc;
|
||||
first_argv = argv;
|
||||
}
|
||||
launchJVM(argc, argv);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
//
|
||||
// main.m
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "AppDelegate.h"
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
@autoreleasepool {
|
||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user