Exemple #1
0
        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
                        };
                    }
                }
            }
        }