com.amanotes.gdk 0.2.70 → 0.2.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/Editor/Extra/GDKCIBuildCommand.cs +55 -0
  3. package/Extra/AmaGDKInstaller.unitypackage +0 -0
  4. package/Extra/CheckDiskSpace.unitypackage +0 -0
  5. package/Extra/Consent.unitypackage +0 -0
  6. package/Extra/ForceUpdate.unitypackage +0 -0
  7. package/Extra/LegacyGDKUpdateHelper.unitypackage +0 -0
  8. package/Extra/PostProcessor.unitypackage +0 -0
  9. package/Packages/AmaGDKConfig.unitypackage +0 -0
  10. package/Packages/AmaGDKExample.unitypackage +0 -0
  11. package/Packages/AmaGDKTest.unitypackage +0 -0
  12. package/Packages/AppsFlyerAdapter.PurchaseConnector.unitypackage +0 -0
  13. package/Packages/AppsFlyerAdapter.unitypackage +0 -0
  14. package/Packages/FirebaseAnalyticsAdapter.unitypackage +0 -0
  15. package/Packages/FirebaseRemoteConfigAdapter.unitypackage +0 -0
  16. package/Packages/IronSourceAdapter.unitypackage +0 -0
  17. package/Packages/MaxAdNetworkAdapter.unitypackage +0 -0
  18. package/Packages/RevenueCatAdapter.unitypackage +0 -0
  19. package/Packages/SqliteAnalyticsAdapter.unitypackage +0 -0
  20. package/Runtime/Ad/AdModuleConfig.cs +19 -4
  21. package/Runtime/Ad/AmaGDK.Ads.cs +19 -7
  22. package/Runtime/AmaGDK.Analytics.cs +63 -48
  23. package/Runtime/AmaGDK.Device.cs +2 -2
  24. package/Runtime/AmaGDK.RemoteConfig.cs +1 -1
  25. package/Runtime/AmaGDK.cs +2 -2
  26. package/Runtime/AnalyticQualityAsset.cs +5 -4
  27. package/Runtime/AudioToolkit/Plugins/AudioDeviceDetector.cs +2 -2
  28. package/Runtime/Core/GDKPool.cs +337 -55
  29. package/Runtime/Fps/AmaFPS.Utils.cs +1 -1
  30. package/Runtime/GDKAudio/GDKAudio.cs +305 -0
  31. package/Runtime/GDKAudio/GDKAudio.cs.meta +3 -0
  32. package/Runtime/GDKAudio/Plugins/Android/atensor-release.aar +0 -0
  33. package/Runtime/GDKAudio/Plugins/Android/atensor-release.aar.meta +32 -0
  34. package/Runtime/GDKAudio/Plugins/Android.meta +3 -0
  35. package/Runtime/GDKAudio/Plugins/iOS/libatensor.a +0 -0
  36. package/Runtime/GDKAudio/Plugins/iOS/libatensor.a.meta +68 -0
  37. package/Runtime/GDKAudio/Plugins/iOS/libcrypto.a +0 -0
  38. package/Runtime/GDKAudio/Plugins/iOS/libcrypto.a.meta +68 -0
  39. package/Runtime/GDKAudio/Plugins/iOS/libssl.a +0 -0
  40. package/Runtime/GDKAudio/Plugins/iOS/libssl.a.meta +68 -0
  41. package/Runtime/GDKAudio/Plugins/iOS.meta +8 -0
  42. package/Runtime/GDKAudio/Plugins/macOS/libatensor.dylib +0 -0
  43. package/Runtime/GDKAudio/Plugins/macOS/libatensor.dylib.meta +81 -0
  44. package/Runtime/GDKAudio/Plugins/macOS.meta +8 -0
  45. package/Runtime/GDKAudio/Plugins.meta +8 -0
  46. package/Runtime/GDKAudio.meta +3 -0
  47. package/Runtime/Internal/AmaGDK.Utils.cs +3 -3
  48. package/Runtime/Internal/ForceQuitMonitor.cs +7 -2
  49. package/Runtime/Utils/GDKUtils.cs +34 -3
  50. package/package.json +1 -1
@@ -0,0 +1,305 @@
1
+ #if UNITY_ANDROID || UNITY_IOS
2
+ #define UNITY_MOBILE
3
+ #endif
4
+
5
+ // GDKAudio is supported in the following environments:
6
+ // 1. On iOS devices.
7
+ // 2. On Android devices (excluding the Unity Editor).
8
+ // 3. In the Unity Editor running on macOS with Apple Silicon (M1, M2, etc.).
9
+ #if UNITY_2021_1_OR_NEWER && ((UNITY_MOBILE && !UNITY_EDITOR) || (UNITY_MOBILE && UNITY_EDITOR_OSX))
10
+ using System;
11
+ using System.Runtime.InteropServices;
12
+ using Amanotes.Core.Internal;
13
+ using UnityEngine;
14
+
15
+ namespace Amanotes.Core
16
+ {
17
+ public static class AudioSourceExtensions
18
+ {
19
+ public static GDKAudio ConvertToGDKAudio(this AudioSource legacyAudioSource)
20
+ {
21
+ GDKAudio.EnsureDecompressOnLoad(legacyAudioSource.clip);
22
+ if (legacyAudioSource.gameObject.GetComponents<AudioSource>().Length > 1)
23
+ {
24
+ Utils.ThrowExceptionIfEditor("GDKAudio only allows the GameObject to contain a single AudioSource component.");
25
+ }
26
+ var instance = legacyAudioSource.gameObject.AddComponent<GDKAudio>();
27
+ if (legacyAudioSource.clip != null)
28
+ {
29
+ instance.LoadAudioInternal(legacyAudioSource.clip);
30
+ }
31
+ return instance;
32
+ }
33
+
34
+ public static GDKAudio GetGDKAudio(this AudioSource legacyAudioSource)
35
+ {
36
+ return legacyAudioSource.GetComponent<GDKAudio>();
37
+ }
38
+ }
39
+
40
+ public partial class GDKAudio // public API
41
+ {
42
+ public float speed { get; set; } = 1f;
43
+ public bool loop { get; set; } = true;
44
+ public bool isPlaying { get; private set; } = false;
45
+
46
+ public GDKAudio SetSpeed(float speed)
47
+ {
48
+ this.speed = speed;
49
+ return this;
50
+ }
51
+
52
+ public GDKAudio SetLoop(bool loop)
53
+ {
54
+ this.loop = loop;
55
+ return this;
56
+ }
57
+
58
+ public GDKAudio Pause()
59
+ {
60
+ isPlaying = false;
61
+ audioSource.Pause();
62
+ return this;
63
+ }
64
+
65
+ public GDKAudio Resume()
66
+ {
67
+ return Play();
68
+ }
69
+
70
+ public GDKAudio Stop()
71
+ {
72
+ isPlaying = false;
73
+ audioSource.Stop();
74
+ return this;
75
+ }
76
+
77
+ public GDKAudio Play()
78
+ {
79
+ isPlaying = true;
80
+ audioSource.loop = loop;
81
+ audioSource.Play();
82
+ return this;
83
+ }
84
+
85
+ public GDKAudio PlayAudio(AudioClip audioClip)
86
+ {
87
+ LoadAudio(audioClip);
88
+ Play();
89
+ return this;
90
+ }
91
+
92
+ public GDKAudio LoadAudio(AudioClip audioClip)
93
+ {
94
+ EnsureDecompressOnLoad(audioClip);
95
+ try
96
+ {
97
+ LoadAudioInternal(audioClip);
98
+ }
99
+ catch (Exception ex)
100
+ {
101
+ Utils.ThrowExceptionIfEditor(ex.ToString());
102
+ }
103
+ return this;
104
+ }
105
+ }
106
+
107
+ partial class GDKAudio: MonoBehaviour
108
+ {
109
+ private AudioSource audioSource;
110
+
111
+ private void Awake()
112
+ {
113
+ if (audioSource != null) return;
114
+ audioSource = GetComponent<AudioSource>();
115
+ if (audioSource == null)
116
+ {
117
+ audioSource = gameObject.AddComponent<AudioSource>();
118
+ }
119
+ if (gameObject.GetComponents<AudioSource>().Length > 1)
120
+ {
121
+ Utils.ThrowExceptionIfEditor("GDKAudio only allows the GameObject to contain a single AudioSource component.");
122
+ }
123
+
124
+ if (gameObject.GetComponents<GDKAudio>().Length > 1)
125
+ {
126
+ Utils.ThrowExceptionIfEditor("GDKAudio only allows the GameObject to contain a single GDKAudio component.");
127
+ }
128
+ }
129
+
130
+ private void OnDestroy()
131
+ {
132
+ if (!initialized) return;
133
+ FreeMemory(ptrL, ptrR);
134
+ }
135
+
136
+ internal static void EnsureDecompressOnLoad(AudioClip clip)
137
+ {
138
+ if (clip != null && clip.loadType != AudioClipLoadType.DecompressOnLoad)
139
+ {
140
+ Utils.ThrowExceptionIfEditor("GDKAudio only supports AudioClips with Load Type set to Decompress On Load.");
141
+ }
142
+ }
143
+ }
144
+
145
+ partial class GDKAudio
146
+ {
147
+ private float[] audioData;
148
+
149
+ private int numSamples;
150
+ private int numChannel;
151
+
152
+ private int fs = 44100;
153
+ private int bufferLength;
154
+ private int numBuffer;
155
+
156
+ private int nFFT = 2048;
157
+ private int hop = 512;
158
+ private int cntSave = 0;
159
+ private int numFrame = 1;
160
+ private int idxFrame = 0;
161
+ private float[] hopFrame;
162
+ private float [] dataOut;
163
+ private float [] dataOutSave;
164
+ private Vector3 positionOld;
165
+
166
+ #if UNITY_IOS && !UNITY_EDITOR
167
+ private const string LIBRARY_NAME ="__Internal";
168
+ #else
169
+ private const string LIBRARY_NAME ="atensor";
170
+ #endif
171
+
172
+ [DllImport(LIBRARY_NAME, EntryPoint = "ptrResampleMulti")]
173
+ private static extern int ResampleMulti(float [] inData, ref IntPtr outData, float fs, float targetFs, int numSrcSamples, int numChannels, ref IntPtr ptrL);
174
+
175
+ [DllImport(LIBRARY_NAME, EntryPoint = "ptrTSM_Init")]
176
+ private static extern void TSM_Init(float [] firstFrame, float scale, float fs, int numChannel, int nFft, int hop, ref IntPtr ptrL, ref IntPtr ptrR);
177
+
178
+ [DllImport(LIBRARY_NAME, EntryPoint = "ptrTSM_Processing")]
179
+ private static extern int TSM_Processing(float[] inData, float[] outData, float scale, IntPtr ptrL, IntPtr ptrR);
180
+
181
+ [DllImport(LIBRARY_NAME, EntryPoint = "ptrFreeMemory")]
182
+ private static extern void FreeMemory(IntPtr ptrL, IntPtr ptrR);
183
+
184
+
185
+ private IntPtr ptrL;
186
+ private IntPtr ptrR;
187
+ private bool initialized = false;
188
+
189
+ internal void LoadAudioInternal(AudioClip audioClip)
190
+ {
191
+ AudioSettings.GetDSPBufferSize(out bufferLength, out numBuffer);
192
+ hop = Math.Min(bufferLength, 512);
193
+ numSamples = audioClip.samples;
194
+ numChannel = audioClip.channels;
195
+ fs = audioClip.frequency;
196
+
197
+ audioData = new float[numSamples * numChannel];
198
+ audioClip.GetData(audioData, 0);
199
+
200
+ // Do resampling
201
+ if (fs != AudioSettings.outputSampleRate)
202
+ {
203
+ var audioDataResample = new IntPtr();
204
+ numSamples = ResampleMulti(
205
+ audioData,
206
+ ref audioDataResample,
207
+ fs,
208
+ AudioSettings.outputSampleRate,
209
+ numSamples * numChannel,
210
+ numChannel,
211
+ ref ptrL
212
+ ) / numChannel;
213
+ audioData = new float[numSamples*numChannel];
214
+ Marshal.Copy(audioDataResample, audioData, 0, numSamples*numChannel);
215
+ Logging.LogWarning(
216
+ "Warning: The input AudioClip has a sample rate of " + fs + " Hz," +
217
+ " which does not match AudioSetting sample rate of " + AudioSettings.outputSampleRate + " Hz." +
218
+ " GDKAudio will resample the audio to match AudioSetting with high memory usage." +
219
+ " We recommend resampling the audio to 44100 Hz before using it in Unity."
220
+ );
221
+ }
222
+
223
+ Logging.Log("[AAA]numSamples: " + numSamples);
224
+ Logging.Log("[AAA]numChannel:" + numChannel);
225
+ Logging.Log("[AAA]bufferLength:" + bufferLength);
226
+ Logging.Log("[AAA]numBuffer:" + numBuffer);
227
+
228
+ nFFT = 2048;
229
+ // hop = 512;
230
+
231
+ numFrame = (numSamples - nFFT) / hop;
232
+ // Initialize
233
+ Logging.Log("[AAA]TSM_Init");
234
+ TSM_Init(audioData, speed, fs, numChannel, nFFT, hop, ref ptrL, ref ptrR);
235
+ initialized = true;
236
+ hopFrame = new float[hop*numChannel];
237
+ dataOut = new float[4*numChannel*hop]; // minimum of scale is 0.25
238
+ dataOutSave = new float[numChannel*bufferLength];
239
+
240
+ audioSource.clip = audioClip;
241
+ audioSource.loop = loop;
242
+ Logging.Log("[AAA]AudioSettings.outputSampleRate (later): " + AudioSettings.outputSampleRate);
243
+ }
244
+
245
+ private void OnAudioFilterRead(float[] data, int channels)
246
+ {
247
+ if (!isPlaying) return;
248
+
249
+ if (idxFrame >= numFrame)
250
+ {
251
+ if (!loop)
252
+ {
253
+ for (int i = 0; i < bufferLength * numChannel; i++)
254
+ {
255
+ data[i] = 0;
256
+ }
257
+ return;
258
+ }
259
+ idxFrame = 0;
260
+ Logging.Log("[AAA] Loop");
261
+ }
262
+
263
+
264
+ int lengthOut = 0;
265
+ int lengthOutOld = 0;
266
+ int idxSave=0;
267
+
268
+ for (; idxSave < cntSave; idxSave++)
269
+ {
270
+ data[idxSave] = dataOutSave[idxSave];
271
+ }
272
+
273
+ cntSave = 0;
274
+
275
+ while (lengthOut < bufferLength*numChannel-idxSave)
276
+ {
277
+ if (idxFrame >= numFrame) break;
278
+
279
+ Array.Copy(
280
+ audioData,
281
+ nFFT*numChannel + idxFrame*hop*numChannel,
282
+ hopFrame,
283
+ 0,
284
+ hop*numChannel);
285
+ int temp = TSM_Processing(hopFrame, dataOut, speed, ptrL, ptrR);
286
+ lengthOut = lengthOutOld + temp;
287
+ for (int i = lengthOutOld; i < lengthOut; i++)
288
+ {
289
+ if ( i < bufferLength*numChannel - idxSave)
290
+ {
291
+ data[i + idxSave] = dataOut[i - lengthOutOld];
292
+ }
293
+ else
294
+ {
295
+ dataOutSave[i + idxSave - bufferLength*numChannel] = dataOut[i - lengthOutOld];
296
+ cntSave++;
297
+ }
298
+ }
299
+ lengthOutOld = lengthOut;
300
+ idxFrame++;
301
+ }
302
+ }
303
+ }
304
+ }
305
+ #endif
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: de1ec8deba094859a05d6b17e8553ebb
3
+ timeCreated: 1720582209
@@ -0,0 +1,32 @@
1
+ fileFormatVersion: 2
2
+ guid: cf93944c80cc4155b610a203aa4692ed
3
+ PluginImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ iconMap: {}
7
+ executionOrder: {}
8
+ defineConstraints: []
9
+ isPreloaded: 0
10
+ isOverridable: 0
11
+ isExplicitlyReferenced: 0
12
+ validateReferences: 1
13
+ platformData:
14
+ - first:
15
+ Android: Android
16
+ second:
17
+ enabled: 1
18
+ settings: {}
19
+ - first:
20
+ Any:
21
+ second:
22
+ enabled: 0
23
+ settings: {}
24
+ - first:
25
+ Editor: Editor
26
+ second:
27
+ enabled: 0
28
+ settings:
29
+ DefaultValueInitialized: true
30
+ userData:
31
+ assetBundleName:
32
+ assetBundleVariant:
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: 7fd13b2a80734c929794ac5ee5272562
3
+ timeCreated: 1720582106
@@ -0,0 +1,68 @@
1
+ fileFormatVersion: 2
2
+ guid: a3c265b10d9ed4cf6990662d42f4ac14
3
+ PluginImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ iconMap: {}
7
+ executionOrder: {}
8
+ defineConstraints: []
9
+ isPreloaded: 0
10
+ isOverridable: 0
11
+ isExplicitlyReferenced: 0
12
+ validateReferences: 1
13
+ platformData:
14
+ - first:
15
+ : Any
16
+ second:
17
+ enabled: 0
18
+ settings:
19
+ Exclude Android: 1
20
+ Exclude Editor: 1
21
+ Exclude Linux64: 1
22
+ Exclude OSXUniversal: 1
23
+ Exclude Win: 1
24
+ Exclude Win64: 1
25
+ Exclude iOS: 0
26
+ - first:
27
+ Any:
28
+ second:
29
+ enabled: 0
30
+ settings: {}
31
+ - first:
32
+ Editor: Editor
33
+ second:
34
+ enabled: 0
35
+ settings:
36
+ DefaultValueInitialized: true
37
+ - first:
38
+ Standalone: Linux64
39
+ second:
40
+ enabled: 0
41
+ settings:
42
+ CPU: None
43
+ - first:
44
+ Standalone: OSXUniversal
45
+ second:
46
+ enabled: 0
47
+ settings:
48
+ CPU: None
49
+ - first:
50
+ Standalone: Win
51
+ second:
52
+ enabled: 0
53
+ settings:
54
+ CPU: None
55
+ - first:
56
+ Standalone: Win64
57
+ second:
58
+ enabled: 0
59
+ settings:
60
+ CPU: None
61
+ - first:
62
+ iPhone: iOS
63
+ second:
64
+ enabled: 1
65
+ settings: {}
66
+ userData:
67
+ assetBundleName:
68
+ assetBundleVariant:
@@ -0,0 +1,68 @@
1
+ fileFormatVersion: 2
2
+ guid: 20db9b1a24fce4666ac9ad3c1dcc0a56
3
+ PluginImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ iconMap: {}
7
+ executionOrder: {}
8
+ defineConstraints: []
9
+ isPreloaded: 0
10
+ isOverridable: 0
11
+ isExplicitlyReferenced: 0
12
+ validateReferences: 1
13
+ platformData:
14
+ - first:
15
+ : Any
16
+ second:
17
+ enabled: 0
18
+ settings:
19
+ Exclude Android: 1
20
+ Exclude Editor: 1
21
+ Exclude Linux64: 1
22
+ Exclude OSXUniversal: 1
23
+ Exclude Win: 1
24
+ Exclude Win64: 1
25
+ Exclude iOS: 0
26
+ - first:
27
+ Any:
28
+ second:
29
+ enabled: 0
30
+ settings: {}
31
+ - first:
32
+ Editor: Editor
33
+ second:
34
+ enabled: 0
35
+ settings:
36
+ DefaultValueInitialized: true
37
+ - first:
38
+ Standalone: Linux64
39
+ second:
40
+ enabled: 0
41
+ settings:
42
+ CPU: None
43
+ - first:
44
+ Standalone: OSXUniversal
45
+ second:
46
+ enabled: 0
47
+ settings:
48
+ CPU: None
49
+ - first:
50
+ Standalone: Win
51
+ second:
52
+ enabled: 0
53
+ settings:
54
+ CPU: None
55
+ - first:
56
+ Standalone: Win64
57
+ second:
58
+ enabled: 0
59
+ settings:
60
+ CPU: None
61
+ - first:
62
+ iPhone: iOS
63
+ second:
64
+ enabled: 1
65
+ settings: {}
66
+ userData:
67
+ assetBundleName:
68
+ assetBundleVariant:
@@ -0,0 +1,68 @@
1
+ fileFormatVersion: 2
2
+ guid: cf1102bbccb0843359bf4476f80c3e0e
3
+ PluginImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ iconMap: {}
7
+ executionOrder: {}
8
+ defineConstraints: []
9
+ isPreloaded: 0
10
+ isOverridable: 0
11
+ isExplicitlyReferenced: 0
12
+ validateReferences: 1
13
+ platformData:
14
+ - first:
15
+ : Any
16
+ second:
17
+ enabled: 0
18
+ settings:
19
+ Exclude Android: 1
20
+ Exclude Editor: 1
21
+ Exclude Linux64: 1
22
+ Exclude OSXUniversal: 1
23
+ Exclude Win: 1
24
+ Exclude Win64: 1
25
+ Exclude iOS: 0
26
+ - first:
27
+ Any:
28
+ second:
29
+ enabled: 0
30
+ settings: {}
31
+ - first:
32
+ Editor: Editor
33
+ second:
34
+ enabled: 0
35
+ settings:
36
+ DefaultValueInitialized: true
37
+ - first:
38
+ Standalone: Linux64
39
+ second:
40
+ enabled: 0
41
+ settings:
42
+ CPU: None
43
+ - first:
44
+ Standalone: OSXUniversal
45
+ second:
46
+ enabled: 0
47
+ settings:
48
+ CPU: None
49
+ - first:
50
+ Standalone: Win
51
+ second:
52
+ enabled: 0
53
+ settings:
54
+ CPU: None
55
+ - first:
56
+ Standalone: Win64
57
+ second:
58
+ enabled: 0
59
+ settings:
60
+ CPU: None
61
+ - first:
62
+ iPhone: iOS
63
+ second:
64
+ enabled: 1
65
+ settings: {}
66
+ userData:
67
+ assetBundleName:
68
+ assetBundleVariant:
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 4dd306252a3244a37808570f9979dfbd
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -0,0 +1,81 @@
1
+ fileFormatVersion: 2
2
+ guid: 54e2ffe994320474caf407a6b71ff766
3
+ PluginImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ iconMap: {}
7
+ executionOrder: {}
8
+ defineConstraints: []
9
+ isPreloaded: 0
10
+ isOverridable: 0
11
+ isExplicitlyReferenced: 0
12
+ validateReferences: 1
13
+ platformData:
14
+ - first:
15
+ : Any
16
+ second:
17
+ enabled: 0
18
+ settings:
19
+ Exclude Android: 1
20
+ Exclude Editor: 0
21
+ Exclude Linux64: 0
22
+ Exclude OSXUniversal: 0
23
+ Exclude Win: 0
24
+ Exclude Win64: 0
25
+ Exclude iOS: 1
26
+ - first:
27
+ Android: Android
28
+ second:
29
+ enabled: 0
30
+ settings:
31
+ AndroidSharedLibraryType: Executable
32
+ CPU: ARMv7
33
+ - first:
34
+ Any:
35
+ second:
36
+ enabled: 0
37
+ settings: {}
38
+ - first:
39
+ Editor: Editor
40
+ second:
41
+ enabled: 1
42
+ settings:
43
+ CPU: AnyCPU
44
+ DefaultValueInitialized: true
45
+ OS: AnyOS
46
+ - first:
47
+ Standalone: Linux64
48
+ second:
49
+ enabled: 1
50
+ settings:
51
+ CPU: None
52
+ - first:
53
+ Standalone: OSXUniversal
54
+ second:
55
+ enabled: 1
56
+ settings:
57
+ CPU: None
58
+ - first:
59
+ Standalone: Win
60
+ second:
61
+ enabled: 1
62
+ settings:
63
+ CPU: None
64
+ - first:
65
+ Standalone: Win64
66
+ second:
67
+ enabled: 1
68
+ settings:
69
+ CPU: None
70
+ - first:
71
+ iPhone: iOS
72
+ second:
73
+ enabled: 0
74
+ settings:
75
+ AddToEmbeddedBinaries: false
76
+ CPU: AnyCPU
77
+ CompileFlags:
78
+ FrameworkDependencies:
79
+ userData:
80
+ assetBundleName:
81
+ assetBundleVariant:
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 3fd1ceb1d6c8d43379e780718f6f38f5
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 556517e393f149748cf9890d5d436491
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: 19f1c4b4ece54d438bb89c63b87846bf
3
+ timeCreated: 1720582066
@@ -268,7 +268,7 @@ namespace Amanotes.Core.Internal
268
268
 
269
269
  public static void ClearCacheData()
270
270
  {
271
- var sb = GDKPool.GetStringBuilder();
271
+ var sb = GDKPool.TakeStringBuilder();
272
272
  sb.AppendLine("[AmaGDK] All cached data & stats cleared");
273
273
 
274
274
  if (!Directory.Exists(basePath))
@@ -411,7 +411,7 @@ namespace Amanotes.Core.Internal
411
411
  if (inputDict == null) return "{}";
412
412
 
413
413
  Profiler.BeginSample("AmaGDK.JsonUtils.DictionaryToJson()");
414
- var jsonSb = GDKPool.GetStringBuilder(8);
414
+ var jsonSb = GDKPool.TakeStringBuilder(8192);
415
415
  jsonSb.Append("{");
416
416
  bool isFirstElement = true;
417
417
 
@@ -431,7 +431,7 @@ namespace Amanotes.Core.Internal
431
431
  }
432
432
 
433
433
  jsonSb.AppendFormat("{0}{1}", format ? "\n" : "", "}");
434
- var result = GDKPool.ReturnString(jsonSb);
434
+ var result = GDKPool.ReturnAndStringify(jsonSb);
435
435
  Profiler.EndSample();
436
436
 
437
437
  return result;