【问题标题】:auto increment android versionCode and VersionName using perl使用 perl 自动增加 android versionCode 和 VersionName
【发布时间】:2017-10-11 06:38:37
【问题描述】:

我有一个带有 android versionCode:12 和 versionName:1.0.1.2 的 android manifest.xml 文件,我正在尝试使用 perl 自动增加 versionCode 和 VersionName 以及使用 perl 脚本的主要、次要、补丁和构建逻辑。这是我的清单文件。自动递增后 versionName 将像 1.0.1.3 和 versionCode 像 13。

<?xml version="1.0" encoding="utf-8"?><manifest android:versionCode="12" android:versionName="1.0.1.2" package="com.test.prat" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

我还有 strings.xml 文件来更新 strings.xml 文件中的 versionName,自动递增 versionName 也应该在 strings.xml 文件中更新。这是我的 strings.xml 文件

<!-- This file is automatically generated, please do not update -->

<!-- decibel abbreviation -->
<string name="txt_abbreviation_decibel_label">dB</string> 
<string name="txt_android_app_version">1.0.1.2</string>
</resources>

在自动增量之后,我想将 versionName 设置为环境变量,以便在 svn commit 阶段使用,例如'svn commit “update versionName 1.0.1.2”'

请指教。

【问题讨论】:

  • perl -pe 's/(1.0.1.2)|versionCode="\K(12)/($1)?"1.0.1.3":13/eg; ' xml.txt
  • 在我看来这是硬代码,我想自动增加 versionCode 和 versionName。并将 versionName 设置为环境变量。请问你能有一个解决方案吗?

标签: android perl


【解决方案1】:

你需要在你的机器上安装Version::Next模块,安装后你可以试试下面的一个内胆

perl -MVersion::Next=next_version -pe's/(1\.0\.1\.2)|versionCode="\K(12)/
    $1 ? next_version($1) : next_version($2) /eg' file.xml

【讨论】:

  • 我累了,但没有运气,当我运行脚本时,versionCode 和 versionName 应该自动递增,例如,如果我运行一次它递增到 1.0.1.3,如果我再次运行 perl 脚本它将自动增加 1.0.1.4。请问有没有写Perl脚本的最好方法。
  • @krishna 你将不得不自己做一些工作。这个答案为您提供了基础工作,但初始版本是硬编码的。我们在这里回答问题,而不是为您工作。如果您希望它与动态版本一起使用,请更改它。
  • 好的,谢谢,但我对 perl 来说是全新的。想动态改变它。谢谢。
  • 当参数只能是一个值时,使用next_version 是愚蠢的。
【解决方案2】:

您没有指定您使用的 XML 解析器,所以我将假设 XML::LibXML。

use strict;
use warnings qw( all );

use Version::Next qw( next_version );
use XML::LibXML   qw( );

use constant ANDROID_NS => 'http://schemas.android.com/apk/res/android';

my $qfn = $ARGV[0];

my $doc = XML::LibXML->load_xml( location => $qfn );
my $manifest_node = $doc->documentElement();

for my $version_node (
   $manifest_node->getAttributeNodeNS(ANDROID_NS, 'versionName'),
   $manifest_node->getAttributeNodeNS(ANDROID_NS, 'versionCode'),
) {
   my $version = $version_node->getValue();
   $version = next_version($version);
   $version_node->setValue($version);
}

$doc->toFile($qfn);

【讨论】:

  • 谢谢,我正在使用 manifest.xml 文件来增加 versionCode 和 versionName。我想我需要阅读清单文件,对吗? ' .
  • ' 'schemas.android.com/apk/res/android">
  • 什么? . . . . .
  • 我的意思是,我如何从你的脚本中读取 manifest.xml 文件,我的意思是我如何解析我的 xml 文件
  • 很抱歉再次问您,我很困惑,例如在其他语言中我可以在您的代码中解析 xml 文件 'dom1 = parse("AndroidManifest.xml")' 它将如何读取和获取manifest.xml 文件中的 versionCode 和 versionName。
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 2013-07-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2015-02-07
  • 2018-04-30
  • 2021-12-31
相关资源
最近更新 更多