android studio 打包自动生成版本号与日期,apk输入路径详解

 更新时间:2020年03月24日 10:25:01   作者:Swer  
这篇文章主要介绍了android studio 打包自动生成版本号与日期,apk输入路径详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一. 打开项目选择如图示1 (build.gradle 项目位置)

二. 1. build.gradle 文件添加内容如下。gradle是【com.android.tools.build:gradle:3.0.0 以下版本

android{
 
  defaultConfig {...}
 
  自动追加版本号和版本名称
  android.applicationVariants.all {
    variant->variant.outputs.each {
      output-> output.outputFile = new File(output.outputFile.parent,"app_device_v"+defaultConfig.versionName+"_"+new Date().format("yyyy-MM-dd")+"_"+buildType.name+".apk")
    }
  }
}

output.outputFile.parent 可以指定输出到指定文件夹

2. build.gradle 文件添加内容如下。 gradle是【com.android.tools.build:gradle:3.0.0及其以上版本

android{
 
  defaultConfig {...}
 
  //release版本输出包名自动追加版本号和版本名称
  applicationVariants.all {
    variant ->
      variant.outputs.all {
        //只处理生产版本
        if (buildType.name == 'release') {
          def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
           // app包名称
          outputFileName = "app_v" + defaultConfig.versionName + "_" + createTime + "_" + buildType.name + ".apk"
          ////指定release输出到指定文件夹
          variant.getPackageApplication().outputDirectory = new File(config.appReleaseDir + "/${createTime}")
        }
      }
  }
}  

三. 打包查看结果:图示3(直接点击assembleRelease即可)

补充知识:Android编译gradle 动态修改版本号

在构建代码的时候不想每次都修改版本号,需能够增加一个功能在特定的条件下动态的修改版本号

在manifest里面加入占位符号

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="${versioncode}"
    android:versionName="${versionname}">

修改build.gradle

import com.google.gson.Gson

class Version {
  int versionCode
  String versionName
}


def versionJsonFile = file('./version.json')//这个文件最好放一个所有项目人员都能够访问的地方
  def versionJsonObject = new Gson().fromJson(versionJsonFile.text, Version.class)
  android.applicationVariants.all {
    variant ->
      println("variants name : " + variant.name)
  //只有满足特定条件的情况下才会版本自增一,这个可以看看各个项目的特定配置
      if (variant.name.toLowerCase().contains("ceshirelease") ) {
        println("variants name : versionCode " + versionJsonObject.versionCode + "versionname: " + versionJsonObject.versionName)
        versionJsonObject.versionCode = versionJsonObject.versionCode + 1
        int lastIndexPoint = versionJsonObject.versionName.lastIndexOf(".")
        String newStr = versionJsonObject.versionName.substring(0, lastIndexPoint)
        println("newStr" + newStr)
        versionJsonObject.versionName = newStr + "." + versionJsonObject.versionCode
        println("versonJsonStr.versionName " +  versionJsonObject.versionName)
      }
  //这句是核心,可以调整版本号和版本明,修改了这个会影响到BuildConfig.class里面的属性
      variant.mergedFlavor.versionCode = versionJsonObject.versionCode
      variant.mergedFlavor.versionName = versionJsonObject.versionName
  //如果没有加下面这句,当应用安装后会出现应用信息没有版本号的问题,这个必须有
      variant.mergedFlavor.manifestPlaceholders.put("versioncode", versionJsonObject.versionCode)
      variant.mergedFlavor.manifestPlaceholders.put("versionname", versionJsonObject.versionName)
  }
 
 //为了记住最新的版本号,是需要进行文件的回写的,什么时候回写会好一点
 //个人认为只有当打包apk的动作执行成功后 回写文件记录的版本号最优
  afterEvaluate {
    project ->
      gradle.taskGraph.afterTask {
        task, taskState ->
    //这里如果assembleceshirelease 就具体的打包的变种项目,各个应用肯定不一样,需要调整下
          if (task.name.toLowerCase().contains("assembleceshirelease") && taskState.getFailure() == null) {
            println("try assemble ceshi release" )
   //回写文件操作
            versionJsonFile.withPrintWriter { out ->
                out.println(new Gson().toJson(versionJsonObject))
            }
          }
      }
  }

给apk重新命名也是同样的道理

      variant.getOutputs().all {
        File file = it.outputFile;
        println(" file property file.canRead() " + file.canRead() + " file.canWrite " + file.canWrite())
        String pathString = file.getPath();
        println(" path String : " + pathString + " File.pathSeparator: " + File.separator)
   //指定最终输出的文件的目录和名字
        pathString = file.getParent() + File.separator + "test.apk";
        println(" path pathString : " + pathString)
        file.renameTo(pathString)
      }

以上这篇android studio 打包自动生成版本号与日期,apk输入路径详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Android编程之绘制文本(FontMetrics)实现方法

    Android编程之绘制文本(FontMetrics)实现方法

    这篇文章主要介绍了Android编程之绘制文本(FontMetrics)实现方法,结合实例形式较为详细的分析了Android使用FontMetrics对象绘制文本的相关技巧,需要的朋友可以参考下
    2015-12-12
  • Android自定义ViewGroup实现标签流效果

    Android自定义ViewGroup实现标签流效果

    这篇文章主要为大家详细介绍了Android自定义ViewGroup实现标签流效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Android中图片占用内存的深入分析

    Android中图片占用内存的深入分析

    我们在日常开发中应该经常思考这些问题,图片占用内存跟哪些东西有关?跟手机有关系么?这篇文章主要给大家介绍了关于Android中图片占用内存的相关资料,需要的朋友可以参考下
    2022-01-01
  • Android制作微信添加多个图片放大图片功能

    Android制作微信添加多个图片放大图片功能

    这篇文章主要介绍了Android制作微信添加多个图片放大图片功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • Android使用BroadcastReceiver监听网络连接状态的改变

    Android使用BroadcastReceiver监听网络连接状态的改变

    这篇文章主要为大家详细介绍了Android使用BroadcastReceiver监听网络连接状态的改变,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android使用ViewPager实现顶部tabbar切换界面

    Android使用ViewPager实现顶部tabbar切换界面

    这篇文章主要为大家详细介绍了使用ViewPager实现顶部tabbar切换界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android如何从实现到封装一个MVP详解

    Android如何从实现到封装一个MVP详解

    原生的 MVC 框架遇到大规模的应用,就会变得代码难读,不好维护,无法测试的囧境。因此,Android 开发方面也有很多对应的框架来解决这些问题。所以这篇文章主要给大家介绍了关于Android如何从实现到封装一个MVP的相关资料,需要的朋友可以参考下。
    2017-09-09
  • Android自定义View叶子旋转完整版(六)

    Android自定义View叶子旋转完整版(六)

    这篇文章主要为大家详细介绍了Android自定义View叶子旋转完整版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android实现大图滚动显示效果

    Android实现大图滚动显示效果

    这篇文章主要为大家详细介绍了Android实现大图滚动显示效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android编程基础之Menu功能菜单设计实例

    Android编程基础之Menu功能菜单设计实例

    这篇文章主要介绍了Android编程基础之Menu功能菜单,结合实例形式分析了基本的Menu功能菜单原理、定义与响应机制,需要的朋友可以参考下
    2016-10-10

最新评论