Android 平台如何取得程序自身的版本?
2009-09-07 12:56
302 查看
想必 99% 的程序都有一个 "About" 吧?这里一般都会写上程序名称和版本号。要知道,AndroidManifest.xml 中也有版本号(Version Name),同样的信息在两个地方出现,就引出了一个问题:如何在后续升级时保证二者同步?
我首先想到的方法就是在 res/values/strings.xml 中定义一个 entry,比如
<string name="version_name">1.0</string>
,然后再在两个地方引用这个字符串 R.string.version_name 或 @string/version_name。当然,About UI 部分可以根据情况直接写在 layout xml (后者)或代码中(前者),但是 AndroidManifest.xml 只能使用后者。这样版本号就只有一个定义,在 strings.xml 中,以后升级时修改这一个地方就可以了。这样改完代码后,编译,运行,一切正常,我感到很欣慰。
然而,很快问题就出现了:当我上传这个程序到 Android Market 上时,系统提示 Version Name 无效!看来 Google 的 Android
Market 后台还不很成熟,这应该是一个 bug,我可以提交一个 issue,但是我的程序不能等到 Android Market 改完 bug 再发布吧?
思考问题要灵活,既然 AndroidManifest.xml 中不能引用其他 xml 中的资源,那么就让版本号定义在它那里,其他用到版本号的地方都想办法取出来不就可以了!!问题化归为:“如何在运行时取到程序自身的版本?”(之所以这里强调“运行时”是因为我感觉 AndroidManisfest.xml 中的东西是无法通过类似 @string/abd 形式来引用的。如果你知道如何引用,请告诉我,谢谢!)。经过查找文档和 Google,最终找到答案:
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
PackageInfo 中包含了关于当前 package 的许多信息(Version Number 当然也包含在其中了),另外 PackageManager.getPackageInfo() 的第二个参数也大有文章。
我首先想到的方法就是在 res/values/strings.xml 中定义一个 entry,比如
<string name="version_name">1.0</string>
,然后再在两个地方引用这个字符串 R.string.version_name 或 @string/version_name。当然,About UI 部分可以根据情况直接写在 layout xml (后者)或代码中(前者),但是 AndroidManifest.xml 只能使用后者。这样版本号就只有一个定义,在 strings.xml 中,以后升级时修改这一个地方就可以了。这样改完代码后,编译,运行,一切正常,我感到很欣慰。
然而,很快问题就出现了:当我上传这个程序到 Android Market 上时,系统提示 Version Name 无效!看来 Google 的 Android
Market 后台还不很成熟,这应该是一个 bug,我可以提交一个 issue,但是我的程序不能等到 Android Market 改完 bug 再发布吧?
思考问题要灵活,既然 AndroidManifest.xml 中不能引用其他 xml 中的资源,那么就让版本号定义在它那里,其他用到版本号的地方都想办法取出来不就可以了!!问题化归为:“如何在运行时取到程序自身的版本?”(之所以这里强调“运行时”是因为我感觉 AndroidManisfest.xml 中的东西是无法通过类似 @string/abd 形式来引用的。如果你知道如何引用,请告诉我,谢谢!)。经过查找文档和 Google,最终找到答案:
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
PackageInfo 中包含了关于当前 package 的许多信息(Version Number 当然也包含在其中了),另外 PackageManager.getPackageInfo() 的第二个参数也大有文章。
相关文章推荐
- Android 平台如何取得程序自身的版本?
- Android 平台如何获取程序的版本
- 【转】如何在windows平台开发OpenGL程序使用OpenGL1.2或更高版本
- 如何将cocos2d-x程序分别移植到ios,android,windowsphone三个手机平台上
- [Android] 如何取得版本号码
- 如何在windows平台开发OpenGL程序使用OpenGL1.2或更高版本
- 【转】如何在Android平台下编译带STL的C++程序
- cordova程序如何调适js-iOS平台-android平台
- [转]如何在移动设备程序中嵌入盈利广告,开始挣钱了 android iphone ipad 多平台支持
- c++游戏程序移植到android平台后,如何更新程序,重新编译
- 如何在Android平台下编译带STL的C++程序
- 如何指定让Android的NDK工具编译出Release版本或Debug版本的Native程序
- 基于Windows平台,C++ 如何调用exe程序
- Android平台下二维码模块测试程序
- 如何判断Android系统的版本
- 如何利用 release 版本的 backtrace 来定位 android NDK 程序的崩溃位置
- Android如何防止apk程序被反编译
- android 如何编译release版本的应用
- Android平台中应该如何获取音乐文件的信息
- c# 程序如何判断自身已经混淆