有时候我们需要重命名输出apk文件名,在Android studio 3.0以前我们是这样写的:

applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//这里修改apk文件名
def fileName = getProject().name + "-" + variant.baseName + "-${defaultConfig.versionName}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}

但是在android studio 3.0之后这个写法就会报错:

Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
Open File

这个错误大概意思就是outputFile这个引用现在是“read-only ”(只读)的,不能重新赋予新的对象。

经过多方折腾验证,最后正确的写法是这样的:

applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//这里修改apk文件名
def fileName = getProject().name + "-" + variant.baseName + "-${defaultConfig.versionName}.apk"
outputFileName = fileName
}
}
}

需要注意的是原先的 variant.outputs.each 一定要改成 variant.outputs.all,不然也会报错的哦。

那么如果你的项目是SDK而不是app呢,那就骚味改动下:

libraryVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.aar')) {
//这里修改apk文件名
def fileName = getProject().name + "-" + variant.baseName + "-${defaultConfig.versionName}.aar"
outputFileName = fileName
}
}
}

嗯,没错就是把 applicationVariants改成libraryVariants就好了。

接下来说说maven的发布脚本:

首先在头部添加:

apply plugin: "maven"
apply plugin: 'signing'

然后:

//============发布脚本=================
//maven 仓库地址

//ext.RELEASE_URL = 'file://localhost/Users/Admin/mySDK'//本地仓库
//ext.SNAPSHOT_URL = 'file://localhost/Users/Admin/maven-snapshots'

ext.RELEASE_URL =  'http://127.0.0.1:8081/repository/maven-releases/'
ext.SNAPSHOT_URL = 'http://127.0.0.1:8081/repository/maven-snapshots/'
//用户名和密码
ext.USERNAME = 'username'
ext.PWD = 'pwd' // 判断版本是Release or Snapshots
def isReleaseBuild() {
return !android.defaultConfig.versionName.contains("SNAPSHOT")
} // 获取仓库url
def getRepositoryUrl() {
return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL
} uploadArchives {
repositories {
mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment)
} repository(url: RELEASE_URL) {
authentication(userName: USERNAME, password: PWD)
} snapshotRepository(url: SNAPSHOT_URL) {
authentication(userName: USERNAME, password: PWD)
} pom.project {
version android.defaultConfig.versionName //版本号
artifactId 'projectName' //项目名
groupId 'com.demo.test' //包名,也可以是其他的唯一标识
packaging 'aar' //打包方式
description 'test' //描述
}
}
}
} // 进行数字签名
signing {
// 当 发布版本 & 存在"uploadArchives"任务时,才执行
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}

当然,maven仓库地址也可以改成你本地地址,不用装maven环境也可以。

这里说下碰到的一个坑,一旦你通过maven发布后,发现有点小问题,改了下代码,但是并没有改版本号再执行脚本重新发布,虽然脚本执行成功,实际上服务器上的包并没有更新,哪怕你把服务器上的包删掉再发布也没用,必须要更新版本号才有效,所以在发布release版本前先发SNAPSHOT版验证,验证好再发布release,以免遇到不必要的问题。

最后就是引用:

dependencies {
.....
implementation 'com.demo.test:test:1.0.0@aar'
}
repositories {
//maven { url 'file://D:/Users/Admin/mySDK' }//本地仓库
//maven { url 'file://D:/Users/Admin/maven-snapshots' }
maven { url 'http://127.0.0.1:8081/repository/maven-releases/' }
maven { url 'http://127.0.0.1:8081/repository/maven-snapshots/' }
mavenCentral()
}

Android gradle 相关配置的更多相关文章

  1. Gradle系列之Android Gradle高级配置

    本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...

  2. Gradle系列之Android Gradle基础配置

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

  3. gradle相关配置内容解析

    gradle 项目的构建工具,基于groovy语言.主要用于管理依赖包. as中一般将gradle下载在C:\Documents and Settings<用户名>.gradle\wrap ...

  4. Android Gradle 依赖配置:implementation & api

    背景: Android Gradle plugin 3.0开始(对应Gradle版本 4.1及以上),原有的依赖配置类型compile已经被废弃,开始使用implementation.api和anno ...

  5. Android Gradle 常用配置

    Gradle:multiDexEnabled之DEX 方法超过64K限制和gradle编译OOM问题解决DEX 方法超过64K限制 UNEXPECTED TOP-LEVEL EXCEPTION: co ...

  6. android studio相关配置

    启动出现:Unable to access Android SDK add-on list 解决: Android Studio First Run 检测 Android SDK 及更新,由于众所周知 ...

  7. Android设备相关配置

    http://source.android.com/devices/tech/storage/index.html Android supports devices with external sto ...

  8. Android Gradle基于参数化配置实现差异化构建

    一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...

  9. Gradle系列之Android Gradle插件

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

随机推荐

  1. x200 xp 驱动下载

    http://support.lenovo.com/en_US/downloads/detail.page?&LegacyDocID=MIGR-70602

  2. POJ 3469 最小割 Dual Core CPU

    题意: 一个双核CPU上运行N个模块,每个模块在两个核上运行的费用分别为Ai和Bi. 同时,有M对模块需要进行数据交换,如果这两个模块不在同一个核上运行需要额外花费. 求运行N个模块的最小费用. 分析 ...

  3. day05_02 IDE介绍及设置

    notepad++比较麻烦,使用IDE工具进行程序开发 集成开发环境(IDE,Integrated Development Environment) VIM #经典的linux下的文本编辑器 Emac ...

  4. [python][oldboy]python涉及的几种编码

    1 python文件代码中中文的识别 (换言之,python代码的中文不显示乱码)和解析u"中文"这样的unicode对象 # coding=utf8 2 python运行环境(I ...

  5. Linux Shell系列教程之(二)第一个Shell脚本

    本文是Linux Shell系列教程的第(二)篇,更多shell教程请看:Linux Shell系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们通过一个 ...

  6. 【Luogu】P2962灯Lights(折半搜索)

    题目链接 本意是想学高斯消元,然后一顿乱搞之后学到了一个神奇的搜索方式叫做折半搜索. qwq 就是我先dfs前二分之n个点,然后再dfs后二分之n个点. 然后我dfs后二分之n个点的时候判断一下第一次 ...

  7. Codeforces 903E Swapping Characters

    题目大意 考虑一个未知的长为 $n$($2\le n\le 5000$)由小写英文字母构成的字符串 $s$ .给出 $k$($1\le k\le 2500$,$nk\le 5000$)个字符串 $s_ ...

  8. NOJ——1656搬砖(DP)

    [1656] 搬砖 时间限制: 2000 ms 内存限制: 65535 K 问题描述 开学了,万恶的大二学长们又要领着大一的鲜肉们一起敲代码搬砖了,这不,著名的杨神拿着n块砖头,当然他把这n块砖头的重 ...

  9. HDU-2448 Mining Station on the Sea

    先根据不同的起点跑最短路,记录距离,从而建立二分图求最小匹配. 一开始我求最短路的时候我把港口直接加到图中,然后发现进了港口就不能出来了,所以连接港口的边就要从双向边改成单向边…………这也搞得我n和m ...

  10. linux监控平台搭建-cpu

    linux监控平台搭建-cpu 目前服务器的主流CPU是intel或者AMD.到底主频是什么.多核.多线程.并发.并行.超频.一级缓存.二级缓存.三级缓存.i386.x86 cpu:含有算术逻辑.控制 ...