Это не относится к version.code
части ваших вопросов, но вот как я выполняю это в нашем проекте:
Я создал инструмент C #, который собирает информацию, которую я хочу включить в нашу страницу about. Этот инструмент вызывается на первом шаге в списке строителей нашего проекта (Properties->Builders)
, где вы можете указать аргументы инструмента и командной строки. В нашем случае информация о сборщике выглядит следующим образом:
Расположение: C:\Projects\Mobile\Tools\AndroidBuildVersioner\AndroidBuildVersioner\bin\Release\AndroidBuildVersioner.exe
Аргументы:
-f C:\Projects\Mobile\Android\ProjectName\res\values\build_version.xml
Утилита проверяет ревизию проекта и связанные библиотеки в моем случае с использованием библиотеки Perforce, а затем записывает эту информацию в доступный для записи файл build_version.xml
. Этот файл остается доступным для записи в рабочей области, так как это автоматически сгенерированный файл. Вывод - это просто набор строковых ресурсов, так что информация о проекте легко доступна для проекта. Я также изначально писал в манифест, но, конечно, легко столкнуться с конфликтами, когда инструменты сборки изменяют файлы, которые вы также должны изменить вручную.
вот несколько примеров, если это поможет:
build_version.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="build_revision">9</string>
<string name="build_date">7/25/2011 9:48:13 AM</string>
<string name="build_machine">JMARTIN-PC</string>
<string name="build_user">jmartin</string>
</resources>
AndroidBuildVersioner.exe - этот упрощенный блок просто увеличивает локальный номер сборки и записывает его и некоторую дополнительную информацию env обратно в XML-файл strings.
private static void updateBuildFileInfo(String file)
{
String fileContents = ReadFile(file);
String buildRevision = "0";
String newFileContents = @"<?xml version=""1.0"" encoding=""utf-8""?>"
+ Environment.NewLine + "<resources>" + Environment.NewLine ;
//find the build version in the contents of the file so it can be incremented
Match m = Regex.Match(fileContents, @"<string name=""build_revision"">(.*)</string>");
if (m.Success)
buildRevision = m.Groups[1].Value;
int intBuildRevision = 0;
try
{
intBuildRevision = Convert.ToInt32(buildRevision);
}
catch (FormatException e)
{
Console.WriteLine("Input string is not a sequence of digits.");
}
catch (OverflowException e)
{
Console.WriteLine("The number cannot fit in an Int32.");
}
finally
{
++intBuildRevision;
newFileContents += '\t' + @"<string name=""build_revision"">" + intBuildRevision + "</string>" + Environment.NewLine;
newFileContents += '\t' + @"<string name=""build_date"">" + DateTime.Now.ToString() + "</string>" + Environment.NewLine;
newFileContents += '\t' + @"<string name=""build_machine"">" + Environment.MachineName + "</string>" + Environment.NewLine;
newFileContents += '\t' + @"<string name=""build_user"">" + Environment.UserName + "</string>" + Environment.NewLine;
newFileContents += "</resources>";
}
writeOutput(file, newFileContents);
}