使用perl自动增加android versionCode和VersionName

时间:2017-10-11 06:38:37

标签: android perl

我有一个带有android versionCode:12和versionName:1.0.1.2的android manifest.xml文件,我正在尝试使用perl脚本使用perl和major,minor,patch和build逻辑自动增加versionCode和VersionName。这是我的清单文件。自动增量后,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提交阶段使用例如'svn commit“update versionName 1.0.1.2”'

请告知。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您没有指定使用哪个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);