From 75187b01d5f9240b2af0432d148789253cd64d70 Mon Sep 17 00:00:00 2001 From: Mis012 Date: Thu, 24 Nov 2022 16:05:38 +0100 Subject: [PATCH] implement/stub some stuff to make SmashHit launch --- src/api-impl/android/accounts/Account.java | 14 ++++++++++++++ src/api-impl/android/content/Context.java | 9 +++++++++ .../android/content/pm/ResolveInfo.java | 5 +++++ src/api-impl/android/os/Parcelable.java | 2 +- src/api-impl/android/os/PowerManager.java | 9 +++++++++ src/api-impl/android/text/TextUtils.java | 4 ++++ src/api-impl/meson.build | 3 +++ src/libandroid/asset_manager.c | 19 +++++++++++++++++++ 8 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/api-impl/android/accounts/Account.java create mode 100644 src/api-impl/android/content/pm/ResolveInfo.java create mode 100644 src/api-impl/android/os/PowerManager.java diff --git a/src/api-impl/android/accounts/Account.java b/src/api-impl/android/accounts/Account.java new file mode 100644 index 00000000..cb722f62 --- /dev/null +++ b/src/api-impl/android/accounts/Account.java @@ -0,0 +1,14 @@ +package android.accounts; + +import android.os.Parcelable; + +public class Account implements Parcelable { + public static final Creator CREATOR = null; + public final String name; + public final String type; + + public Account(String name, String type) { + this.name = name; + this.type = type; + } +} diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index 9356f3b3..03154a11 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -16,6 +16,7 @@ import android.util.DisplayMetrics; import android.content.SharedPreferences; import android.app.SharedPreferencesImpl; import android.os.Looper; +import android.os.PowerManager; import android.app.Application; import android.view.WindowManager; @@ -42,6 +43,8 @@ public class Context extends Object { static Configuration config; static Resources r; + static String apk_path = "/tmp/APK_PATH_SHOULD_HAVE_BEEN_FILLED_IN_BY_CODE_IN_main.c/"; + public /*← FIXME?*/ static Application this_application; File data_dir = null; @@ -96,6 +99,8 @@ public class Context extends Object { return new UsbManager(); case "vibrator": return new Vibrator(); + case "power": + return new PowerManager(); default: System.out.println("!!!!!!! getSystemService: case >"+name+"< is not implemented yet"); return null; @@ -115,6 +120,10 @@ public class Context extends Object { return "com.example.demo_app"; } + public String getPackageCodePath() { + return apk_path; + } + public final String getString(int resId) { return r.getString(resId); } diff --git a/src/api-impl/android/content/pm/ResolveInfo.java b/src/api-impl/android/content/pm/ResolveInfo.java new file mode 100644 index 00000000..f0cfa4b4 --- /dev/null +++ b/src/api-impl/android/content/pm/ResolveInfo.java @@ -0,0 +1,5 @@ +package android.content.pm; + +public class ResolveInfo { + +} diff --git a/src/api-impl/android/os/Parcelable.java b/src/api-impl/android/os/Parcelable.java index 4435365e..8a7c6440 100644 --- a/src/api-impl/android/os/Parcelable.java +++ b/src/api-impl/android/os/Parcelable.java @@ -1,5 +1,5 @@ package android.os; public interface Parcelable { - + public static interface Creator {} } diff --git a/src/api-impl/android/os/PowerManager.java b/src/api-impl/android/os/PowerManager.java new file mode 100644 index 00000000..44197c44 --- /dev/null +++ b/src/api-impl/android/os/PowerManager.java @@ -0,0 +1,9 @@ +package android.os; + +public final class PowerManager { + public final class WakeLock {} + + public WakeLock newWakeLock(int levelAndFlags, String tag) { + return new WakeLock(); + } +} diff --git a/src/api-impl/android/text/TextUtils.java b/src/api-impl/android/text/TextUtils.java index b3e366b8..f2da43d6 100644 --- a/src/api-impl/android/text/TextUtils.java +++ b/src/api-impl/android/text/TextUtils.java @@ -61,4 +61,8 @@ public class TextUtils { final CharSequence delimiter = ","; // ???? return join(delimiter, list); } + + public static boolean isEmpty(CharSequence str) { + return str.equals(""); // presumably? + } } diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index 7f8d0388..863c6177 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -1,4 +1,5 @@ hax_jar = jar('hax', [ + 'android/accounts/Account.java', 'android/annotation/PrivateApi.java', 'android/annotation/SdkConstant.java', 'android/annotation/SuppressLint.java', @@ -44,6 +45,7 @@ hax_jar = jar('hax', [ 'android/content/pm/PermissionGroupInfo.java', 'android/content/pm/PermissionInfo.java', 'android/content/pm/ProviderInfo.java', + 'android/content/pm/ResolveInfo.java', 'android/content/pm/ServiceInfo.java', 'android/content/pm/Signature.java', 'android/content/pm/VerifierInfo.java', @@ -114,6 +116,7 @@ hax_jar = jar('hax', [ 'android/os/Parcelable.java', 'android/os/ParcelFileDescriptor.java', 'android/os/PatternMatcher.java', + 'android/os/PowerManager.java', 'android/os/Process.java', 'android/os/RemoteException.java', 'android/os/ResultReceiver.java', diff --git a/src/libandroid/asset_manager.c b/src/libandroid/asset_manager.c index 245fa25c..cb7bcf33 100644 --- a/src/libandroid/asset_manager.c +++ b/src/libandroid/asset_manager.c @@ -23,6 +23,25 @@ typedef void * jobject; #define ASSET_DIR "assets/" char *get_app_data_dir(); +int AAsset_openFileDescriptor(struct AAsset *asset, off_t *out_start, off_t *out_length) +{ + int ret; + int fd = asset->fd; + + printf("openning asset's file descriptor: : %d\n", fd); + + struct stat statbuf; + + ret = fstat(fd, &statbuf); + if(ret) + printf("oopsie, fstat failed on fd: %d with errno: %d\n", fd, errno); + + *out_start = 0; // on android, we would be returning the fd of the app's apk, and this would be the offet to a non-compressed archive member + *out_length = statbuf.st_size; // similarly, this would be the size of the section of memory containing the non-compressed archive member + + return fd; +} + struct AAsset* AAssetManager_open(struct AAssetManager *amgr, const char *file_name, int mode) { char *app_data_dir = get_app_data_dir();