internal MobileBuildReportBuildInfo(BuildSummary summary, IReadOnlyList <PackedAssets> packedAssets) { Platform = summary.platform; Options = summary.options; OutputPath = summary.outputPath; ProductName = Application.productName; BuildStartedAt = summary.buildStartedAt; BuildEndedAt = DateTime.UtcNow; TotalTime = BuildEndedAt - BuildStartedAt; AssetPacks = new MobileBuildReportAssetPack[packedAssets.Count]; for (var i = 0; i < packedAssets.Count; i++) { AssetPacks[i] = new MobileBuildReportAssetPack(packedAssets[i]); } }
private static void EstimateAssetSize(MobileBuildReportAssetPack assetPack, MobileBuildReportAssets mobileAssets, string artifactDir) { var temporaryZip = $"{Path.Combine(artifactDir, assetPack.ShortPath)}.zip"; using (var file = File.Open(Path.Combine(artifactDir, assetPack.ShortPath), FileMode.Open)) { using (var archive = ZipFile.Open(temporaryZip, ZipArchiveMode.Create)) { var overheadPart = new byte[assetPack.Overhead]; file.Read(overheadPart, 0, (int)assetPack.Overhead); var overheadPath = Path.Combine(artifactDir, "overhead"); File.WriteAllBytes(overheadPath, overheadPart); archive.CreateEntryFromFile(overheadPath, "overhead"); File.Delete(overheadPath); for (var i = 0; i < assetPack.PackInfos.Length; i++) { var part = new byte[assetPack.PackInfos[i].PackedSize]; file.Seek((long)assetPack.PackInfos[i].Offset, SeekOrigin.Begin); file.Read(part, 0, (int)assetPack.PackInfos[i].PackedSize); var partPath = Path.Combine(artifactDir, $"{i}"); File.WriteAllBytes(partPath, part); archive.CreateEntryFromFile(partPath, $"{i}"); File.Delete(partPath); } } using (var archive = ZipFile.OpenRead(temporaryZip)) { for (var i = 1; i < archive.Entries.Count; i++) { int.TryParse(archive.Entries[i].Name, out var index); mobileAssets.Contents[index] = new MobileBuildReportAssetInfo(assetPack.PackInfos[index]) { EstimatedSize = (ulong)archive.Entries[i].CompressedLength }; } } } }