为了方便识别apk文件,一般我们都希望通过androoid studio打包的文件,会带上app的名字,时间,之类的,使用多渠道打包的时候,还希望带上渠道名称

以前我都这样做

 //修改生成的apk名字
android{applicationVariants.all { variant ->if (variant.buildType.name.equals('release')) {variant.outputs.each { output ->def parent = './apk/'def buildNamedef releaseApkNamedef type = variant.buildType.name;releaseApkName = buildName + '_' + type + "_" + versionName + '_' + getDate() + '.apk'output.outputFile = new File(parent, releaseApkName)}}}
}

但是gradle更新到3.0.0以后就不行了,会报错

Error:(26, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=release, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
<a href="openFile:E:\workspace\Downloader\app\build.gradle">Open File</a>

再贴个图

image.png

这个错误大概意思就是outputFile这个引用现在是“read-only ”(只读)的,不能重新赋予新的对象。也就是说原来的讨论不让用了,经过多方Google,我找到了这个方法

现在这样做

android{applicationVariants.all { variant ->if (variant.buildType.name.equals('release')) {variant.outputs.all { output ->def buildName = "Downloader"def type = variant.buildType.namedef releaseApkName = buildName + '_' + type + "_" + versionName + '_' + getTime() + '.apk'outputFileName = releaseApkName}}}
}

两种方式的区别在于,重命名的地方,从 variant.outputs.each 方法改成 variant.outputs.all 方法,以及output.outputFile = new File(parent, releaseApkName) 改成 outputFileName = releaseApkName,就是说,现在不能指定路径,你只能修改文件名,路径只能使用默认的(当然你如果找到了可以修改路径的方法,千万留言),默认路径一般在/app/build/outputs/apk/{buildType}/:

image.png

你如果使用Android stuido 的打包选型,并且创建了新的productFlavors,会在App文件夹里自动创建对应productFlavors的文件:

image.png

补充内容

评论中lijiankun24告知,可以用这种方法指定apk输出目录

android{applicationVariants.all { variant ->if (variant.buildType.name.equals('release')) {variant.outputs.all { output ->def buildName = "Downloader"def type = variant.buildType.namedef releaseApkName = buildName + '_' + type + "_" + versionName + '_' + getTime() + '.apk'outputFileName = releaseApkNamevariant.packageApplication.outputDirectory = new File("./apk")}}}
}

即在all方法中调用variant.packageApplication.outputDirectory = new File("./apk")

转载自:https://www.jianshu.com/p/0066cb59aa4f

gradle 指定导出包的名字和路径相关推荐

  1. clipse3.2/3.3中指定第三方包(JAR)和类路径(CLASSPATH)的几个方法(转做笔记)

    在Java类中,我们可以通过"import + 包名 + 类名"的方式引用第三方包(jar)或者第三方类(class),但你得告诉Java编译和运行环境到哪里去找这些库或者类,如果 ...

  2. Eclipse导出可执行Jar包及相关资源路径的处理

    1. Eclipse导出可执行jar包方法: 项目上右击-->Export-->Runnable JAR file-->选择main方法所在的类,选择导出路径,勾选"Pac ...

  3. osgi导出包和非导出包_了解如何解决OSGI捆绑包

    osgi导出包和非导出包 我想回顾一下OSGI包如何解决并使用Apache Karaf进行演示. Karaf是基于Apache Felix内核的功能齐全的OSGI容器,并且是Apache Servic ...

  4. maven 打包指定依赖包_maven打包加入依赖包以及加入本地依赖包的方法

    Maven引入本地Jar包并打包进War包中 1.概述 在平时的开发中,有一些Jar包因为种种原因,在Maven的中央仓库中没有收录,所以就要使用本地引入的方式加入进来. 2. 拷贝至项目根目录 项目 ...

  5. Wireshark如何单独导出包的列信息

    2019独角兽企业重金招聘Python工程师标准>>> Wireshark如何单独导出包的列信息 Wireshark提供了丰富的数据包导出功能.用户可以将数据包按照需要导出为各种格式 ...

  6. 遍历指定jar包中class文件名并输出到文件中

    import java.io.*; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; i ...

  7. Go 语言同一个包内函数调用、包名和实际路径最后一个目录不一致问题

    以下代码的 GOPATH 路径为 "/home/wohu/GoCode" 1. 同一个包内的函数可以相互调用 代码结构如下: wohu@wohu:~/GoCode/src$ tre ...

  8. 实验16:使用context:include-filter指定扫描包时要包含的类 实验17:使用context:exclude-filter指定扫描包时不包含的类

    实验17:使用context:exclude-filter指定扫描包时不包含的类 扫描的时候可以排除一些不要的组件 type="annotation" 指定排除规则,按照注解进行排 ...

  9. tf.name_scope()详解【命名空间其实就是给几个变量包一层名字,方便变量管理】

    命名空间其实就是给几个变量包一层名字,方便变量管理.函数是:tf.name_scope 另外,就像操作系统文件夹命名一样,不同的顶层文件夹下,可以有同名文件夹.这里,不同的命名空间下,可以有名字相同的 ...

最新文章

  1. Hadoop学习之MapReduce(二)
  2. 代码实现sql编译器_【数据蒋堂】第 19 期:从 SQL 语法看集合化
  3. SQL Servr 2008空间数据应用系列一:空间信息基础
  4. Shell数值及字符串比较
  5. Java开发笔记(五十六)利用枚举类型实现高级常量
  6. ids for this class must be manually assigned before calling save():Xxx
  7. React:基础知识学习
  8. 一篇文章讲清python开发必懂的8种数据结构
  9. springCloud 之 Eureka高可用配置
  10. 数字化成熟度评估模型一文读尽
  11. java 行政区划编号_行政区划 | Java Service SDK | 开发支持 | 四维地图开放平台
  12. 期货平仓/强制平仓/爆仓-股市平仓建仓
  13. Mybatis入门(复习)
  14. 野路子玩Android(二)使用log打印信息
  15. Fedora 26 安装搜狗拼音输入法 sogoupinyin
  16. html页面设计参考文献英文,网页设计参考文献(国外英文资料).doc
  17. 我用ubuntu——linux路上搞qq,及,其他
  18. 2022编程语言排名, 后端开发语言选型
  19. 容器云技术docker
  20. 为jupyter的Markdown标题生成大纲目录

热门文章

  1. php cms 源码小说,PHPMAOS 强大的小说CMS系统
  2. 安装管家婆分销ERPA8常见问题
  3. C语言:函数的嵌套调用
  4. matlab 出现nan原因,在matlab中NAN是什么意思?
  5. 趋势策略-三均线利剑
  6. HTML期末大学生网页设计作业——奇恩动漫HTML (1页面) HTML+CSS+JS网页设计期末课程大作业
  7. 常见二叉树定义及其性质
  8. SV学习笔记—wait和@的区别
  9. Gem5在X64架构下运行SPEC2006
  10. ZBrush主要干什么工作?ZBrush的发展方向,我现在开始学习还能赶上好时候吗?