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); }