为了方便识别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. Android 系统中 Location Service 的实现与架构
  2. CentOS 6.4下操作kdump执行过程
  3. python赋值浅拷贝和深拷贝的区别_浅拷贝、深拷贝和普通赋值操作有什么区别?...
  4. 江诗丹顿geneve系列_南京江诗丹顿维修保养多少钱石英手表清洗
  5. 贪心算法——洛谷(P1090)[NOIP2004]合并果子
  6. iPhone 12 Pro Max外形、配置大曝光:安卓基本没对手了
  7. iphone分屏功能怎么用_你用iPhone手机,没学会这7个功能,难怪会说手机不好用...
  8. 滴滴是如何从零构建集中式实时计算平台的?| 技术头条
  9. samba (centos6.5)服务
  10. html怎么编辑文字位置,html – 修正文本的位置背景剪辑
  11. 非参数统计单样本非参数检验之Kolmogorov-Smirnov检验
  12. 【2021最新版】Kafka面试题总结(25道题含答案解析)
  13. MTK-EIS电子防抖-gyro校准
  14. The vertically scrolling ScrollView should not contain another vertically scrolling widget (ListView
  15. 2022-2028全球与中国呼吸系统疾病治疗市场现状及未来发展趋势
  16. 上海浦东机场的wifi使用攻略
  17. 幅相曲线渐近线_幅相曲线.ppt
  18. 职场生涯规划中必须学会的十种能力
  19. 基于Python实现的PageRank算法
  20. 南宁市第二十六中学:教研路漫漫,花香伴我行

热门文章

  1. Strange Class
  2. picsart下载_PicsArt下载_PicsArt照片编辑免费版 v10.2
  3. SSH框架之Hibernate介绍
  4. 论呼叫中心的三种模式
  5. Electron-builder Windows平台打包安装后执行指定的bat脚本(exe)
  6. beego model获取controller_Goweb开发-Beego框架实战教程:项目搭建及注册用户
  7. rsa数字签名算法c语言实现,RSA算法的C++实现
  8. 1709. 访问日期之间最大的空档期
  9. share.weiyun.com微云网页链接无法打开 解决办法
  10. 福贝宠物上市进程加快:号称宠食界“富士康”,多品牌战略失衡