main: print errors to stderr

also add exception check after onCreate for better error reporting
This commit is contained in:
Mis012
2025-10-26 23:20:34 +01:00
parent 3043ab954d
commit a7aa807fb5

View File

@@ -10,9 +10,9 @@
#include "../api-impl-jni/util.h" #include "../api-impl-jni/util.h"
#include "../api-impl-jni/app/android_app_Activity.h" #include "../api-impl-jni/app/android_app_Activity.h"
#include "actions.h"
#include "back_button.h" #include "back_button.h"
#include "libc_bio_path_overrides.h" #include "libc_bio_path_overrides.h"
#include "actions.h"
#include <dlfcn.h> #include <dlfcn.h>
#include <errno.h> #include <errno.h>
@@ -123,9 +123,9 @@ JNIEnv *create_vm(char *api_impl_jar, char *apk_classpath, char *microg_apk, cha
int ret = JNI_CreateJavaVM(&jvm, (void **)&env, &args); int ret = JNI_CreateJavaVM(&jvm, (void **)&env, &args);
if (ret < 0) { if (ret < 0) {
printf("Unable to Launch JVM\n"); fprintf(stderr, "Unable to Launch JVM\n");
} else { } else {
printf("JVM launched successfully\n"); fprintf(stderr, "JVM launched successfully\n");
} }
free(options); free(options);
@@ -159,7 +159,7 @@ static void dynamic_launcher_ready_callback(GObject *portal, GAsyncResult *res,
struct dynamic_launcher_callback_data *data = user_data; struct dynamic_launcher_callback_data *data = user_data;
GVariant *result = xdp_portal_dynamic_launcher_prepare_install_finish(XDP_PORTAL(portal), res, NULL); GVariant *result = xdp_portal_dynamic_launcher_prepare_install_finish(XDP_PORTAL(portal), res, NULL);
if (!result) { if (!result) {
printf("cancelled\n"); fprintf(stderr, "cancelled\n");
exit(0); exit(0);
} }
const char *token; const char *token;
@@ -170,7 +170,7 @@ static void dynamic_launcher_ready_callback(GObject *portal, GAsyncResult *res,
g_free(data->desktop_entry); g_free(data->desktop_entry);
g_free(data); g_free(data);
if (err) { if (err) {
printf("failed to install dynamic launcher: %s\n", err->message); fprintf(stderr, "failed to install dynamic launcher: %s\n", err->message);
exit(1); exit(1);
} }
// run update-desktop-database to add the new x-scheme-handler entries to ~/.local/share/applications/mimeinfo.cache // run update-desktop-database to add the new x-scheme-handler entries to ~/.local/share/applications/mimeinfo.cache
@@ -258,7 +258,7 @@ static gboolean on_drop(GtkDropTarget *target, const GValue *value, double x, do
(*env)->ExceptionDescribe(env); (*env)->ExceptionDescribe(env);
} }
if (!activity) { if (!activity) {
printf("failed to resolve activity to handle URI: %s\n", data); fprintf(stderr, "failed to resolve activity to handle URI: %s\n", data);
return FALSE; return FALSE;
} }
activity_start(env, activity); activity_start(env, activity);
@@ -275,10 +275,10 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
} }
*/ */
if (window) { // this is not the first launch, but a DBus request to open an URI in the running app if (window) { // this is not the first launch, but a DBus request to open an URI in the running app
printf("opening uri over DBus %p\n", files[0]); fprintf(stderr, "opening uri over DBus %p\n", files[0]);
char *uri = g_file_get_uri(files[0]); char *uri = g_file_get_uri(files[0]);
JNIEnv *env = get_jni_env(); JNIEnv *env = get_jni_env();
printf("opening uri over DBus: %s\n", uri); fprintf(stderr, "opening uri over DBus: %s\n", uri);
jobject activity = (*env)->CallStaticObjectMethod(env, handle_cache.activity.class, jobject activity = (*env)->CallStaticObjectMethod(env, handle_cache.activity.class,
_STATIC_METHOD(handle_cache.activity.class, "createMainActivity", "(Ljava/lang/String;JLjava/lang/String;)Landroid/app/Activity;"), _STATIC_METHOD(handle_cache.activity.class, "createMainActivity", "(Ljava/lang/String;JLjava/lang/String;)Landroid/app/Activity;"),
_JSTRING(d->apk_main_activity_class), _INTPTR(window), _JSTRING(uri)); _JSTRING(d->apk_main_activity_class), _INTPTR(window), _JSTRING(uri));
@@ -303,12 +303,12 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
char *apk_name = g_file_get_basename(files[0]); char *apk_name = g_file_get_basename(files[0]);
if (apk_classpath == NULL) { if (apk_classpath == NULL) {
printf("error: the specified file path doesn't seem to be valid\n"); fprintf(stderr, "error: the specified file path doesn't seem to be valid\n");
exit(1); exit(1);
} }
if (access(apk_classpath, F_OK) < 0) { if (access(apk_classpath, F_OK) < 0) {
printf("error: the specified file path (%s) doesn't seem to exist (%m)\n", apk_classpath); fprintf(stderr, "error: the specified file path (%s) doesn't seem to exist (%m)\n", apk_classpath);
exit(1); exit(1);
} }
@@ -377,11 +377,11 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
if (!ret) { if (!ret) {
api_impl_jar = api_impl_install_dir; api_impl_jar = api_impl_install_dir;
} else { } else {
printf("error: can't stat api-impl.jar; tried:\n" fprintf(stderr, "error: can't stat api-impl.jar; tried:\n"
"\t\"" API_IMPL_JAR_PATH_LOCAL "\", got - %s\n" "\t\"" API_IMPL_JAR_PATH_LOCAL "\", got - %s\n"
"\t\"%s\", got - %s\n", "\t\"%s\", got - %s\n",
strerror(errno_localdir), strerror(errno_localdir),
api_impl_install_dir, strerror(errno_libdir)); api_impl_install_dir, strerror(errno_libdir));
exit(1); exit(1);
} }
} }
@@ -400,11 +400,11 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
if (!ret) { if (!ret) {
microg_apk = microg_install_dir; microg_apk = microg_install_dir;
} else { } else {
printf("warning: can't stat com.google.android.gms.apk; tried:\n" fprintf(stderr, "warning: can't stat com.google.android.gms.apk; tried:\n"
"\t\"" MICROG_APK_PATH_LOCAL "\", got - %s\n" "\t\"" MICROG_APK_PATH_LOCAL "\", got - %s\n"
"\t\"%s\", got - %s\n", "\t\"%s\", got - %s\n",
strerror(errno_localdir), strerror(errno_localdir),
microg_install_dir, strerror(errno_libdir)); microg_install_dir, strerror(errno_libdir));
} }
} }
@@ -422,11 +422,11 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
if (!ret) { if (!ret) {
framework_res_apk = framework_res_install_dir; framework_res_apk = framework_res_install_dir;
} else { } else {
printf("warning: can't stat framework-res.apk; tried:\n" fprintf(stderr, "warning: can't stat framework-res.apk; tried:\n"
"\t\"" FRAMEWORK_RES_PATH_LOCAL "\", got - %s\n" "\t\"" FRAMEWORK_RES_PATH_LOCAL "\", got - %s\n"
"\t\"%s\", got - %s\n", "\t\"%s\", got - %s\n",
strerror(errno_localdir), strerror(errno_localdir),
framework_res_install_dir, strerror(errno_libdir)); framework_res_install_dir, strerror(errno_libdir));
} }
} }
@@ -445,11 +445,11 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
if (!ret) { if (!ret) {
test_runner_jar = test_runner_jar_install_dir; test_runner_jar = test_runner_jar_install_dir;
} else { } else {
printf("warning: can't stat test_runner.jar; tried:\n" fprintf(stderr, "warning: can't stat test_runner.jar; tried:\n"
"\t\"" TEST_RUNNER_JAR_PATH_LOCAL "\", got - %s\n" "\t\"" TEST_RUNNER_JAR_PATH_LOCAL "\", got - %s\n"
"\t\"%s\", got - %s\n", "\t\"%s\", got - %s\n",
strerror(errno_localdir), strerror(errno_localdir),
test_runner_jar_install_dir, strerror(errno_libdir)); test_runner_jar_install_dir, strerror(errno_libdir));
} }
} }
} }
@@ -545,7 +545,10 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
if ((*env)->ExceptionCheck(env)) if ((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env); (*env)->ExceptionDescribe(env);
(*env)->CallVoidMethod(env, application_object, _METHOD(handle_cache.application.class, "onCreate", "()V")); jmethodID on_create_method = _METHOD(handle_cache.application.class, "onCreate", "()V");
if ((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env);
(*env)->CallVoidMethod(env, application_object, on_create_method);
if ((*env)->ExceptionCheck(env)) if ((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env); (*env)->ExceptionDescribe(env);
@@ -657,7 +660,7 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
GError *err = NULL; GError *err = NULL;
g_file_copy(files[0], dest, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &err); g_file_copy(files[0], dest, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &err);
if(err) if(err)
printf("error copying apk: %s\n", err->message); fprintf(stderr, "error copying apk: %s\n", err->message);
if(d->install_internal) if(d->install_internal)
exit(0); exit(0);
@@ -740,7 +743,7 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
GError *error = NULL; GError *error = NULL;
GList *icon_list = g_list_append(NULL, gdk_texture_new_from_filename(app_icon_path_full, &error)); GList *icon_list = g_list_append(NULL, gdk_texture_new_from_filename(app_icon_path_full, &error));
if (error) { if (error) {
printf("gdk_texture_new_from_filename: %s\n", error->message); fprintf(stderr, "gdk_texture_new_from_filename: %s\n", error->message);
g_clear_error(&error); g_clear_error(&error);
} }
icon_override(window, icon_list); icon_override(window, icon_list);
@@ -779,14 +782,14 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
static void activate(GtkApplication *app, struct jni_callback_data *d) static void activate(GtkApplication *app, struct jni_callback_data *d)
{ {
printf("error: usage: ./android-translation-layer [app.apk] [-l path/to/activity]\n" fprintf(stderr, "error: usage: ./android-translation-layer [app.apk] [-l path/to/activity]\n"
"you can specify --help to see the list of options\n"); "you can specify --help to see the list of options\n");
exit(1); exit(1);
} }
static gboolean option_uri_cb(const gchar* option_name, const gchar* value, gpointer data, GError** error) static gboolean option_uri_cb(const gchar* option_name, const gchar* value, gpointer data, GError** error)
{ {
printf("option_uri_cb: %s %s, %p, %p\n", option_name, value, data, error); fprintf(stderr, "option_uri_cb: %s %s, %p, %p\n", option_name, value, data, error);
uri_option = g_strdup(value); uri_option = g_strdup(value);
return TRUE; return TRUE;
} }