/// <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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 8
0
        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);
                }
            }
        }
Exemplo n.º 9
0
        /// <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));
        }