示例#1
0
        private string CreateAssetPackWithManifest(
            DirectoryInfo rootDirectory, string assetPackName, AssetPackDeliveryMode deliveryMode)
        {
            var androidManifestFilePath    = Path.Combine(rootDirectory.FullName, AndroidManifestFileName);
            var assetPackManifestXDocument = CreateAssetPackManifestXDocument(assetPackName, deliveryMode);

            assetPackManifestXDocument.Save(androidManifestFilePath);

            var source           = rootDirectory.CreateSubdirectory("manifest");
            var aaptErrorMessage = _androidAssetPackagingTool.Link(androidManifestFilePath, source.FullName);

            if (aaptErrorMessage != null)
            {
                return(DisplayBuildError("AAPT2 link " + assetPackName, aaptErrorMessage));
            }

            // aapt2 link creates an empty resource table even though asset packs have no resources.
            // Bundletool fails if the asset pack has a resources.pb. Only retain the AndroidManifest.xml file.
            var destination = GetDestinationSubdirectory(rootDirectory);

            foreach (var sourceFileInfo in source.GetFiles())
            {
                if (sourceFileInfo.Name == AndroidManifestFileName)
                {
                    var destinationSubdirectory = destination.CreateSubdirectory(ManifestDirectoryName);
                    sourceFileInfo.MoveTo(Path.Combine(destinationSubdirectory.FullName, sourceFileInfo.Name));
                }
            }

            return(null);
        }
        private bool CreateAssetPackModule(
            string assetPackName, AssetPack assetPack, DirectoryInfo assetPackDirectoryInfo)
        {
            var androidManifestXmlPath     = Path.Combine(assetPackDirectoryInfo.FullName, AndroidManifestFileName);
            var assetPackManifestXDocument =
                CreateAssetPackManifestXDocument(assetPackName, assetPack.DeliveryMode);

            assetPackManifestXDocument.Save(androidManifestXmlPath);

            // Use aapt2 link to make a bundletool compatible module
            var sourceDirectoryInfo = assetPackDirectoryInfo.CreateSubdirectory("source");
            var aaptErrorMessage    =
                _androidAssetPackagingTool.Link(androidManifestXmlPath, sourceDirectoryInfo.FullName);

            if (aaptErrorMessage != null)
            {
                DisplayBuildError("aapt2 link " + assetPackName, aaptErrorMessage);
                return(false);
            }

            var destinationDirectoryInfo = GetDestinationSubdirectory(assetPackDirectoryInfo);

            ArrangeFilesForAssetPack(sourceDirectoryInfo, destinationDirectoryInfo);

            // Copy all assets to an "assets" subdirectory in the destination folder.
            var destinationAssetsDirectory = destinationDirectoryInfo.CreateSubdirectory(AssetsDirectoryName);

            if (assetPack.AssetBundleFilePath != null)
            {
                // Copy AssetBundle files into the module's "assets" folder, inside an "assetpack" folder.
                var outputDirectory = destinationAssetsDirectory.CreateSubdirectory(AssetPackFolder).FullName;
                File.Copy(assetPack.AssetBundleFilePath, Path.Combine(outputDirectory, assetPackName));
            }
            else if (assetPack.CompressionFormatToAssetBundleFilePath != null)
            {
                // Copy the AssetBundle files into the module's "assets" folder, inside an "assetpack#tcf_xxx" folder.
                foreach (var compressionAndFilePath in assetPack.CompressionFormatToAssetBundleFilePath)
                {
                    var targetedAssetsFolderName =
                        AssetPackFolder + TextureTargetingTools.GetTargetingSuffix(compressionAndFilePath.Key);
                    var outputDirectory = destinationAssetsDirectory.CreateSubdirectory(targetedAssetsFolderName);
                    File.Copy(compressionAndFilePath.Value, Path.Combine(outputDirectory.FullName, assetPackName));
                }
            }
            else if (assetPack.AssetPackDirectoryPath != null)
            {
                var sourceAssetsDirectory = new DirectoryInfo(assetPack.AssetPackDirectoryPath);
                if (!sourceAssetsDirectory.Exists)
                {
                    // TODO: check this earlier.
                    DisplayBuildError("Missing directory for " + assetPackName, sourceAssetsDirectory.FullName);
                    return(false);
                }

                // Copy asset pack files into the module's "assets" folder, inside an "assetpack" folder.
                var outputDirectory = destinationAssetsDirectory.CreateSubdirectory(AssetPackFolder);
                CopyFilesRecursively(sourceAssetsDirectory, outputDirectory);
            }
            else
            {
                throw new InvalidOperationException("Missing asset pack files: " + assetPackName);
            }

            return(true);
        }