我使用Eclipse + ADT插件编写Android内容。对于VCS,我使用SVN。
我想要完成的任务:让我的程序在“关于”屏幕中显示它所构建的SVN修订版号。显然,这更好的是自动的。我们不能假设程序在运行时将具有网络访问权限,因此必须在编译时知道此信息。
今天我一直在研究这个话题,看起来这个看似常见的场景实际上并不那么容易,或者我错过了一些东西。让我们看看:
1)第一种方法:编写一个'预提交'SVN脚本,在每次提交时,将更新一个名为'revision'的小文件,该文件将位于我的项目的根目录中。然后编写一个打开此文件的函数,读取修订版号并将其放在“关于”屏幕中将是微不足道的。
这不太适用,因为文件将在服务器端更新。想象一下这个场景:我看看转速。 3708,修改,提交,预提交在其中创建带有'3709'的'revision'。我建立 - 我的本地'修订'仍包含'3708'。不好。
2)我听到(Getting SVN revision number into a program automatically)SVN具有这个聪明的功能,它能够替换文件中的各种魔术字符串,其中一个是“修订版”,如果在所有文件上设置了适当的SVN元数据在SVN控制下的项目中。
由于用户'Smashery'在上面的链接中提到的问题,这不再有用了 - 也就是说,SVN只会替换上次提交期间更改的文件中的'Revision'魔术字符串。
3)编写一个'pre-build'Eclipse脚本,让它运行'svnversion / path / to / your / project'并将其输出保存在/ path /到/ your / project / revision中。
这不再适用 - 我的意思是,我尝试过编写这样的脚本实际上非常简单。如果我在一台计算机上工作,它对我有用 - 但不幸的是我在两台计算机上工作,一台Linux机器在家里工作,另一台Windows机器在工作。我每天都在不断切换机器(白天是Windows,晚上是家里的Linux)。
这里的问题在于Eclipse:只要你添加一个'pre-build'脚本,它就会在你的项目文件夹(.externalToolBuilders)中创建一个新的隐藏目录,其中包含绝对路径。脚本运行(显然)。在我的两台机器(Linux和Windows)上,此路径不能相同。为了让事情自动化,我需要将其检查到SVN,并且一旦我这样做,事情将只在我的一台机器上工作,除非我每天都手动纠正路径!
有什么想法吗?