1.獲取當前版本號
PackageManager pm = getPackageManager();
PackageInfo pi = pm.getPackageInfo(getPackageName(), 0);//getPackageName()是你當前類的包名,0代表是獲取版本信息
String name = pi.versionName;
int code = pi.versionCode;
2.修改自定義的應用程序的版本號(在manifest.xml文件中頂端)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.package.name"
android:versionCode="2"
android:versionName="1.1">
<application android:icon="@drawable/icon" android:label="@string/app_name">
...
</application>
</manifest>
VersionCode:對消費者不可見,僅用於應用市場、程序內部識別版本,判斷新舊等用途。
VersionName:展示給消費者,消費者會通過它認知自己安裝的版本。一般我們說的版本號就是這個。
我們在運營應用商店的過程中,發現有的開發者會遇到一些問題。
1、同一個VersionName(版本號),對應了多個VersionCode
這種情況很常見,比如說新版本發布之後,某個商店反饋說存在xxx問題,需要修復、定制等等操作,於是商務找工程師出了個新版本,考慮到是小版本升級,版本號沒變化,但是VersionCode已經變了。
可能遇到的問題:如果這個新版只在部分商店上線,就會出現都是3.1版,A商店的版本其實比B商店的新。已經安裝了新版本的用戶,還會被提示升級,這時候用戶會困擾,為什麼我裝了3.1還要升級到3.1?部分商店為了最新會抓包,導致渠道包流竄,影響運營監控和分析。
解決方案:a.版本號應該和VersionCode一起漲,而且一旦發布新版本,就在所有渠道上架新版。
2、發布了一個VersionCode錯誤的版本
有時候因為工程師不小心,發布了一個VersionCode過大的版本,比如1.1.1.20版本的VersionCode寫成了111,而1.1.1.27版本的VersionCode寫成了11127,但是後面發布1.1.2版希望延續舊的VersionCode,用112。
可能遇到的問題:1.1.1.27版的用戶將無法獲得1.1.2版本的升級,因為在程序看來1.1.1.27版本是比較新的,同時,已經使用了1.1.2版本的用戶,可能會收到舊版本的升級提示,比並降級回舊版
解決方案:其實很簡單,因為VersionCode對最終用戶是不可見的,只要增加就好了,上文的例子,新版VersionCode直接取11200就齊活了。
3、發布了一個有Bug的版本,好捉急
偶爾會遇到版本已經發布了,第二天突然發現,糟糕,有Bug,用戶開始罵了!於是商務同學到各家市場要求退回舊版本。
可能遇到的問題:已經升級到有Bug版本的用戶是無法回滾到舊版的,因此這樣直接退回舊版本的方式對這些熱心升級的用戶是非常不負責任的。而且人肉召回的力度實在有限,這個有Bug的版本一定會流傳的。
解決方案:最好是不要浪費時間退回舊版,趕緊修復Bug發個新版本(記得加VersionCode),如果Bug比較棘手,暫時無法修復,只能退回舊版本,這時建議把舊版本的VersionCode改大一些後,提交新版本,這樣可以保證所有用戶都能下載/升級到一個相對可靠的版本。