APP 版本管理

作者: 陈林峰LeonChen1024 | 来源:发表于2019-05-28 07:45 被阅读30次

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

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

    原文首发于 https://leonchen1024.com/2018/04/13/APP-Version-Control/

    设置版本信息

    官方推荐是在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。

    统一配置

    原文首发于 https://leonchen1024.com/2018/04/13/APP-Version-Control/

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

    关于 自动命名和生成版本号等可以看 这篇博客

    原文首发于 https://leonchen1024.com/2018/04/13/APP-Version-Control/

    Reference

    https://developer.android.com/studio/publish/versioning.html

    About Me

    我的博客 leonchen1024.com

    我的 GitHub https://github.com/LeonChen1024

    微信公众号 CooCoder

    CooderQRcodem.jpg

    相关文章

      网友评论

        本文标题:APP 版本管理

        本文链接:https://www.haomeiwen.com/subject/yvgltctx.html