gpt4 book ai didi

android - 如何在构建期间将版本设置为 android list

转载 作者:行者123 更新时间:2023-11-30 04:45:09 29 4
gpt4 key购买 nike

有什么方法可以在构建期间为 android list 中的 versionCode 生成值?问题在于,由于 AndroidManifest.xml 是版本化的,因此不能就地修改它。我更希望在使用 Eclipse 构建时也可以设置它。

我想根据来自版本控制系统的信息生成它。不可能使用关键字扩展,因为它需要从整个树的信息中导出,而不仅仅是 AndrdoidManifest.xml 文件。

我可以很轻松地处理 versionName。由于它可以引用资源,并且 res/values 中可以有任意数量的 .xml 文件,因此我可以使用适当的值编写一个非版本化的 res/values/version.xml。但它看起来不像相同的技巧应该适用于 versionCode(如果我尝试它,它会直接安装,但我还没有通过市场设置测试安装的环境)。

更新: main_rules.xml 定义了使用 ant 构建的规则,使用了 version.code 属性(property),所以在那里是可能的。问题仍然是使用 Eclipse 进行构建。

最佳答案

这没有解决您问题的 version.code 部分,但这是我在我们的项目中完成它的方式:

我已经创建了一个 C# 工具来收集我想包含在我们的关于页面中的信息。此工具在我们项目的构建器列表 (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。该文件在工作区中保持可写状态,因为它是一个自动生成的文件。输出只是一组字符串资源,因此项目的 about Activity 可以轻松获得这些信息。我最初也写 list ,但是当构建工具修改您也必须手动修改的文件时,当然很容易遇到冲突。

如果有帮助,这里有几个例子:

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 - 这个简化的 block 只是增加一个本地版本号并将它和一些额外的环境信息写回字符串 xml 文件。

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

关于android - 如何在构建期间将版本设置为 android list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5178079/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com