版本管理是app的一個重要部分,他主要的用途有:html
原文首發於 leonchen1024.com/2018/04/13/…java
官方推薦是在Gradle中進行版本設置,由於Gradle中設置的版本信息會在構建的時候合併到manifest文件中,並會替換掉manifest中有關版本信息的設置。而且在Gradle中進行設置的話還能夠根據應用不一樣的Flavor進行不一樣的設置。android
版本控制主要有這麼兩個屬性:git
android:versionCode
: 整數,是內部版本號,用於判斷一個版本是否比另外一個版本新,用戶並不須要看到。一般是跟隨着發佈版本增長該code。若是安裝的app 的 versionCode 比當前該 app 的 versionCode 小的話會致使安裝失敗,提示沒法降級安裝.github
android:versionName
: 字符串,用戶能看到的版本號。如 1.0.0
.系統不關心這個值.bash
一般咱們將這些設置放在gradle下的android {} 塊內部使用defaultConfig {} 包裹它。要注意,若是你在productFlavors中定義了這些屬性,他們會覆蓋defaultConfig中的值。微信
android {
...
defaultConfig {
...
versionCode 1
versionName "1.0.0"
}
productFlavors {
a {
...
versionName "1.0.0"
}
b {
...
}
}
}
複製代碼
在android中使用 PackageManager 的 getPackageInfo(java.lang.String, int) 方法能夠獲取版本信息。app
public static String getVersion(Context context)//獲取版本號 {
try {
PackageInfo pi=context.getPackageManager().getPackageInfo
(context.getPackageName(), 0);
return pi.versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return context.getString(R.string.version_unknown);
}
}
複製代碼
public static int getVersionCode(Context context)//獲取版本號(內部識別號) {
try {
PackageInfo pi=context.getPackageManager().getPackageInfo
(context.getPackageName(), 0);
return pi.versionCode;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
複製代碼
若是使用 Instant Run,Android Studio 會自動將 versionCode 設置爲 MAXINT,將 versionName 設置爲 INSTANTRUN。gradle
原文首發於 leonchen1024.com/2018/04/13/…ui
順便說一下一個能夠統一全部的配置在一個地方的方法,這樣能夠便於咱們管理版本。 首先在主工程的build.gradle裏增長一個配置區
ext {
// Sdk and tools
minSdkVersion = 17
targetSdkVersion = 21
compileSdkVersion = 23
buildToolsVersion = "23.0.3"
// App dependencies
supportLibraryVersion = '23.3.0'
}
複製代碼
而後在module的build.gradle裏使用
targetSdkVersion rootProject.ext.targetSdkVersion
compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
複製代碼
/** * 判斷當前應用是不是debug狀態 */
public static boolean isApkInDebug(Context context) {
try {
ApplicationInfo info = context.getApplicationInfo();
return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
} catch (Exception e) {
return false;
}
}
複製代碼
/** *檢測其餘應用是否處於debug模式。 */
public static boolean isApkDebugable(Context context,String packageName) {
try {
PackageInfo pkginfo = context.getPackageManager().getPackageInfo(
packageName, 1);
if (pkginfo != null ) {
ApplicationInfo info= pkginfo.applicationInfo;
return (info.flags&ApplicationInfo.FLAG_DEBUGGABLE)!=0;
}
} catch (Exception e) {
}
return false;
}
複製代碼
關於 自動命名和生成版本號等能夠看 這篇博客
原文首發於 leonchen1024.com/2018/04/13/…
developer.android.com/studio/publ…
個人博客 leonchen1024.com
個人 GitHub github.com/LeonChen102…
微信公衆號