APP 版本控制

版本管理是app的一个重要部分,他主要的用途有:

  • 让用户了解当前的版本信息,了解升级或者降级信息等
  • 不同的版本可能提供的服务和功能有所差别,版本信息可以给我们一个标志来识别当前版本可提供的服务和功能。

原文首发于 leonchen1024.com/2018/04/13/…

设置版本信息

官方推荐是在Gradle中进行版本设置,因为Gradle中设置的版本信息会在构建的时候合并到manifest文件中,并会替换掉manifest中有关版本信息的设置。并且在Gradle中进行设置的话还可以根据应用不同的Flavor进行不同的设置。

版本控制主要有这么两个属性:

  • android:versionCode : 整数,是内部版本号,用于判断一个版本是否比另一个版本新,用户并不需要看到。通常是跟随着发布版本增加该code。如果安装的app 的 versionCode 比当前该 app 的 versionCode 小的话会导致安装失败,提示无法降级安装.

  • android:versionName : 字符串,用户能看到的版本号。如 1.0.0 .系统不关心这个值.

通常我们将这些设置放在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) 方法可以获取版本信息。

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。

统一配置

原文首发于 leonchen1024.com/2018/04/13/…

顺便说一下一个可以统一所有的配置在一个地方的方法,这样可以便于我们管理版本。 首先在主工程的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/…

Reference

developer.android.com/studio/publ…

About Me

我的博客 leonchen1024.com

我的 GitHub github.com/LeonChen102…

微信公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值