static void BuildAssetBundleTable(AssetBundleEncryptor encryptor, string tableDirPath, List <string> tableFilePaths, BuildTarget buildTarget) { AssetBundleBuild[] buildArray = tableFilePaths .Select(tableFilePath => { string assetBundleName = GetTableAssetBundleName(tableDirPath, tableFilePath); var tableBuild = new AssetBundleBuild() { assetBundleName = assetBundleName, assetNames = new string[] { tableFilePath }, }; return(tableBuild); }) .ToArray(); BuildPipeline.BuildAssetBundles( encryptor.PlaneAssetBundleDirPath, buildArray, BuildAssetBundleOptions.ChunkBasedCompression, buildTarget); foreach (string tableFilePath in tableFilePaths) { string assetBundleName = GetTableAssetBundleName(tableDirPath, tableFilePath); encryptor.Encrypt(assetBundleName, true); } }
static void CreateTableByAssetEntryRecords( AssetBundleEncryptor encryptor, AssetBundleManifest manifest, string tableFilePath, BuildTarget buildTarget, IEnumerable <AssetEntryRecord> assetEntryRecords) { string planeAssetBundleDirPath = encryptor.PlaneAssetBundleDirPath; HashSet <string> checkedAssetBundleNames = new HashSet <string>( assetEntryRecords .Select(assetEntryRecord => assetEntryRecord.AssetBundleName) .Distinct()); Queue <string> checkingAssetBundleNameQueue = new Queue <string>(checkedAssetBundleNames); while (!checkingAssetBundleNameQueue.IsEmpty()) { string assetBundleName = checkingAssetBundleNameQueue.Dequeue(); foreach (string dependency in manifest.GetDirectDependencies(assetBundleName)) { if (checkedAssetBundleNames.Contains(dependency)) { continue; } checkedAssetBundleNames.Add(dependency); checkingAssetBundleNameQueue.Enqueue(dependency); } } IEnumerable <AssetBundleRecord> assetBundleRecords = checkedAssetBundleNames .Select(assetBundleName => { string crcFilePath = GetCrcFilePath(planeAssetBundleDirPath, assetBundleName); uint crc = 0; var isSucceeded = BuildPipeline.GetCRCForAssetBundle(crcFilePath, out crc); if (!isSucceeded) { Debug.LogError($"cannot get crc: AssetBundelName = {assetBundleName}"); } string encryptedAssetBundleFilePath = encryptor.Encrypt(assetBundleName, true); //string encryptedAssetBundleFilePath = encryptor.Encrypt(assetBundleName, false); System.IO.FileInfo fileInfo = new System.IO.FileInfo(encryptedAssetBundleFilePath); long fileSizeBytes = fileInfo.Length; return(new AssetBundleRecord( assetBundleName, manifest.GetDirectDependencies(assetBundleName), crc, fileSizeBytes)); }); DateTime current = DateTime.Now; long version = long.Parse(current.ToString("yyyyMMddHHmmss")); string platform = buildTarget.ToString(); var table = AssetBundleTable.Create(version, platform, assetBundleRecords, assetEntryRecords); string tableDirName = Path.GetDirectoryName(tableFilePath); if (!Directory.Exists(tableDirName)) { Directory.CreateDirectory(tableDirName); } //var json = JsonUtility.ToJson(table); //using (StreamWriter writer = new StreamWriter(outputPath + ".json")) //{ // writer.Write(json); //} AssetDatabase.CreateAsset(table, tableFilePath); }