diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1a7820d..8cd07616 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,3 +49,4 @@ jobs: targetPlatform: ${{ matrix.targetPlatform }} projectPath: ${{ matrix.projectPath }}/ allowDirtyBuild: true + \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 001e9304..0bb62ebf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,9 +18,10 @@ jobs: projectPath: - test-package unityVersion: - - 2022.3.19f1 - - 2019.4.40f1 - - 2020.3.48f1 + # Pending LTS License + #- 2021.3.48f1 + #- 6000.0.38f1 + - 2022.3.56f1 steps: - name: Checkout Repo uses: actions/checkout@v4 diff --git a/Android/lib/arm64-v8a/libbacktrace-native.so b/Android/lib/arm64-v8a/libbacktrace-native.so index bf89d36b..c7acd6ce 100644 Binary files a/Android/lib/arm64-v8a/libbacktrace-native.so and b/Android/lib/arm64-v8a/libbacktrace-native.so differ diff --git a/Android/lib/arm64-v8a/libbacktrace-native.so.meta b/Android/lib/arm64-v8a/libbacktrace-native.so.meta index e5e54589..8daba069 100644 --- a/Android/lib/arm64-v8a/libbacktrace-native.so.meta +++ b/Android/lib/arm64-v8a/libbacktrace-native.so.meta @@ -31,4 +31,4 @@ PluginImporter: DefaultValueInitialized: true userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Android/lib/arm64-v8a/libcrashpad_handler.so b/Android/lib/arm64-v8a/libcrashpad_handler.so deleted file mode 100644 index ce674e06..00000000 Binary files a/Android/lib/arm64-v8a/libcrashpad_handler.so and /dev/null differ diff --git a/Android/lib/arm64-v8a/libnative-lib.so b/Android/lib/arm64-v8a/libnative-lib.so index 6ac86514..b5c5b398 100644 Binary files a/Android/lib/arm64-v8a/libnative-lib.so and b/Android/lib/arm64-v8a/libnative-lib.so differ diff --git a/Android/lib/arm64-v8a/libnative-lib.so.meta b/Android/lib/arm64-v8a/libnative-lib.so.meta index a5b3e999..1ba12a2b 100644 --- a/Android/lib/arm64-v8a/libnative-lib.so.meta +++ b/Android/lib/arm64-v8a/libnative-lib.so.meta @@ -31,4 +31,4 @@ PluginImporter: DefaultValueInitialized: true userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Android/lib/armeabi-v7a/libbacktrace-native.so b/Android/lib/armeabi-v7a/libbacktrace-native.so index 6e3e2700..5cdb43d8 100644 Binary files a/Android/lib/armeabi-v7a/libbacktrace-native.so and b/Android/lib/armeabi-v7a/libbacktrace-native.so differ diff --git a/Android/lib/armeabi-v7a/libbacktrace-native.so.meta b/Android/lib/armeabi-v7a/libbacktrace-native.so.meta index 9b7c94d2..515e7fc3 100644 --- a/Android/lib/armeabi-v7a/libbacktrace-native.so.meta +++ b/Android/lib/armeabi-v7a/libbacktrace-native.so.meta @@ -31,4 +31,4 @@ PluginImporter: DefaultValueInitialized: true userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Android/lib/armeabi-v7a/libcrashpad_handler.so b/Android/lib/armeabi-v7a/libcrashpad_handler.so deleted file mode 100644 index de4e0eb1..00000000 Binary files a/Android/lib/armeabi-v7a/libcrashpad_handler.so and /dev/null differ diff --git a/Android/lib/armeabi-v7a/libnative-lib.so b/Android/lib/armeabi-v7a/libnative-lib.so index de7eeea3..eae5dccd 100644 Binary files a/Android/lib/armeabi-v7a/libnative-lib.so and b/Android/lib/armeabi-v7a/libnative-lib.so differ diff --git a/Android/lib/armeabi-v7a/libnative-lib.so.meta b/Android/lib/armeabi-v7a/libnative-lib.so.meta index 9b46160f..098fea00 100644 --- a/Android/lib/armeabi-v7a/libnative-lib.so.meta +++ b/Android/lib/armeabi-v7a/libnative-lib.so.meta @@ -31,4 +31,4 @@ PluginImporter: DefaultValueInitialized: true userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Android/lib/x86/libbacktrace-native.so b/Android/lib/x86/libbacktrace-native.so index 5999768e..84ca3ff0 100644 Binary files a/Android/lib/x86/libbacktrace-native.so and b/Android/lib/x86/libbacktrace-native.so differ diff --git a/Android/lib/x86/libbacktrace-native.so.meta b/Android/lib/x86/libbacktrace-native.so.meta index 7e2285fa..b8b46e4e 100644 --- a/Android/lib/x86/libbacktrace-native.so.meta +++ b/Android/lib/x86/libbacktrace-native.so.meta @@ -31,5 +31,4 @@ PluginImporter: DefaultValueInitialized: true userData: assetBundleName: - assetBundleVariant: - + assetBundleVariant: \ No newline at end of file diff --git a/Android/lib/x86/libcrashpad_handler.so b/Android/lib/x86/libcrashpad_handler.so deleted file mode 100644 index 32b2a0e1..00000000 Binary files a/Android/lib/x86/libcrashpad_handler.so and /dev/null differ diff --git a/Android/lib/x86/libnative-lib.so b/Android/lib/x86/libnative-lib.so index a31e67a3..ee4d9f0a 100644 Binary files a/Android/lib/x86/libnative-lib.so and b/Android/lib/x86/libnative-lib.so differ diff --git a/Android/lib/x86_64.meta b/Android/lib/x86_64.meta new file mode 100644 index 00000000..438975da --- /dev/null +++ b/Android/lib/x86_64.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79839d38ef62344c9b942cb39e0bf9e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Android/lib/x86_64/libbacktrace-native.so b/Android/lib/x86_64/libbacktrace-native.so new file mode 100644 index 00000000..badafb26 Binary files /dev/null and b/Android/lib/x86_64/libbacktrace-native.so differ diff --git a/Android/lib/x86/libcrashpad_handler.so.meta b/Android/lib/x86_64/libbacktrace-native.so.meta similarity index 87% rename from Android/lib/x86/libcrashpad_handler.so.meta rename to Android/lib/x86_64/libbacktrace-native.so.meta index 9c627b76..6bb7a32f 100644 --- a/Android/lib/x86/libcrashpad_handler.so.meta +++ b/Android/lib/x86_64/libbacktrace-native.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5a073faa848d354438619cc83dd986ce +guid: 9efa55c470a48419289dedd54d4e3d77 PluginImporter: externalObjects: {} serializedVersion: 2 @@ -22,7 +22,7 @@ PluginImporter: second: enabled: 1 settings: - CPU: x86 + CPU: x86_64 - first: Editor: Editor second: @@ -31,4 +31,4 @@ PluginImporter: DefaultValueInitialized: true userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Android/lib/x86_64/libnative-lib.so b/Android/lib/x86_64/libnative-lib.so new file mode 100644 index 00000000..21152402 Binary files /dev/null and b/Android/lib/x86_64/libnative-lib.so differ diff --git a/Android/lib/arm64-v8a/libcrashpad_handler.so.meta b/Android/lib/x86_64/libnative-lib.so.meta similarity index 87% rename from Android/lib/arm64-v8a/libcrashpad_handler.so.meta rename to Android/lib/x86_64/libnative-lib.so.meta index 5c0b1560..b9f5b461 100644 --- a/Android/lib/arm64-v8a/libcrashpad_handler.so.meta +++ b/Android/lib/x86_64/libnative-lib.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9f822f0b9ecf6e14a82e3576ad816db3 +guid: b46d80933ef3f4f709ec1e5943584e02 PluginImporter: externalObjects: {} serializedVersion: 2 @@ -22,7 +22,7 @@ PluginImporter: second: enabled: 1 settings: - CPU: ARM64 + CPU: x86_64 - first: Editor: Editor second: @@ -31,4 +31,4 @@ PluginImporter: DefaultValueInitialized: true userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 44441eb8..5897cc1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Backtrace Unity Release Notes +## Version 3.13.0 + +Improvements +- Add 16KB page size support +- Add simulator targets support +- Update cocoa-lite library OOM handling + ## Version 3.12.2 Improvements diff --git a/Runtime/BacktraceClient.cs b/Runtime/BacktraceClient.cs index 68bf392d..5b29c6ae 100644 --- a/Runtime/BacktraceClient.cs +++ b/Runtime/BacktraceClient.cs @@ -24,7 +24,7 @@ namespace Backtrace.Unity /// public class BacktraceClient : MonoBehaviour, IBacktraceClient { - public const string VERSION = "3.12.2"; + public const string VERSION = "3.13.0"; internal const string DefaultBacktraceGameObjectName = "BacktraceClient"; public BacktraceConfiguration Configuration; diff --git a/Runtime/Native/Android/NativeClient.cs b/Runtime/Native/Android/NativeClient.cs index 08c0c7f2..c4b235d5 100644 --- a/Runtime/Native/Android/NativeClient.cs +++ b/Runtime/Native/Android/NativeClient.cs @@ -22,8 +22,6 @@ namespace Backtrace.Unity.Runtime.Native.Android internal sealed class NativeClient : NativeClientBase, INativeClient { private const string CallbackMethodName = "OnAnrDetected"; - [DllImport("backtrace-native")] - private static extern bool Initialize(IntPtr submissionUrl, IntPtr databasePath, IntPtr handlerPath, IntPtr keys, IntPtr values, IntPtr attachments, bool enableClientSideUnwinding, int unwindingMode); [DllImport("backtrace-native")] private static extern bool InitializeJavaCrashHandler(IntPtr submissionUrl, IntPtr databasePath, IntPtr classPath, IntPtr keys, IntPtr values, IntPtr attachments, IntPtr environmentVariables); @@ -86,11 +84,6 @@ private void SetDefaultAttributeMaps() // Unity-Android native interface path private const string _namespace = "backtraceio.unity"; - /// - /// unwinding mode - /// - private UnwindingMode UnwindingMode = UnwindingMode.LOCAL_DUMPWITHOUTCRASH; - /// /// Path to class responsible for detecting ANRs occurred by Java code. /// @@ -131,7 +124,6 @@ private void SetDefaultAttributeMaps() /// private AndroidJavaObject _unhandledExceptionWatcher; - private readonly bool _enableClientSideUnwinding = false; public string GameObjectName { get; internal set; } public NativeClient(BacktraceConfiguration configuration, BacktraceBreadcrumbs breadcrumbs, IDictionary clientAttributes, IEnumerable attachments, string gameObjectName) : base(configuration, breadcrumbs) { @@ -141,9 +133,7 @@ public NativeClient(BacktraceConfiguration configuration, BacktraceBreadcrumbs b { return; } -#if UNITY_2019_2_OR_NEWER - _enableClientSideUnwinding = _configuration.ClientSideUnwinding; -#endif + HandlerANR = _configuration.HandleANR; HandleNativeCrashes(clientAttributes, attachments); if (!configuration.ReportFilterType.HasFlag(Types.ReportFilterType.Hang)) @@ -246,8 +236,16 @@ private void HandleNativeCrashes(IDictionary backtraceAttributes Debug.LogWarning("Backtrace native integration status: Disabled NDK integration"); return; } + var databasePath = _configuration.CrashpadDatabasePath; - if (string.IsNullOrEmpty(databasePath) || !Directory.Exists(_configuration.GetFullDatabasePath())) + var fullDatabasePath = _configuration.GetFullDatabasePath(); + + if (string.IsNullOrEmpty(databasePath) || string.IsNullOrEmpty(fullDatabasePath)) + { + Debug.LogWarning("Backtrace native integration status: database path undefined"); + return; + } + if (!Directory.Exists(fullDatabasePath)) { Debug.LogWarning("Backtrace native integration status: database path doesn't exist"); return; @@ -261,6 +259,7 @@ private void HandleNativeCrashes(IDictionary backtraceAttributes int apiLevel; if (apiLevelString == null || !int.TryParse(apiLevelString, out apiLevel)) { + Debug.LogWarning("Backtrace native integration status: Cannot determine Android API level"); return; } @@ -275,25 +274,29 @@ private void HandleNativeCrashes(IDictionary backtraceAttributes var minidumpUrl = new BacktraceCredentials(_configuration.GetValidServerUrl()).GetMinidumpSubmissionUrl().ToString(); + // Resolve native library directory var libDirectory = GetNativeDirectoryPath(); if (string.IsNullOrEmpty(libDirectory) || !Directory.Exists(libDirectory)) { libDirectory = GuessNativeDirectoryPath(); } - const string crashpadHandlerName = "libcrashpad_handler.so"; - var crashpadHandlerPath = Path.Combine(libDirectory, crashpadHandlerName); - CaptureNativeCrashes = CanInitializeExecutableCrashHandler(libDirectory, crashpadHandlerPath) - ? InitializeExecutableCrashHandler(minidumpUrl, databasePath, crashpadHandlerPath, attachments) - : InitializeJavaCrashHandler(minidumpUrl, databasePath, backtraceAttributes["device.abi"], libDirectory, attachments); + if (string.IsNullOrEmpty(libDirectory) || !Directory.Exists(libDirectory)) + { + Debug.LogWarning("Backtrace native integration status: Cannot resolve native library directory"); + return; + } + CaptureNativeCrashes = InitializeJavaCrashHandler(minidumpUrl, databasePath, backtraceAttributes["device.abi"], libDirectory, attachments); + if (!CaptureNativeCrashes) { - Debug.LogWarning("Backtrace native integration status: Cannot initialize Crashpad client"); + Debug.LogWarning("Backtrace native integration status: Cannot initialize Java crash handler"); return; } + foreach (var attribute in backtraceAttributes) - { + { AddAttribute(AndroidJNI.NewStringUTF(attribute.Key), AndroidJNI.NewStringUTF(attribute.Value)); } @@ -305,25 +308,7 @@ private void HandleNativeCrashes(IDictionary backtraceAttributes // don't add attributes that can change over the time to initialization method attributes. Crashpad will prevent from // overriding them on game runtime. ANRs/OOMs methods can override error.type attribute, so we shouldn't pass error.type // attribute via attributes parameters. - AddAttribute( - AndroidJNI.NewStringUTF(ErrorTypeAttribute), - AndroidJNI.NewStringUTF(CrashType)); - } - - private bool CanInitializeExecutableCrashHandler(String nativeLibraryDirectory, String handlerPath) { - return Directory.Exists(nativeLibraryDirectory) && File.Exists(handlerPath); - } - - private bool InitializeExecutableCrashHandler(String minidumpUrl, String databasePath, String crashpadHandlerPath, IEnumerable attachments) { - return Initialize( - AndroidJNI.NewStringUTF(minidumpUrl), - AndroidJNI.NewStringUTF(databasePath), - AndroidJNI.NewStringUTF(crashpadHandlerPath), - AndroidJNIHelper.ConvertToJNIArray(new string[0]), - AndroidJNIHelper.ConvertToJNIArray(new string[0]), - AndroidJNIHelper.ConvertToJNIArray(attachments.ToArray()), - _enableClientSideUnwinding, - (int)UnwindingMode); + AddAttribute(AndroidJNI.NewStringUTF(ErrorTypeAttribute), AndroidJNI.NewStringUTF(CrashType)); } private bool InitializeJavaCrashHandler(String minidumpUrl, String databasePath, String deviceAbi, String nativeDirectory, IEnumerable attachments) { diff --git a/iOS/libBacktrace-Unity-Cocoa-arm64-sim.a b/iOS/libBacktrace-Unity-Cocoa-arm64-sim.a new file mode 100644 index 00000000..de095973 Binary files /dev/null and b/iOS/libBacktrace-Unity-Cocoa-arm64-sim.a differ diff --git a/Android/lib/armeabi-v7a/libcrashpad_handler.so.meta b/iOS/libBacktrace-Unity-Cocoa-arm64-sim.a.meta similarity index 70% rename from Android/lib/armeabi-v7a/libcrashpad_handler.so.meta rename to iOS/libBacktrace-Unity-Cocoa-arm64-sim.a.meta index 13e25fcb..1b1a0f56 100644 --- a/Android/lib/armeabi-v7a/libcrashpad_handler.so.meta +++ b/iOS/libBacktrace-Unity-Cocoa-arm64-sim.a.meta @@ -1,34 +1,31 @@ fileFormatVersion: 2 -guid: abbc9b9f2a6abb441a1741aae89ffa8c +guid: d373dc9cfc978435d8fe740a4cd402a0 PluginImporter: externalObjects: {} serializedVersion: 2 iconMap: {} executionOrder: {} defineConstraints: [] - isPreloaded: 1 + isPreloaded: 0 isOverridable: 0 isExplicitlyReferenced: 0 validateReferences: 1 platformData: - first: - '': Any + Editor: Editor second: enabled: 0 settings: - Exclude Android: 0 + DefaultValueInitialized: true - first: - Android: Android + iPhone: iOS second: enabled: 1 settings: - CPU: ARMv7 - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true + AddToEmbeddedBinaries: false + CPU: ARM64Simulator + CompileFlags: + FrameworkDependencies: userData: assetBundleName: assetBundleVariant: diff --git a/iOS/libBacktrace-Unity-Cocoa-arm64.a b/iOS/libBacktrace-Unity-Cocoa-arm64.a new file mode 100644 index 00000000..b28fc414 Binary files /dev/null and b/iOS/libBacktrace-Unity-Cocoa-arm64.a differ diff --git a/iOS/libBacktrace-Unity-Cocoa.a.meta b/iOS/libBacktrace-Unity-Cocoa-arm64.a.meta similarity index 90% rename from iOS/libBacktrace-Unity-Cocoa.a.meta rename to iOS/libBacktrace-Unity-Cocoa-arm64.a.meta index a3fccfc8..179fd16d 100644 --- a/iOS/libBacktrace-Unity-Cocoa.a.meta +++ b/iOS/libBacktrace-Unity-Cocoa-arm64.a.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 608fa6ed1ca8a4b8c9a1336ea238a7c2 +guid: 40496390f80974f379528ff88bb96a25 PluginImporter: externalObjects: {} serializedVersion: 2 @@ -23,7 +23,7 @@ PluginImporter: enabled: 1 settings: AddToEmbeddedBinaries: false - CPU: AnyCPU + CPU: ARM64 CompileFlags: FrameworkDependencies: userData: diff --git a/iOS/libBacktrace-Unity-Cocoa-x86_64-sim.a b/iOS/libBacktrace-Unity-Cocoa-x86_64-sim.a new file mode 100644 index 00000000..7bf1a422 Binary files /dev/null and b/iOS/libBacktrace-Unity-Cocoa-x86_64-sim.a differ diff --git a/iOS/libBacktrace-Unity-Cocoa-x86_64-sim.a.meta b/iOS/libBacktrace-Unity-Cocoa-x86_64-sim.a.meta new file mode 100644 index 00000000..a418eeff --- /dev/null +++ b/iOS/libBacktrace-Unity-Cocoa-x86_64-sim.a.meta @@ -0,0 +1,31 @@ +fileFormatVersion: 2 +guid: 6ce9243e2f49e40608f7601e358c03ee +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + CPU: X64 + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/iOS/libBacktrace-Unity-Cocoa.a b/iOS/libBacktrace-Unity-Cocoa.a deleted file mode 100644 index 7f539a63..00000000 Binary files a/iOS/libBacktrace-Unity-Cocoa.a and /dev/null differ diff --git a/package.json b/package.json index 3feb2052..14bfbad3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "io.backtrace.unity", "displayName": "Backtrace", - "version": "3.12.2", + "version": "3.13.0", "unity": "2017.1", "description": "Backtrace's integration with Unity games allows customers to capture and report handled and unhandled Unity exceptions to their Backtrace instance, instantly offering the ability to prioritize and debug software errors.", "keywords": [