配置Android项目 - 版本名称和代码
Nisweay
8年前
<p>开发人员通常给android versionName&versionCode使用一些硬编码值。</p> <p><img src="https://simg.open-open.com/show/efabd706e9a20c7140090b59946acfd6.png"></p> <p>这种方法有几个缺点:</p> <ul> <li>你永远不知道哪个提交代表一个特定的版本。</li> <li>每当你增加versionCode和更改versionName,你必须修改build.gradle文件。</li> </ul> <p style="text-align: center;">如果你使用git作为源代码控制系统,它也可以帮助你生成android versionName&versionCode。常见的做法是使用git标签来指示新版本的发布。 <img src="https://simg.open-open.com/show/d8b15d4e24ddcb025e4122e12fdab9a2.png"></p> <h3>Version Name</h3> <p>对于versionName,我们可以使用git describe命令。</p> <p>a.该命令查找从提交开始可访问的最近的标记。</p> <p>b.如果标记指向提交,则只显示标记。</p> <p>c.否则,它将标记名称与标记对象顶部的附加提交数以及最近提交的缩写对象名称作为后缀。</p> <p>Example (a-b)</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/03de23ecf15e0f7758d45b0f53537ebe.png"></p> <ol> <li>使用tag1.0标记特定提交</li> <li>签出此提交</li> <li>调用git describe -tags</li> <li>输出:1.0</li> </ol> <p>正如你看到的,如果你使用一些标签在一个HEAD提交上调用git describe,它会输出这个标签。</p> <p>Example (a-c)</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/deac29cb4cbc56504f145a6bb45923e1.png"></p> <ol> <li>标记tag为1.0的提交</li> <li>再添加两个提交</li> <li>调用git describe -tags</li> <li>输出: <em>1.0-2-gdca226a</em></li> </ol> <p style="text-align: center;"><img src="https://simg.open-open.com/show/201745bb497d417016a0c9f80ccd2f14.png"></p> <p>使用git提交哈希“1.0-2-gdca226a”,我们可以很容易地找出从哪个特定的提交构建。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/bf776161fdae98f65ec34c494cce90ba.png"></p> <h3>Version Code</h3> <p>对于versionCode,我们可以使用标签的总数。因为每个git标签指示一些版本,下一版本的versionCode将总是大于previous。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/4f025cd129b1f473e961988d6d51da8f.png"></p> <p>在上面的示例中,我们有3个标签。这个值将用于我们的versionCode。</p> <p>但是我们不会为每个中间版本创建一个git标签,因此对于dev build我们可以使用HEAD提交的时间戳。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/8ce14e1c5ba4740b9a89c74b2a6e82de.png"></p> <p>在上面的示例中,HEAD提交的时间戳等于1484407970(自UNIX纪元1970年1月1日00:00:00 UTC以来的秒数)。这个值将用于我们的versionCode。如果你想将它转换为人类可读的日期使用currentmillis.com网站。在我们的情况下,它是Sat 1月14日2017 15:32:50 UTC。</p> <h3><em>Groovy</em> way to use <em>git</em></h3> <p>要使用git我建议使用一个称为grgit的库。创建具有以下内容的script-git-version.gradle文件:</p> <p><img src="https://simg.open-open.com/show/f8667f14241d20bc0957c7bcf756af89.png"></p> <p>将其应用于您的build.gradle文件:</p> <p><img src="https://simg.open-open.com/show/197274f4eec855c135e8dc1bf9533dad.png"></p> <p>要检查version name 和 code是否正确生成调用gradle任务./gradlew printVersion它给出类似的输出:</p> <p><img src="https://simg.open-open.com/show/c13574fddfcac916f53d3390d7d6a4e8.png"></p> <p>最后在build.gradle文件中使用gitVersionName,gitVersionCode和gitVersionCodeTime变量。</p> <p><img src="https://simg.open-open.com/show/91f29c83ee961dafd825b6af2a0301ad.png"></p> <p>运行项目并验证应用版本。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/f56dafe3a728b79996ae4f60b7432c36.png"></p> <p>这种方法的好处:</p> <ul> <li>不需要修改build.gradle文件 - versionCode和versionName是自动生成的。</li> <li>你可以很容易地找出从哪个提交生成。</li> </ul> <p>注:你可以尝试其他的方式来标记版本名:包括分支名称,时间戳等。</p> <p> </p> <p> </p> <p>来自:http://mafei.me/2017/03/22/配置Android项目 - 版本名称和代码/</p> <p> </p>