2012-12-12 97 views
1

我已经能够在游戏开始之前通过脚本文件自动更改我的versionCode作为androidmanifest.xml中的内部版本号用于当前的git commit number 。但由于某种原因,我不想使用versionCode作为我的游戏内部版本号。我想使用除versionCode和VersionName之外的其他东西,我可以在游戏开始之前通过脚本保存我的git commit number,之后在游戏中我可以读取该值并显示在我的游戏中。所以我需要两样东西使用脚本更新android应用版本和内部版本号而不改变androidManifest VersionCode和VersionName

  1. 如何创建androidManifest文件额外的标签在那里我可以保存这个值
  2. 和文字更改标签值在脚本文件的游戏运行之前使用

我用下面的脚本来更改舱单

newverfull=$(git --git-dir="../../.git" --work-tree="../../" rev-list master | wc -l) 

manf=AndroidManifest.xml 

newvers=`echo $newverfull | sed 's/[^0-9].*$//'` 

vers=`sed -n '/versionCode=/s/.*"\([0-9][0-9]*\)".*/\1/p' $manf` 

sed /versionCode=/s/'"'$vers'"'/'"'$newvers'"'/ $manf >new$manf && cp new$manf $manf && rm -f new$manf 

的versionCode标签我感谢你的帮助。谢谢!

+0

对于该脚本,您使用的是哪个操作系统?你在建什么? ANT,Maven?其他? – Simon

+0

我用android 4.0.3构建而不使用任何ANT,Maven。刚刚写了一个简单的.sh脚本文件,并在我的游戏启动之前运行它,以更改清单标记中的清单和riodCode标记,我不想更改清单标记。 –

回答

0

我设法改变我之前发布的脚本。我还在清单文件中创建元数据,并通过下面的脚本更改其值。感谢您的帮助干杯! 这里是变化

newverfull = $(git --git-dir =“../../。git”--work-tree =“../../”rev-list master | wc -1)

MANF = AndroidManifest.xml中

verbase = echo $newverfull | sed 's/\(.*\.\)\([0-9][0-9]*\).*$/\1/'

vername = sed -n '/GameVersion/s/.*"\([^"]*\)".*/\1/p' $manf

SED/GameVersion/S/' “ '$ vername'”'/ '“' $ verbase '''/ $ manf> new $ manf & & cp new $ manf $ manf & & rm -f new $ manf

+0

使用“sed -i”替换文件中没有这样的副本,像这样:'sed -i/GameVersion/s /''''$ vername'''''''$ verbase'''/ $ manf' – Cougar

0

下面是一个例子。自定义标签是GameVersion。

<application android:name=".MyApplication" 
      android:icon="@drawable/icon" 
      android:label="@string/app_name"> 

    <meta-data android:name="GameVersion" android:value="1.9" /> 

    <activity android:name="com.someone.something.MainActivity" 
       android:theme="@android:style/Theme.Translucent.NoTitleBar" 
       android:screenOrientation="sensor" 
       android:label="@string/app_name"> 

要访问:

ApplicationInfo ai = _context.getPackageManager().getApplicationInfo(_context.getPackageName(),PackageManager.GET_META_DATA); 
    ai.metaData.get("GameVersion") 

正如你所看到的,你需要上下文才能到PackageManager参考。我更喜欢使用getApplicationContext()来做到这一点,但如果这是您获取数据的地方,则使用您的活动上下文很好。

+0

它具有元数据的好处,但我如何访问.sh脚本文件中的这个元数据字段并更改其值。 –

+0

为什么你不能只改变你已有的脚本?您可能还想考虑更改为ANT或其他一些自动执行此类操作的构建工具。 http://www.androidengineer.com/2010/06/using-ant-to-automate-building-android.html。至于.sh,对不起,我不做Linux。 – Simon

+0

嘿伙计,感谢您的帮助 –