in Sharpmake.Generators/VisualStudio/Androidproj.cs [139:257]
private void GenerateImpl(
GenerationContext context,
List<string> generatedFiles,
List<string> skipFiles)
{
GenerateConfOptions(context);
var fileGenerator = new XmlFileGenerator();
// xml begin header
string toolsVersion = context.DevelopmentEnvironmentsRange.MinDevEnv.GetVisualProjectToolsVersionString();
using (fileGenerator.Declare("toolsVersion", toolsVersion))
fileGenerator.Write(Template.Project.ProjectBegin);
VsProjCommon.WriteCustomProperties(context.Project.CustomProperties, fileGenerator);
VsProjCommon.WriteProjectConfigurationsDescription(context.ProjectConfigurations, fileGenerator);
// xml end header
string androidTargetsPath = Options.GetConfOption<Options.Android.General.AndroidTargetsPath>(context.ProjectConfigurations, rootpath: context.ProjectDirectoryCapitalized);
var firstConf = context.ProjectConfigurations.First();
_androidBuildType = Options.GetOptionValue("androidBuildType", context.ProjectConfigurationOptions.Values, FileGeneratorUtilities.RemoveLineTag);
using (fileGenerator.Declare("androidBuildType", _androidBuildType))
using (fileGenerator.Declare("projectName", firstConf.ProjectName))
using (fileGenerator.Declare("guid", firstConf.ProjectGuid))
using (fileGenerator.Declare("toolsVersion", toolsVersion))
using (fileGenerator.Declare("androidTargetsPath", Util.EnsureTrailingSeparator(androidTargetsPath)))
{
fileGenerator.Write(Template.Project.ProjectDescription);
}
fileGenerator.Write(VsProjCommon.Template.PropertyGroupEnd);
foreach (var platform in context.PresentPlatforms.Values)
platform.GeneratePlatformSpecificProjectDescription(context, fileGenerator);
fileGenerator.Write(Template.Project.ImportAndroidDefaultProps);
foreach (var platform in context.PresentPlatforms.Values)
platform.GeneratePostDefaultPropsImport(context, fileGenerator);
// configuration general
foreach (Project.Configuration conf in context.ProjectConfigurations)
{
context.Configuration = conf;
using (fileGenerator.Declare("platformName", Util.GetToolchainPlatformString(conf.Platform, conf.Project, conf.Target)))
using (fileGenerator.Declare("conf", conf))
using (fileGenerator.Declare("options", context.ProjectConfigurationOptions[conf]))
{
fileGenerator.Write(Template.Project.ProjectConfigurationsGeneral);
}
}
// .props files
fileGenerator.Write(Template.Project.ProjectAfterConfigurationsGeneral);
VsProjCommon.WriteProjectCustomPropsFiles(context.Project.CustomPropsFiles, context.ProjectDirectoryCapitalized, fileGenerator);
VsProjCommon.WriteConfigurationsCustomPropsFiles(context.ProjectConfigurations, context.ProjectDirectoryCapitalized, fileGenerator);
fileGenerator.Write(Template.Project.ProjectAfterImportedProps);
string androidPackageDirectory = context.AndroidPackageProject.AntBuildRootDirectory;
// configuration ItemDefinitionGroup
foreach (Project.Configuration conf in context.ProjectConfigurations)
{
context.Configuration = conf;
using (fileGenerator.Declare("platformName", Util.GetToolchainPlatformString(conf.Platform, conf.Project, conf.Target)))
using (fileGenerator.Declare("conf", conf))
using (fileGenerator.Declare("options", context.ProjectConfigurationOptions[conf]))
using (fileGenerator.Declare("androidPackageDirectory", androidPackageDirectory))
{
fileGenerator.Write(Template.Project.ProjectConfigurationBeginItemDefinition);
{
if (!_isGradleBuild)
fileGenerator.Write(Template.Project.AntPackage);
}
fileGenerator.Write(Template.Project.ProjectConfigurationEndItemDefinition);
}
}
if (_isGradleBuild)
{
using (fileGenerator.Declare("gradlePlugin", context.AndroidPackageProject.GradlePlugin))
using (fileGenerator.Declare("gradleVersion", context.AndroidPackageProject.GradleVersion))
{
fileGenerator.Write(VsProjCommon.Template.ItemDefinitionGroupBegin);
fileGenerator.Write(Template.Project.GradlePackage);
fileGenerator.Write(VsProjCommon.Template.ItemDefinitionGroupEnd);
}
}
GenerateFilesSection(context, fileGenerator);
// .targets
fileGenerator.Write(Template.Project.ProjectTargets);
GenerateProjectReferences(context, fileGenerator);
// Environment variables
var environmentVariables = context.ProjectConfigurations.Select(conf => conf.Platform).Distinct().SelectMany(platform => context.PresentPlatforms[platform].GetEnvironmentVariables(context));
VsProjCommon.WriteEnvironmentVariables(environmentVariables, fileGenerator);
fileGenerator.Write(Template.Project.ProjectEnd);
// remove all line that contain RemoveLineTag
fileGenerator.RemoveTaggedLines();
FileInfo projectFileInfo = new FileInfo(context.ProjectPath + ProjectExtension);
if (context.Builder.Context.WriteGeneratedFile(context.Project.GetType(), projectFileInfo, fileGenerator))
generatedFiles.Add(projectFileInfo.FullName);
else
skipFiles.Add(projectFileInfo.FullName);
}