Android gradle 相关配置
有时候我们需要重命名输出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 相关配置的更多相关文章
- Gradle系列之Android Gradle高级配置
本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...
- Gradle系列之Android Gradle基础配置
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
- gradle相关配置内容解析
gradle 项目的构建工具,基于groovy语言.主要用于管理依赖包. as中一般将gradle下载在C:\Documents and Settings<用户名>.gradle\wrap ...
- Android Gradle 依赖配置:implementation & api
背景: Android Gradle plugin 3.0开始(对应Gradle版本 4.1及以上),原有的依赖配置类型compile已经被废弃,开始使用implementation.api和anno ...
- Android Gradle 常用配置
Gradle:multiDexEnabled之DEX 方法超过64K限制和gradle编译OOM问题解决DEX 方法超过64K限制 UNEXPECTED TOP-LEVEL EXCEPTION: co ...
- android studio相关配置
启动出现:Unable to access Android SDK add-on list 解决: Android Studio First Run 检测 Android SDK 及更新,由于众所周知 ...
- Android设备相关配置
http://source.android.com/devices/tech/storage/index.html Android supports devices with external sto ...
- Android Gradle基于参数化配置实现差异化构建
一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...
- Gradle系列之Android Gradle插件
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
随机推荐
- python format 用法详解
format 用法详解 不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 单个参数可以多次输出,参数顺序可以不相同 填充方式十分灵活,对齐方式十分强大 官方推荐用的方式,%方式将会在后面的版 ...
- python基础学习笔记——运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算,今天我们暂只学习算数运算.比较运算.逻辑运算.赋值运算 算数运 ...
- P1988 最大数
最大数 08年江苏的一道省选题. 题目描述: 用两种操作维护一个数列: 1. 查询:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 2. 插入:将n加上t,其中t是最近一次查询操作的答案(如 ...
- IDE介绍以及Eclipse的简单使用
一.IDE介绍 ① 什么是IDE? 1. IDE全称是”Integrated Development Environment”,中文称为“集成开发环境”; 2.是用于提供程序开发环境的应用程序, ...
- 集合篇 —— Collection(1):JDK 中的重复实现问题
1. 问题的提出 在 Java 的集合体系当中,无论是 List(列表)还是 Set(集),在设计的时候都存在一个很奇怪的现象:这两种集合的接口,Java 都为其设计了抽象类 Abstrac ...
- Linux命令之必须掌握的十条命令
Linux现如今已经成为了软件行业最流行的操作系统,掌握Linux就成为了每一个开发者必备的专业技能. 为了方便大家学习,大学君在此为大家整理了在使用Linux时必须掌握的十条命令,希望大家能熟练掌握 ...
- LSU——1116 Necklace(尺取)
1116 Necklace 通过率:5/23 难度系数:0时间限制:1000ms 内存限制:32000KB java 两倍. 介绍 Little King has a beautiful pearl ...
- 刷题总结——做运动(NOIP模拟)
题目: 给定一个无向图,节点数n<=50000,m<=1000000,每条边有两个值t和c,边的长度为t*c···现在要求再t尽量小的情况下,求两节点st的最短距离 题解: 第一次做的时候 ...
- 算法复习——扫描线(hdu1542)
题目: Problem Description There are several ancient Greek texts that contain descriptions of the fable ...
- 【Vijos1534】高性能计算机(DP)
题意:有NA个A与NB个B两种任务需要完成,完成一段长度为X的A任务需要时间ta+ka*x*x,B任务类似,连续的同一种任务不能分成两段运行 有P台可以并行运算的计算机,求最快完成所有任务的时间 1≤ ...