From 4b776bc2026b4f5b1892cf9b707ad0a7b36c00a0 Mon Sep 17 00:00:00 2001 From: Richard Elms Date: Fri, 4 Oct 2024 23:51:29 +0200 Subject: [PATCH] eee --- .../Android/AndroidPlatformBugsnag.cpp | 113 ++++++++++++------ 1 file changed, 77 insertions(+), 36 deletions(-) diff --git a/Plugins/Bugsnag/Source/Bugsnag/Private/Android/AndroidPlatformBugsnag.cpp b/Plugins/Bugsnag/Source/Bugsnag/Private/Android/AndroidPlatformBugsnag.cpp index e5b0ccc..60fba80 100644 --- a/Plugins/Bugsnag/Source/Bugsnag/Private/Android/AndroidPlatformBugsnag.cpp +++ b/Plugins/Bugsnag/Source/Bugsnag/Private/Android/AndroidPlatformBugsnag.cpp @@ -24,66 +24,107 @@ static JNIReferenceCache JNICache; void FAndroidPlatformBugsnag::Start(const TSharedRef& Config) { - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG CALLING START")); + UE_LOG(LogBugsnag, Log, TEXT("FAndroidPlatformBugsnag::Start called with Config: %s"), *Config->ToString()); + if (JNICache.loaded) // only attempt initialization once { + UE_LOG(LogBugsnag, Warning, TEXT("JNICache is already loaded. Initialization skipped.")); return; } + JNIEnv* Env = AndroidJavaEnv::GetJavaEnv(true); + if (!Env) + { + UE_LOG(LogBugsnag, Error, TEXT("Failed to get Java Environment.")); + return; + } + UE_LOG(LogBugsnag, Log, TEXT("Java Environment obtained successfully.")); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG about to load JNICache for the first time")); + UE_LOG(LogBugsnag, Log, TEXT("Attempting to load JNICache for the first time.")); JNICache.loaded = FAndroidPlatformJNI::LoadReferenceCache(Env, &JNICache); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache WTF")); - - if(JNICache.loaded) + if (JNICache.loaded) { - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded")); + UE_LOG(LogBugsnag, Log, TEXT("JNICache loaded successfully.")); } - if (JNICache.loaded) + else { - OnBreadcrumbCallbacks += Config->GetOnBreadcrumbCallbacks(); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 1")); - - OnSessionCallbacks += Config->GetOnSessionCallbacks(); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 2")); + UE_LOG(LogBugsnag, Error, TEXT("Failed to load JNICache.")); + return; + } - OnSendErrorCallbacks += Config->GetOnSendErrorCallbacks(); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 3")); + // Register callbacks + OnBreadcrumbCallbacks += Config->GetOnBreadcrumbCallbacks(); + UE_LOG(LogBugsnag, Log, TEXT("OnBreadcrumbCallbacks registered.")); - jobject jActivity = AndroidJavaEnv::GetGameActivityThis(); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 4")); + OnSessionCallbacks += Config->GetOnSessionCallbacks(); + UE_LOG(LogBugsnag, Log, TEXT("OnSessionCallbacks registered.")); - jobject jApp = (*Env).CallObjectMethod(jActivity, JNICache.ContextGetApplication); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 5")); + OnSendErrorCallbacks += Config->GetOnSendErrorCallbacks(); + UE_LOG(LogBugsnag, Log, TEXT("OnSendErrorCallbacks registered.")); - ReturnVoidOnException(Env); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 6")); + // Get Activity + jobject jActivity = AndroidJavaEnv::GetGameActivityThis(); + if (!jActivity) + { + UE_LOG(LogBugsnag, Error, TEXT("Failed to get Game Activity.")); + return; + } + UE_LOG(LogBugsnag, Log, TEXT("Game Activity obtained successfully.")); - jobject jConfig = FAndroidPlatformConfiguration::Parse(Env, &JNICache, Config); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 7")); + // Get Application Context + jobject jApp = Env->CallObjectMethod(jActivity, JNICache.ContextGetApplication); + if (FAndroidPlatformJNI::CheckAndClearException(Env) || !jApp) + { + UE_LOG(LogBugsnag, Error, TEXT("Failed to get Application Context.")); + return; + } + UE_LOG(LogBugsnag, Log, TEXT("Application Context obtained successfully.")); - jobject jClient = (*Env).CallStaticObjectMethod(JNICache.BugsnagClass, JNICache.BugsnagStartMethod, jApp, jConfig); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 8")); + // Parse Configuration + jobject jConfig = FAndroidPlatformConfiguration::Parse(Env, &JNICache, Config); + if (!jConfig) + { + UE_LOG(LogBugsnag, Error, TEXT("Failed to parse Bugsnag Configuration.")); + return; + } + UE_LOG(LogBugsnag, Log, TEXT("Bugsnag Configuration parsed successfully.")); - JNICache.initialized = !FAndroidPlatformJNI::CheckAndClearException(Env) && jClient != NULL; - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache loaded 9")); + // Start Bugsnag + jobject jClient = Env->CallStaticObjectMethod(JNICache.BugsnagClass, JNICache.BugsnagStartMethod, jApp, jConfig); + if (FAndroidPlatformJNI::CheckAndClearException(Env) || !jClient) + { + UE_LOG(LogBugsnag, Error, TEXT("Failed to start Bugsnag client.")); + JNICache.initialized = false; + } + else + { + JNICache.initialized = true; + UE_LOG(LogBugsnag, Log, TEXT("Bugsnag client started successfully.")); + } - if (JNICache.initialized) + if (JNICache.initialized) + { + jstring jKey = FAndroidPlatformJNI::ParseFString(Env, BugsnagConstants::UnrealEngine); + jstring jValue = FAndroidPlatformJNI::ParseFString(Env, BugsnagUtils::GetUnrealEngineVersion()); + Env->CallVoidMethod(jClient, JNICache.ClientAddRuntimeVersionInfo, jKey, jValue); + if (FAndroidPlatformJNI::CheckAndClearException(Env)) { - jstring jKey = FAndroidPlatformJNI::ParseFString(Env, BugsnagConstants::UnrealEngine); - jstring jValue = FAndroidPlatformJNI::ParseFString(Env, BugsnagUtils::GetUnrealEngineVersion()); - (*Env).CallVoidMethod(jClient, JNICache.ClientAddRuntimeVersionInfo, jKey, jValue); - FAndroidPlatformJNI::CheckAndClearException(Env); - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache initialized")); - + UE_LOG(LogBugsnag, Error, TEXT("Failed to add runtime version info to Bugsnag client.")); + } + else + { + UE_LOG(LogBugsnag, Log, TEXT("Runtime version info added to Bugsnag client: %s - %s"), *BugsnagConstants::UnrealEngine, *BugsnagUtils::GetUnrealEngineVersion()); } - }else{ - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG JNICache NOT loaded")); } - UE_LOG(LogBugsnag, Error, TEXT("RICHLOG Start finished")); + else + { + UE_LOG(LogBugsnag, Error, TEXT("Bugsnag client initialization failed.")); + } + UE_LOG(LogBugsnag, Log, TEXT("FAndroidPlatformBugsnag::Start completed.")); } + void FAndroidPlatformBugsnag::Notify(const FString& ErrorClass, const FString& Message, const TArray& StackTrace, const FBugsnagOnErrorCallback& Callback) {