From 570009a8e49a8c999455f4804ce1c48acaf7df8e Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Tue, 29 May 2018 03:55:32 +0300 Subject: jvm/libjvm-*: implement stuff Wolf simulator (lol) starts working --- src/jvm/jvm.c | 2 +- src/jvm/jvm.h | 3 +++ src/libjvm-android.c | 55 +++++++++++++++++++++++++++++++++++++++++++++- src/libjvm-java.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 118 insertions(+), 4 deletions(-) diff --git a/src/jvm/jvm.c b/src/jvm/jvm.c index 914224c..700b084 100644 --- a/src/jvm/jvm.c +++ b/src/jvm/jvm.c @@ -293,7 +293,7 @@ jvm_get_object_of_type(struct jvm *jvm, const jobject o, const enum jvm_object_t return obj; } -static struct jvm* +struct jvm* jnienv_get_jvm(JNIEnv *env) { return container_of(env, struct jvm, env); diff --git a/src/jvm/jvm.h b/src/jvm/jvm.h index cc69cb4..0de88d2 100644 --- a/src/jvm/jvm.h +++ b/src/jvm/jvm.h @@ -80,3 +80,6 @@ jvm_release(struct jvm *jvm); void jvm_init(struct jvm *jvm); + +struct jvm* +jnienv_get_jvm(JNIEnv *env); diff --git a/src/libjvm-android.c b/src/libjvm-android.c index 5592311..52273bc 100644 --- a/src/libjvm-android.c +++ b/src/libjvm-android.c @@ -1,5 +1,5 @@ #include -#include +#include #include #include "jvm/jni.h" @@ -54,14 +54,29 @@ jstring android_content_Context_getPackageName(JNIEnv *env, jobject object, va_list args) { assert(env && object); +#if WOLF + return (*env)->NewStringUTF(env, "com.swiftappskom.thewolfrpg"); +#else return (*env)->NewStringUTF(env, "com.miHoYo.bh3oversea"); +#endif } jstring android_content_Context_getPackageCodePath(JNIEnv *env, jobject object, va_list args) { assert(env && object); +#if WOLF + return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/apks/wolf"); +#else return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/apks/honkai"); +#endif +} + +jstring +android_content_pm_PackageInfo_versionName(JNIEnv *env, jobject object) +{ + assert(env && object); + return (*env)->NewStringUTF(env, "1.1"); } jobject @@ -99,3 +114,41 @@ android_content_Context_getExternalCacheDir(JNIEnv *env, jobject object, va_list static jobject sv; return (sv ? sv : (sv = (*env)->AllocObject(env, (*env)->FindClass(env, "java/io/File")))); } + +jstring +android_net_Uri_decode(JNIEnv *env, jobject object, va_list args) +{ + assert(env && object); + jstring str = va_arg(args, jstring); + (*env)->GetStringUTFChars(env, str, NULL); + return str; +} + +jstring +android_net_Uri_encode(JNIEnv *env, jobject object, va_list args) +{ + assert(env && object); + jstring str = va_arg(args, jstring); + (*env)->GetStringUTFChars(env, str, NULL); + return str; +} + +jstring +android_content_SharedPreferences_getString(JNIEnv *env, jobject object, va_list args) +{ + assert(env && object); + jstring str1 = va_arg(args, jstring); + jstring str2 = va_arg(args, jstring); + (*env)->GetStringUTFChars(env, str1, NULL); + (*env)->GetStringUTFChars(env, str2, NULL); + return str2; +} + +jstring +android_os_Bundle_getString(JNIEnv *env, jobject object, va_list args) +{ + assert(env && object); + jstring str1 = va_arg(args, jstring); + (*env)->GetStringUTFChars(env, str1, NULL); + return NULL; +} diff --git a/src/libjvm-java.c b/src/libjvm-java.c index 6bccb70..3a5a47c 100644 --- a/src/libjvm-java.c +++ b/src/libjvm-java.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -33,14 +34,14 @@ java_lang_System_load(JNIEnv *env, jobject object, va_list args) } jclass -java_lang_Object_getClass(JNIEnv *env, jobject object, va_list args) +java_lang_Object_getClass(JNIEnv *env, jobject object) { assert(env && object); return (*env)->GetObjectClass(env, object); } jobject -java_lang_Class_getClassLoader(JNIEnv *env, jobject object, va_list args) +java_lang_Class_getClassLoader(JNIEnv *env, jobject object) { assert(env && object); static jobject sv; @@ -63,5 +64,62 @@ java_io_File_getPath(JNIEnv *env, jobject object, va_list args) { assert(env && object); // FIXME: see comment on `android_content_Context_getExternalFilesDir` +#if WOLF + return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/local/data/com.swiftappskom.thewolfrpg/files"); +#else return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/local/data/com.miHoYo.bh3oversea/files"); +#endif +} + +jstring +java_io_File_getParent(JNIEnv *env, jobject object, va_list args) +{ + return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/local/data/com.miHoYo.bh3oversea"); +} + +jboolean +java_lang_String_equals(JNIEnv *env, jobject object, va_list args) +{ + assert(env && object); + jstring str = va_arg(args, jstring); + const char *utf1 = (*env)->GetStringUTFChars(env, object, NULL); + const char *utf2 = (*env)->GetStringUTFChars(env, str, NULL); + const jboolean equal = (utf1 == utf2 || (utf1 && utf2 && !strcmp(utf1, utf2))); + (*env)->ReleaseStringUTFChars(env, object, utf1); + (*env)->ReleaseStringUTFChars(env, str, utf2); + return equal; +} + +jclass +java_lang_Class_forName(JNIEnv *env, jobject object, va_list args) +{ + assert(env && object); + jstring str = va_arg(args, jstring); + const char *utf = (*env)->GetStringUTFChars(env, str, NULL); + return (*env)->FindClass(env, utf); +} + +jstring +java_util_Locale_getLanguage(JNIEnv *env, jobject object) +{ + assert(env && object); + return (*env)->NewStringUTF(env, "en"); +} + +jstring +java_util_Locale_getCountry(JNIEnv *env, jobject object) +{ + assert(env && object); + return (*env)->NewStringUTF(env, "US"); +} + +#include "jvm/jvm.h" +#include + +jstring +java_lang_Class_getName(JNIEnv *env, jobject object) +{ + assert(env && object); + const struct jvm *jvm = jnienv_get_jvm(env); + return (*env)->NewStringUTF(env, jvm->objects[(uintptr_t)object - 1].klass.name.data); } -- cgit v1.2.3