/// <summary> /// Manage the ios dependecies based on the project settings. /// </summary> /// <param name="settings"> /// The <see cref="ARCoreExtensionsProjectSettings"/> used by current build. /// </param> public void ManageIOSDependencies(ARCoreExtensionsProjectSettings settings) { _enabledIOSTemplate.Clear(); List <IDependentModule> featureModules = DependentModulesManager.GetModules(); foreach (IDependentModule module in featureModules) { string iOSDependenciesTemplateFile = module.GetIOSDependenciesTemplateFileName(); if (!string.IsNullOrEmpty(iOSDependenciesTemplateFile)) { bool isModuleEnabled = module.IsEnabled( settings, UnityEditor.BuildTarget.iOS); if (isModuleEnabled) { Debug.LogFormat("ARCoreExtensions: Include {0} for {1}.", iOSDependenciesTemplateFile, module.GetType().Name); _enabledIOSTemplate.Add(iOSDependenciesTemplateFile); IOSSupportHelper.UpdateIOSPodDependencies( true, iOSDependenciesTemplateFile); } else { Debug.LogFormat("ARCoreExtensions: Exclude {0} for {1}.", iOSDependenciesTemplateFile, module.GetType().Name); IOSSupportHelper.UpdateIOSPodDependencies( false, iOSDependenciesTemplateFile); } } } }
/// <summary> /// Inject module proguard rules based on the project settings. /// </summary> /// <param name="settings">The <see cref="ARCoreExtensionsProjectSettings"/> used by /// current build.</param> public void InjectModuleProguardRules(ARCoreExtensionsProjectSettings settings) { bool needToEnableProguardInBuild = false; StringBuilder moduleProguardSnippets = new StringBuilder(); List <IDependentModule> featureModules = DependentModulesManager.GetModules(); foreach (IDependentModule module in featureModules) { if (module.IsEnabled(settings)) { string moduleProguardSnippet = module.GetProguardSnippet(settings); if (!string.IsNullOrEmpty(moduleProguardSnippet)) { needToEnableProguardInBuild = true; moduleProguardSnippets.AppendFormat("\n## {0} ##\n{1}\n", module.GetType().Name, moduleProguardSnippet); } } } if (needToEnableProguardInBuild) { string previousProguardRule = LoadPreviousProguardRule(); string userProguardFullPath = Path.Combine( Application.dataPath, _userProguardDirectory + _userProguardFile); string curModuleProguardRule = moduleProguardSnippets.ToString(); Directory.CreateDirectory( Path.Combine(Application.dataPath, _userProguardDirectory)); File.WriteAllText(userProguardFullPath, ReplaceModuleProguardRule(previousProguardRule, curModuleProguardRule)); } }
/// <summary> /// Manage the android dependecies based on the project settings. /// </summary> /// <param name="settings">The <see cref="ARCoreExtensionsProjectSettings"/> used by /// current build.</param> public void ManageAndroidDependencies(ARCoreExtensionsProjectSettings settings) { List <IDependentModule> featureModules = DependentModulesManager.GetModules(); string folderPath = AssetDatabase.GUIDToAssetPath(_buildResourceFolderGUID) + _dependenciesDirectory; Directory.CreateDirectory(folderPath); foreach (IDependentModule module in featureModules) { if (module.IsEnabled(settings, UnityEditor.BuildTarget.Android)) { string dependenciesSnippet = module.GetAndroidDependenciesSnippet(settings); if (!string.IsNullOrEmpty(dependenciesSnippet)) { string fileName = module.GetType().Name + _androidDependenciesFileSuffix; string fullPath = Path.Combine(folderPath, fileName); string finalSnippet = XDocument.Parse(string.Format( _androidDependenciesFormat, dependenciesSnippet)).ToString(); File.WriteAllText(fullPath, finalSnippet); Debug.LogFormat("Module {0} added Android library dependencies:\n{1}", module.GetType().Name, finalSnippet); AssetDatabase.Refresh(); AndroidDependenciesHelper.DoPlayServicesResolve(); } } } }
/// <summary> /// Manage the ios dependencies based on the project settings. /// </summary> /// <param name="settings"> /// The <see cref="ARCoreExtensionsProjectSettings"/> used by current build. /// </param> public void ManageIOSDependencies(ARCoreExtensionsProjectSettings settings) { _enabledIOSTemplate.Clear(); List <IDependentModule> featureModules = DependentModulesManager.GetModules(); foreach (IDependentModule module in featureModules) { string[] iOSDependenciesTemplates = module.GetIOSDependenciesTemplateFileNames(); if (iOSDependenciesTemplates != null && iOSDependenciesTemplates.Length > 0) { bool isModuleEnabled = module.IsEnabled( settings, UnityEditor.BuildTarget.iOS); foreach (string iOSDependenciesTemplateFile in iOSDependenciesTemplates) { if (!string.IsNullOrEmpty(iOSDependenciesTemplateFile)) { Debug.LogFormat("ARCoreExtensions: {0} {1} for {2}.", isModuleEnabled ? "Include" : "Exclude", iOSDependenciesTemplateFile, module.GetType().Name); IOSSupportHelper.UpdateIOSPodDependencies( isModuleEnabled, iOSDependenciesTemplateFile); if (isModuleEnabled) { _enabledIOSTemplate.Add(iOSDependenciesTemplateFile); } } } } } }
private static void CheckCompatibilityWithAllSessionConfigs( ARCoreExtensionsProjectSettings settings, Dictionary <ARCoreExtensionsConfig, string> sessionToSceneMap, UnityEditor.BuildTarget buildTarget) { List <IDependentModule> featureModules = DependentModulesManager.GetModules(); foreach (IDependentModule module in featureModules) { ModuleNecessity moduleNecessity = ModuleNecessity.NotRequired; foreach (var entry in sessionToSceneMap) { ARCoreExtensionsConfig sessionConfig = entry.Key; if (!module.IsCompatible(settings, sessionConfig, buildTarget)) { throw new BuildFailedException( string.Format( "{0} isn't compatible with the ARCoreExtensionsConfig in {1}.", module.GetType().Name, entry.Value)); } moduleNecessity = (ModuleNecessity)Math.Max( (int)moduleNecessity, (int)module.GetModuleNecessity(sessionConfig)); } if (moduleNecessity == ModuleNecessity.NotRequired && module.IsEnabled(settings, buildTarget)) { Debug.LogWarning(module.GetEnabledNotRequiredWarning(settings, buildTarget)); } } }
/// <summary> /// Callback before the build is started.</para> /// </summary> /// <param name="report">A report containing information about the build, /// such as its target platform and output path.</param> public void OnPreprocessBuild(BuildReport report) { UnityEditor.BuildTarget buildTarget = report.summary.platform; if (DependentModulesManager.GetModules().Count == 0) { return; } CheckCompatibilityWithAllSessionConfigs( ARCoreExtensionsProjectSettings.Instance, AndroidDependenciesHelper.GetAllSessionConfigs(), buildTarget); }
private void SetEnabledModules(ARCoreExtensionsProjectSettings settings) { List <string> modulesEnabled = new List <string>(); foreach (IDependentModule module in DependentModulesManager.GetModules()) { if (module.IsEnabled(settings, UnityEditor.BuildTarget.Android)) { modulesEnabled.Add(module.GetType().Name); } } RuntimeConfig.SetEnabledModules(modulesEnabled); }
private void ManageAndroidDependencies(ARCoreExtensionsProjectSettings settings) { List <IDependentModule> featureModules = DependentModulesManager.GetModules(); foreach (IDependentModule module in featureModules) { if (!module.IsEnabled(settings, UnityEditor.BuildTarget.Android)) { continue; } JarArtifact[] dependencies = module.GetAndroidDependencies(settings); if (dependencies != null && dependencies.Length > 0) { ExternalDependencyResolverHelper.RegisterAndroidDependencies(dependencies); } } }
/// <summary> /// Generate the AndroidManifest XDocument based on the ARCoreProjectSettings. /// This function would be used in Tests. /// </summary> /// <param name="manifestDoc">Original AndroidManifest XML Document.</param> /// <param name="settings">ARCore Extensions Project Settings.</param> /// <returns>The XDocument of the final AndroidManifest.</returns> public static XDocument GenerateCustomizedAndroidManifest( XDocument manifestDoc, ARCoreExtensionsProjectSettings settings) { XElement mergedRoot = manifestDoc.Root; List <IDependentModule> featureModules = DependentModulesManager.GetModules(); foreach (IDependentModule module in featureModules) { if (module.IsEnabled(settings, UnityEditor.BuildTarget.Android)) { XDocument xDocument = AndroidManifestMerger.TransferToXDocument( module.GetAndroidManifestSnippet(settings)); mergedRoot = AndroidManifestMerger.MergeXElement( mergedRoot, xDocument.Root); } } return(new XDocument(mergedRoot)); }