diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml index 22eaa4b9..0e90e333 100644 --- a/.github/workflows/development.yml +++ b/.github/workflows/development.yml @@ -54,8 +54,8 @@ jobs: - name: Build the Debian package run: gmake -j$(sysctl -n hw.ncpu) package - - name: Generate dSYM for PojavCore - run: dsymutil --arch arm64 Natives/build/PojavCore.framework/PojavCore + - name: Generate dSYM for PojavLauncher + run: dsymutil --arch arm64 Natives/build/PojavLauncher.app/PojavLauncher - name: Upload build artifact uses: actions/upload-artifact@v2 @@ -63,11 +63,11 @@ jobs: name: pojavlauncher_iphoneos-arm.deb path: packages/pojavlauncher_iphoneos-arm.deb - - name: Upload PojavCore.dSYM + - name: Upload PojavLauncher.dSYM uses: actions/upload-artifact@v2 with: - name: PojavCore.dSYM - path: Natives/build/PojavCore.framework/PojavCore.dSYM + name: PojavLauncher.dSYM + path: Natives/build/PojavLauncher.app/PojavLauncher.dSYM - name: Copy Procursus to Cache Location run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e80e06f8..c197f6a1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,8 +54,8 @@ jobs: - name: Build the Debian package run: gmake -j$(sysctl -n hw.ncpu) package RELEASE=1 - - name: Generate dSYM for PojavCore - run: dsymutil --arch arm64 Natives/build/PojavCore.framework/PojavCore + - name: Generate dSYM for PojavLauncher + run: dsymutil --arch arm64 Natives/build/PojavLauncher.app/PojavLauncher - name: Upload build artifact uses: actions/upload-artifact@v2 @@ -63,11 +63,11 @@ jobs: name: pojavlauncher_iphoneos-arm.deb path: packages/pojavlauncher_iphoneos-arm.deb - - name: Upload PojavCore.dSYM + - name: Upload PojavLauncher.dSYM uses: actions/upload-artifact@v2 with: - name: PojavCore.dSYM - path: Natives/build/PojavCore.framework/PojavCore.dSYM + name: PojavLauncher.dSYM + path: Natives/build/PojavLauncher.app/PojavLauncher.dSYM - name: Copy Procursus to Cache Location run: | diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java index fdc67f84..13c4840a 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java @@ -30,21 +30,18 @@ public class PLaunchApp { new File(Tools.DIR_ACCOUNT_NEW).mkdirs(); if (!new File(mcDir.getAbsolutePath() + "/launcher_profiles.json").exists()) { Tools.write(mcDir.getAbsolutePath() + "/launcher_profiles.json", - Tools.read(Tools.DIR_DATA + "/launcher_profiles.json")); + Tools.read(Tools.DIR_BUNDLE + "/launcher_profiles.json")); } } catch (IOException e) { e.printStackTrace(); } System.out.println("We are on java now! Starting UI..."); - UIKit.launchUI(args); + UIKit.launchUI(); } // Called from SurfaceViewController public static void launchMinecraft() { - System.out.println("Saving GLES context"); - JREUtils.saveGLContext(); - System.out.println("Launching Minecraft " + mVersion.id); try { Tools.launchMinecraft(AccountJNI.CURRENT_ACCOUNT, mVersion); diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java index ee36df8a..8ffcb57b 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -47,16 +47,16 @@ public final class Tools { public static final boolean ENABLE_DEV_FEATURES = true; // BuildConfig.DEBUG; - public static String APP_NAME = "null"; + public static String APP_NAME = "PojavLauncher"; public static final Gson GLOBAL_GSON = new GsonBuilder().setPrettyPrinting().create(); public static final String URL_HOME = "https://pojavlauncherteam.github.io/PojavLauncher"; - public static String DIR_DATA = System.getenv("BUNDLE_PATH"); + public static String DIR_BUNDLE = System.getenv("BUNDLE_PATH"); // path to "PojavLauncher.app" public static String CURRENT_ARCHITECTURE; public static final String DIR_GAME_HOME = System.getenv("POJAV_HOME"); - public static final String DIR_GAME_NEW = System.getenv("POJAV_GAME_DIR"); + public static final String DIR_GAME_NEW = System.getenv("POJAV_GAME_DIR"); // path to "Library/Application Support/minecraft" public static final String DIR_APP_DATA = System.getenv("POJAV_HOME"); public static final String DIR_ACCOUNT_NEW = DIR_APP_DATA + "/accounts"; diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java index bb95175f..d0185552 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java @@ -151,12 +151,12 @@ public class UIKit { } static { - System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); + System.load(System.getenv("BUNDLE_PATH") + "/PojavLauncher"); } public static native void refreshAWTBuffer(int[] array); - public static native int launchUI(String[] uiArgs); + public static native int launchUI(); // public static native void runOnUIThread(UIKitCallback callback); public static native void showError(String title, String message, boolean exitIfOk); diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index 79069ab3..24768440 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -15,9 +15,8 @@ public class JREUtils { private JREUtils() {} - public static native void saveGLContext(); static { - System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); + System.load(System.getenv("BUNDLE_PATH") + "/PojavLauncher"); } } diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java index 31eac5a4..0bd14439 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java @@ -43,15 +43,16 @@ public class MinecraftAccount } return acc; } - +/* public static void clearTempAccount() { - File tempAccFile = new File(Tools.DIR_DATA, "cache/tempacc.json"); + File tempAccFile = new File(Tools.DIR_BUNDLE, "cache/tempacc.json"); tempAccFile.delete(); } - + public static void saveTempAccount(MinecraftAccount acc) throws IOException { File tempAccFile = new File(Tools.DIR_DATA, "cache/tempacc.json"); tempAccFile.delete(); acc.save(tempAccFile.getAbsolutePath()); } +*/ } diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java index dc5de3b9..fc85edb3 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -35,7 +35,7 @@ public class CallbackBridge { // TODO send grab state event to Android static { - System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); + System.load(System.getenv("BUNDLE_PATH") + "/PojavLauncher"); INPUT_DEBUG_ENABLED = Boolean.parseBoolean(System.getProperty("glfwstub.debugInput", "false")); } diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java index f7376715..56917714 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java @@ -501,7 +501,7 @@ public class GLFW public static long mainContext = 0; static { try { - System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); + System.load(System.getenv("BUNDLE_PATH") + "/PojavLauncher"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } diff --git a/Makefile b/Makefile index d276ccda..233888c2 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,7 @@ native: -DCONFIG_COMMIT="$(COMMIT)" \ -DCONFIG_RELEASE=$(RELEASE) \ .. - @cd Natives/build && cmake --build . --config $(CMAKE_BUILD_TYPE) --target awt_headless awt_xawt libOSMesaOverride.dylib PojavCore PojavLauncher + @cd Natives/build && cmake --build . --config $(CMAKE_BUILD_TYPE) --target awt_headless awt_xawt libOSMesaOverride.dylib PojavLauncher @rm Natives/build/libawt_headless.dylib @echo 'Finished build task - native application' @@ -137,7 +137,6 @@ package: native java extras cp Natives/build/libawt_xawt.dylib Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ ( cd Natives/build/PojavLauncher.app/Frameworks; ln -sf libawt_xawt.dylib libawt_headless.dylib ) || exit 1; \ cp -R Natives/build/libOSMesaOverride.dylib.framework Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ - cp -R Natives/build/PojavCore.framework Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ mkdir Natives/build/PojavLauncher.app/{libs,libs_caciocavallo}; \ cp JavaApp/local_out/launcher.jar Natives/build/PojavLauncher.app/libs/launcher.jar || exit 1; \ cp -R JavaApp/libs/* Natives/build/PojavLauncher.app/libs/ || exit 1; \ @@ -161,7 +160,6 @@ package: native java extras cp Natives/build/libawt_xawt.dylib Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ ( cd Natives/build/PojavLauncher.app/Frameworks; ln -sf libawt_xawt.dylib libawt_headless.dylib ) || exit 1; \ cp -R Natives/build/libOSMesaOverride.dylib.framework Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ - cp -R Natives/build/PojavCore.framework Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ cp -R Natives/resources/* Natives/build/PojavLauncher.app/ || exit 1; \ cp -R JavaApp/libs Natives/build/PojavLauncher.app/libs || exit 1; \ cp -R JavaApp/libs_caciocavallo Natives/build/PojavLauncher.app/libs_caciocavallo || exit 1; \ @@ -219,7 +217,6 @@ deploy: native java if [ '$(DEVICE_PORT)' != '' ]; then \ scp -r -P $(DEVICE_PORT) -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" \ Natives/build/libOSMesaOverride.dylib.framework \ - Natives/build/PojavCore.framework \ Natives/build/libawt_xawt.dylib \ Natives/build/PojavLauncher.app/PojavLauncher \ JavaApp/local_out/launcher.jar \ @@ -228,8 +225,6 @@ deploy: native java mv /var/tmp/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/libawt_xawt.dylib && \ rm -rf /Applications/PojavLauncher.app/Frameworks/libOSMesaOverride.dylib.framework && \ mv /var/tmp/libOSMesaOverride.dylib.framework /Applications/PojavLauncher.app/Frameworks/libOSMesaOverride.dylib.framework && \ - rm -rf /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && \ - mv /var/tmp/PojavCore.framework /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && \ mv /var/tmp/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher && \ mv /var/tmp/launcher.jar /Applications/PojavLauncher.app/libs/launcher.jar && \ cd /Applications/PojavLauncher.app/Frameworks && \ @@ -238,7 +233,6 @@ deploy: native java else \ scp -r -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" \ Natives/build/libOSMesaOverride.dylib.framework \ - Natives/build/PojavCore.framework \ Natives/build/libawt_xawt.dylib \ Natives/build/PojavLauncher.app/PojavLauncher \ JavaApp/local_out/launcher.jar \ @@ -247,8 +241,6 @@ deploy: native java mv /var/tmp/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/libawt_xawt.dylib && \ rm -rf /Applications/PojavLauncher.app/Frameworks/libOSMesaOverride.dylib.framework && \ mv /var/tmp/libOSMesaOverride.dylib.framework /Applications/PojavLauncher.app/Frameworks/libOSMesaOverride.dylib.framework && \ - rm -rf /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && \ - mv /var/tmp/PojavCore.framework /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && \ mv /var/tmp/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher && \ mv /var/tmp/launcher.jar /Applications/PojavLauncher.app/libs/launcher.jar && \ cd /Applications/PojavLauncher.app/Frameworks && ln -sf libawt_xawt.dylib libawt_headless.dylib && killall PojavLauncher && \ @@ -264,7 +256,6 @@ deploy: native java sudo cp Natives/build/PojavLauncher.app/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher; \ sudo cp Natives/build/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/; \ sudo cp -R Natives/build/libOSMesaOverride.dylib.framework /Applications/PojavLauncher.app/Frameworks/; \ - sudo cp -R Natives/build/PojavCore.framework /Applications/PojavLauncher.app/Frameworks/; \ cd /Applications/PojavLauncher.app/Frameworks; \ sudo ln -sf libawt_xawt.dylib libawt_headless.dylib; \ sudo chown -R 501:501 /Applications/PojavLauncher.app/*; \ diff --git a/Natives/CMakeLists.txt b/Natives/CMakeLists.txt index c7ab379d..50a61129 100644 --- a/Natives/CMakeLists.txt +++ b/Natives/CMakeLists.txt @@ -39,7 +39,12 @@ set_target_properties(libOSMesaOverride.dylib PROPERTIES ) target_link_libraries(libOSMesaOverride.dylib ${OSMESA_LIB}) -add_library(PojavCore SHARED +add_executable(PojavLauncher + main.m + log.m + JavaLauncher.m + external/fishhook/fishhook.c + AboutLauncherViewController.m AppDelegate.m CustomControlsViewController.m @@ -61,27 +66,13 @@ add_library(PojavCore SHARED log.m utils.m ) -set_target_properties(PojavCore PROPERTIES - FRAMEWORK TRUE -) -target_link_libraries(PojavCore +target_link_libraries(PojavLauncher + "-F'${CMAKE_CURRENT_LIST_DIR}/build'" "-framework AuthenticationServices" "-framework CoreGraphics" "-framework QuartzCore" "-framework UIKit" ) - -add_executable(PojavLauncher - main.m - log.m - JavaLauncher.m - external/fishhook/fishhook.c -) -target_link_libraries(PojavLauncher - "-F'${CMAKE_CURRENT_LIST_DIR}/build'" - "-framework PojavCore" - "-framework UIKit" -) set_target_properties(PojavLauncher PROPERTIES MACOSX_BUNDLE TRUE MACOSX_FRAMEWORK_IDENTIFIER org.cmake.ExecutableTarget diff --git a/Natives/JavaLauncher.m b/Natives/JavaLauncher.m index 117b83fe..551c6850 100644 --- a/Natives/JavaLauncher.m +++ b/Natives/JavaLauncher.m @@ -291,6 +291,7 @@ void environmentFailsafes(char *argv[]) { int launchJVM(int argc, char *argv[]) { if (!started) { + setenv("EXEC_PATH", argv[0], 1); setenv("BUNDLE_PATH", dirname(argv[0]), 1); // Are we running on a jailbroken environment? @@ -630,10 +631,6 @@ int launchJVM(int argc, char *argv[]) { margv[margc++] = "-cp"; margv[margc++] = classpath; margv[margc++] = "net.kdt.pojavlaunch.PLaunchApp"; - - for (int i = 0; i < argc; i++) { - margv[margc++] = argv[i]; - } } JLI_Launch_func *pJLI_Launch = diff --git a/Natives/LoginViewController.m b/Natives/LoginViewController.m index 90881ec4..d43cd58f 100644 --- a/Natives/LoginViewController.m +++ b/Natives/LoginViewController.m @@ -360,10 +360,9 @@ void loginAccountInput(UINavigationController *controller, int type, const char* NSString *dataStr = [NSString stringWithUTF8String:[data bytes]]; - // NSLog(@"status=%ld, data=%@, response=%@, error=%@", statusCode, dataStr, httpResponse, error); NSError *jsonError = nil; - NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; + NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError]; if (jsonError != nil) { NSLog(@"Error parsing JSON: %@", jsonError.localizedDescription); diff --git a/Natives/SurfaceViewController.m b/Natives/SurfaceViewController.m index 8a462e85..32b2dfd2 100644 --- a/Natives/SurfaceViewController.m +++ b/Natives/SurfaceViewController.m @@ -53,7 +53,7 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) { - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; - if ([@(getenv("RENDERER")) hasPrefix:@"libOSMesaOverride"]) { + if ([getPreference(@"renderer") hasPrefix:@"libOSMesaOverride"]) { self.layer.opaque = YES; colorSpace = CGColorSpaceCreateDeviceRGB(); @@ -69,7 +69,7 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) { } + (Class)layerClass { - if ([@(getenv("RENDERER")) hasPrefix:@"libOSMesa"]) { + if ([getPreference(@"renderer") hasPrefix:@"libOSMesa"]) { return CALayer.class; } else { return CAMetalLayer.class; diff --git a/Natives/egl_bridge.m b/Natives/egl_bridge.m index 1254b1ab..c2078d8f 100644 --- a/Natives/egl_bridge.m +++ b/Natives/egl_bridge.m @@ -97,10 +97,6 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_setenv(JNIEnv *en (*env)->ReleaseStringUTFChars(env, value, value_c); } -JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_saveGLContext(JNIEnv* env, jclass clazz) { - // @deprecated, remove later -} - void terminateEgl() { debug("EGLBridge: Terminating"); diff --git a/Natives/input_bridge_v3.m b/Natives/input_bridge_v3.m index e98df6e2..8213a0c8 100644 --- a/Natives/input_bridge_v3.m +++ b/Natives/input_bridge_v3.m @@ -45,7 +45,6 @@ jmethodID uikitBridgeTouchMethod; // JNI_OnLoad jint JNI_OnLoad(JavaVM* vm, void* reserved) { - debug("[Init] PojavCore loaded from vm=%p\n", vm); runtimeJavaVMPtr = vm; (*vm)->GetEnv(vm, (void**) &runtimeJNIEnvPtr_JRE, JNI_VERSION_1_4); @@ -237,12 +236,9 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_runOnUIThread(JNIEnv UIKit_runOnUIThread(callback); } */ -JNIEXPORT jint JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_launchUI(JNIEnv* env, jclass clazz, jobjectArray args) { - int argc = (*env)->GetArrayLength(env, args); - char **argv = convert_to_char_array(env, args); - +JNIEXPORT jint JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_launchUI(JNIEnv* env, jclass clazz) { @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + return UIApplicationMain(1, (char *[]){ getenv("EXEC_PATH") }, nil, NSStringFromClass([AppDelegate class])); } } diff --git a/Natives/utils.h b/Natives/utils.h index f9fa059b..6a63e448 100644 --- a/Natives/utils.h +++ b/Natives/utils.h @@ -42,8 +42,8 @@ JavaVM* runtimeJavaVMPtr; JNIEnv* runtimeJNIEnvPtr_ANDROID; JNIEnv* runtimeJNIEnvPtr_JRE; -JNIEnv* dalvikJNIEnvPtr_ANDROID; -JNIEnv* dalvikJNIEnvPtr_JRE; +//JNIEnv* dalvikJNIEnvPtr_ANDROID; +//JNIEnv* dalvikJNIEnvPtr_JRE; long showingWindow; @@ -58,7 +58,7 @@ void _CGDataProviderReleaseBytePointerCallback(void *info,const void *pointer); jboolean attachThread(bool isAndroid, JNIEnv** secondJNIEnvPtr); char** convert_to_char_array(JNIEnv *env, jobjectArray jstringArray); jobjectArray convert_from_char_array(JNIEnv *env, char **charArray, int num_rows); -void free_char_array(JNIEnv *env, jobjectArray jstringArray, const char **charArray); +void free_char_array(JNIEnv *env, jobjectArray jstringArray, char **charArray); jstring convertStringJVM(JNIEnv* srcEnv, JNIEnv* dstEnv, jstring srcStr); void sendData(int type, int i1, int i2, int i3, int i4); diff --git a/Natives/utils.m b/Natives/utils.m index 542d519e..34bb08ea 100644 --- a/Natives/utils.m +++ b/Natives/utils.m @@ -37,7 +37,7 @@ jobjectArray convert_from_char_array(JNIEnv *env, char **charArray, int num_rows return resultArr; } -void free_char_array(JNIEnv *env, jobjectArray jstringArray, const char **charArray) { +void free_char_array(JNIEnv *env, jobjectArray jstringArray, char **charArray) { int num_rows = (*env)->GetArrayLength(env, jstringArray); jstring row; @@ -45,6 +45,8 @@ void free_char_array(JNIEnv *env, jobjectArray jstringArray, const char **charAr row = (jstring) (*env)->GetObjectArrayElement(env, jstringArray, i); (*env)->ReleaseStringUTFChars(env, row, charArray[i]); } + + free(charArray); } jstring convertStringJVM(JNIEnv* srcEnv, JNIEnv* dstEnv, jstring srcStr) {