chunk 1: core gameplay scripts scenes runtime assets
This commit is contained in:
86
Assets/Editor/AddressablePreBuildCheck.cs
Normal file
86
Assets/Editor/AddressablePreBuildCheck.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using UnityEngine;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
/// <summary>
|
||||
/// Pre-build check to ensure Addressables bundles are built and up-to-date
|
||||
/// before creating an Android build. Prevents "Invalid serialized file version" errors.
|
||||
/// </summary>
|
||||
public class AddressablePreBuildCheck : IPreprocessBuildWithReport
|
||||
{
|
||||
public int callbackOrder => -100; // Run early in the build process
|
||||
|
||||
public void OnPreprocessBuild(BuildReport report)
|
||||
{
|
||||
if (report.summary.platform != BuildTarget.Android)
|
||||
return;
|
||||
|
||||
CheckAddressablesBundles();
|
||||
}
|
||||
|
||||
private void CheckAddressablesBundles()
|
||||
{
|
||||
string bundlePath = "ServerData/Android";
|
||||
string fullBundlePath = Path.Combine(Application.dataPath, "..", bundlePath);
|
||||
|
||||
// Check if bundles directory exists and has content
|
||||
if (!Directory.Exists(fullBundlePath))
|
||||
{
|
||||
LogWarningAndPromptBuild("Addressables bundle directory not found!");
|
||||
return;
|
||||
}
|
||||
|
||||
var bundles = Directory.GetFiles(fullBundlePath, "*.bundle");
|
||||
|
||||
if (bundles.Length == 0)
|
||||
{
|
||||
LogWarningAndPromptBuild("No Addressables bundles found!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Check bundle age - warn if older than 1 day
|
||||
var oldestBundle = bundles
|
||||
.Select(f => new FileInfo(f))
|
||||
.OrderBy(f => f.LastWriteTime)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (oldestBundle != null)
|
||||
{
|
||||
var age = System.DateTime.Now - oldestBundle.LastWriteTime;
|
||||
|
||||
if (age.TotalHours > 24)
|
||||
{
|
||||
Debug.LogWarning($"⚠️ [Addressables Check] Bundles are {age.TotalHours:F1} hours old.");
|
||||
Debug.LogWarning($" Oldest bundle: {Path.GetFileName(oldestBundle.FullName)}");
|
||||
Debug.LogWarning($" Last modified: {oldestBundle.LastWriteTime}");
|
||||
Debug.LogWarning(" Consider rebuilding Addressables to ensure version compatibility.");
|
||||
Debug.LogWarning(" Go to: Window > Asset Management > Addressables > Groups > Build > New Build");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"✓ [Addressables Check] Bundles are recent ({age.TotalMinutes:F0} minutes old)");
|
||||
}
|
||||
}
|
||||
|
||||
// Check catalog files
|
||||
var catalogs = Directory.GetFiles(fullBundlePath, "catalog_*.bin");
|
||||
if (catalogs.Length == 0)
|
||||
{
|
||||
Debug.LogWarning("⚠️ [Addressables Check] No catalog files found! Addressables may not load properly.");
|
||||
}
|
||||
}
|
||||
|
||||
private void LogWarningAndPromptBuild(string message)
|
||||
{
|
||||
Debug.LogWarning($"⚠️ [Addressables Check] {message}");
|
||||
Debug.LogWarning(" Addressables content must be built before building the Android app.");
|
||||
Debug.LogWarning(" Go to: Window > Asset Management > Addressables > Groups > Build > New Build");
|
||||
Debug.LogWarning(" Or the app will fail to initialize with 'Invalid serialized file version' error!");
|
||||
|
||||
// Optionally stop the build - uncomment if you want to enforce this
|
||||
// throw new BuildFailedException("Addressables bundles not found. Please build Addressables first.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user