Esempio n. 1
0
        public static RawFileManifest BuildRawFiles(PackageBuildInfo buildInfo, RawFileBuild[] builds)
        {
            var manifest = new RawFileManifest();

            // foreach (var build in builds)
            // {
            //     var entry = new RawFileManifestEntry()
            //     {
            //         name = build.name,
            //     };
            //     manifest.xxx.Add(entry);
            //
            // }
            return(manifest);
        }
Esempio n. 2
0
        private static void Cleanup(PackageBuildInfo buildInfo,
                                    AssetBundleManifest assetBundleManifest,
                                    ZipArchiveManifest zipArchiveManifest,
                                    FileListManifest fileListManifest,
                                    RawFileManifest rawFileManifest,
                                    EmbeddedManifest embeddedManifest)
        {
            foreach (var dir in Directory.GetDirectories(buildInfo.packagePath))
            {
                CleanupRecursively(dir, "Assets", fileListManifest, false);
            }

            foreach (var file in Directory.GetFiles(buildInfo.packagePath))
            {
                var match    = false;
                var fi       = new FileInfo(file);
                var filename = fi.Name;

                if (builtinFiles.Contains(filename))
                {
                    match = true;
                }

                if (!match && buildInfo.filelist.Contains(filename))
                {
                    match = true;
                }

                if (!match && filename == Manifest.EmbeddedManifestFileName && embeddedManifest.bundles.Count > 0)
                {
                    match = true;
                }

                if (!match)
                {
                    Debug.LogWarning("delete unused file: " + filename);
                    try
                    {
                        fi.Delete();
                    }
                    catch (Exception exception)
                    {
                        Debug.LogError(exception);
                    }
                }
            }
        }
Esempio n. 3
0
        // 生成打包
        private static void _BuildPackages(PackageBuildInfo packageBuildInfo)
        {
            Debug.Log($"building bundles...");
            Scan(packageBuildInfo.data);

            var assetBundleBuilds = GenerateAssetBundleBuilds(packageBuildInfo);
            var zipArchiveBuilds  = GenerateZipArchiveBuilds(packageBuildInfo);
            var fileListBuilds    = GenerateFileListBuilds(packageBuildInfo);
            var rawFileBuilds     = GenerateRawFileBuilds(packageBuildInfo);

            AssetBundleManifest assetBundleManifest = null;
            ZipArchiveManifest  zipArchiveManifest  = null;
            FileListManifest    fileListManifest    = null;
            RawFileManifest     rawFileManifest     = null;

            if (assetBundleBuilds.Length != 0)
            {
                assetBundleManifest = BuildAssetBundles(packageBuildInfo, assetBundleBuilds);
            }

            if (zipArchiveBuilds.Count != 0)
            {
                zipArchiveManifest = BuildZipArchives(packageBuildInfo, zipArchiveBuilds);
            }

            if (fileListBuilds.Length != 0)
            {
                fileListManifest = BuildFileLists(packageBuildInfo, fileListBuilds);
            }

            if (rawFileBuilds.Length != 0)
            {
                rawFileManifest = BuildRawFiles(packageBuildInfo, rawFileBuilds);
            }

            var embeddedManifest = BuildFinalPackages(packageBuildInfo, assetBundleManifest, zipArchiveManifest,
                                                      fileListManifest, rawFileManifest);

            Cleanup(packageBuildInfo, assetBundleManifest, zipArchiveManifest, fileListManifest, rawFileManifest,
                    embeddedManifest);
            packageBuildInfo.DoAnalyze();
            packageBuildInfo.data.build++;
            packageBuildInfo.data.MarkAsDirty();
            Debug.Log(
                $"{packageBuildInfo.packagePath}: build bundles finished. {assetBundleBuilds.Length} assetbundles. {zipArchiveBuilds.Count} zip archives. {fileListBuilds.Length} file lists. {embeddedManifest.bundles.Count} bundles to streamingassets.");
        }
Esempio n. 4
0
        // 生成最终包文件, 生成最终清单
        public static EmbeddedManifest BuildFinalPackages(PackageBuildInfo buildInfo,
                                                          AssetBundleManifest assetBundleManifest,
                                                          ZipArchiveManifest zipArchiveManifest,
                                                          FileListManifest fileListManifest,
                                                          RawFileManifest rawFileManifest)
        {
            var data     = buildInfo.data;
            var manifest = new Manifest();

            manifest.chunkSize = data.chunkSize;
            manifest.build     = buildInfo.data.build;
            manifest.timestamp = (int)(DateTime.Now - new DateTime(1970, 1, 1)).TotalSeconds;
            manifest.tag       = buildInfo.sharedBuildInfo.tag;
            var embeddedManifest = new EmbeddedManifest();

            if (assetBundleManifest != null)
            {
                var assetBundles = assetBundleManifest.GetAllAssetBundles();
                foreach (var assetBundle in assetBundles)
                {
                    BundleBuilderData.BundleInfo  bundleInfo;
                    BundleBuilderData.BundleSplit bundleSplit;
                    BundleBuilderData.BundleSlice bundleSlice;
                    if (TryGetBundleSlice(data, assetBundle, out bundleInfo, out bundleSplit, out bundleSlice))
                    {
                        // Debug.Log(bundleInfo.name);
                        var fileEntry = EncryptFileEntry(data, buildInfo, bundleSplit.encrypted,
                                                         bundleSlice.name, buildInfo.assetBundlePath);
                        var bundle = new Manifest.BundleInfo();

                        bundle.comment   = bundleInfo.note;
                        bundle.tag       = bundleInfo.tag;
                        bundle.encrypted = bundleSplit.encrypted;
                        bundle.rsize     = fileEntry.rsize;
                        bundle.type      = Manifest.BundleType.AssetBundle;
                        bundle.name      = fileEntry.name;
                        bundle.checksum  = fileEntry.checksum;
                        bundle.size      = fileEntry.size;
                        bundle.load      = bundleInfo.load;
                        bundle.priority  = GetPriority(buildInfo, bundleInfo, bundleSlice);
                        if (bundleSlice.lastBuildSize != fileEntry.size)
                        {
                            bundleSlice.lastBuildSize = fileEntry.size;
                            data.MarkAsDirty();
                        }

                        for (int assetIndex = 0, assetCount = bundleSlice.GetAssetCount(); assetIndex < assetCount; assetIndex++)
                        {
                            var assetPath = bundleSlice.GetAssetPath(assetIndex);
                            bundle.assets.Add(assetPath);
                        }

                        bundle.dependencies = assetBundleManifest.GetAllDependencies(assetBundle);
                        buildInfo.CreateEntry(bundle);
                        manifest.bundles.Add(bundle);
                        if (bundleSlice.streamingAssets || data.streamingAssetsAnyway)
                        {
                            embeddedManifest.bundles.Add(fileEntry);
                        }
                    }
                }
            }

            if (zipArchiveManifest != null)
            {
                foreach (var zipArchive in zipArchiveManifest.archives)
                {
                    BundleBuilderData.BundleInfo  bundleInfo;
                    BundleBuilderData.BundleSplit bundleSplit;
                    BundleBuilderData.BundleSlice bundleSlice;
                    if (TryGetBundleSlice(data, zipArchive.name, out bundleInfo, out bundleSplit, out bundleSlice))
                    {
                        var fileEntry = EncryptFileEntry(data, buildInfo, bundleSplit.encrypted,
                                                         zipArchive.name, buildInfo.zipArchivePath);
                        var bundle = new Manifest.BundleInfo();

                        bundle.comment   = bundleInfo.note;
                        bundle.tag       = bundleInfo.tag;
                        bundle.encrypted = bundleSplit.encrypted;
                        bundle.rsize     = fileEntry.rsize;
                        bundle.type      = Manifest.BundleType.ZipArchive;
                        bundle.name      = fileEntry.name;
                        bundle.checksum  = fileEntry.checksum;
                        bundle.size      = fileEntry.size;
                        bundle.load      = bundleInfo.load;
                        bundle.priority  = GetPriority(buildInfo, bundleInfo, bundleSlice);
                        foreach (var assetPath in zipArchive.assets)
                        {
                            bundle.assets.Add(assetPath);
                        }

                        manifest.bundles.Add(bundle);
                        if (bundleSlice.streamingAssets || data.streamingAssetsAnyway)
                        {
                            embeddedManifest.bundles.Add(fileEntry);
                        }
                    }
                }
            }

            if (fileListManifest != null)
            {
                foreach (var fileList in fileListManifest.fileLists)
                {
                    var bundleInfo   = GetBundleInfo(data, fileList.name);
                    var fileListPath = Path.Combine(buildInfo.packagePath, fileList.name);
                    var fileEntry    = GenFileEntry(fileList.name, fileListPath);
                    var bundle       = new Manifest.BundleInfo();

                    bundle.comment  = bundleInfo.note;
                    bundle.tag      = bundleInfo.tag;
                    bundle.type     = Manifest.BundleType.FileList;
                    bundle.name     = fileList.name;
                    bundle.checksum = fileEntry.checksum;
                    bundle.size     = fileEntry.size;
                    bundle.load     = bundleInfo.load;
                    bundle.priority = bundleInfo.priority;

                    buildInfo.filelist.Add(fileList.name);
                    foreach (var bundleTargets in bundleInfo.targets)
                    {
                        var targetPath = bundleTargets.targetPath;
                        bundle.assets.Add(targetPath);
                    }

                    manifest.bundles.Add(bundle);
                    if (bundleInfo.streamingAssets || data.streamingAssetsAnyway)
                    {
                        embeddedManifest.bundles.Add(fileEntry);
                    }
                }
            }

            WriteManifest(buildInfo, manifest);
            WriteEmbeddedManifest(buildInfo, embeddedManifest);
            if (buildInfo.buildTarget == EditorUserBuildSettings.activeBuildTarget)
            {
                BuildStreamingAssets(buildInfo, fileListManifest);
            }

            return(embeddedManifest);
        }