Android kotlin build.gradle.kts配置

1. 添加 maven 仓库

1. 1. settings配置

1. 1.1. settings.gradle

repositories {maven {url 'https://maven.aliyun.com/repository/public/'}mavenCentral()
}

1. 1.2. settings.gradle.kts

repositories {maven {setUrl("https://maven.aliyun.com/repository/public/")}mavenCentral()
}

1. 2. gradle配置

1. 2.1. build.gradle

  implementation 'com.github.bumptech.glide:glide:4.12.0'

1. 2.2. build.gradle.kts

    implementation(libs.glide)

  版本号在gradle文件夹下 libs.versions.toml文件中添加
在这里插入图片描述

1. 2.2.1. build.gradle.kts

  libs.versions.toml文件用来抽离依赖来加载,文件由 4 个主要部分组成:
  (1)[versions]部分用于声明可以被依赖项引用的版本
  (2)[libraries]部分用于声明坐标的别名
  (3)[bundles]部分用于声明依赖包
  (4)[plugins]部分用于声明插件
  注意:不要使用驼峰命名方式,单词使用 - 分割:

[versions]
groovy = "3.0.5"
checkstyle = "8.37"
[libraries]
groovy-core = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
groovy-json = { module = "org.codehaus.groovy:groovy-json", version.ref = "groovy" }
groovy-nio = { module = "org.codehaus.groovy:groovy-nio", version.ref = "groovy" }
commons-lang3 = { group = "org.apache.commons", name = "commons-lang3", version = { strictly = "[3.8, 4.0[", prefer="3.9" } }
[bundles]
groovy = ["groovy-core", "groovy-json", "groovy-nio"]
[plugins]
versions = { id = "com.github.ben-manes.versions", version = "0.45.0" }

2. Android Studio 如何配置打包后的文件名称

  我们在新建一个项目然后直接进行Build apk,可以生成一个app_debug.apk的apk文件,那么文件是怎么产生的呢?
在这里插入图片描述

2.1. build.gradle

    //**********打包设置开始**********//自定义生成的apk的地址及名称def apkName;signingConfigs {release {v1SigningEnabled truev2SigningEnabled truestoreFile file('./keystore/insour_szyj.keystore')storePassword 'insour_szyj'keyAlias 'insour_szyj'keyPassword 'insour_szyj'}debug {v1SigningEnabled truev2SigningEnabled truestoreFile file('./keystore/insour_szyj.keystore')storePassword 'insour_szyj'keyAlias 'insour_szyj'keyPassword 'insour_szyj'}}buildTypes {debug {
//            minifyEnabled false//混淆minifyEnabled trueshrinkResources true// 不显示LogbuildConfigField "boolean", "LOG_DEBUG", "false"proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'aaptOptions.cruncherEnabled = falseaaptOptions.useNewCruncher = falseapkName = "szyj.apk"signingConfig signingConfigs.release}release {
//            minifyEnabled false//混淆minifyEnabled trueshrinkResources true// 不显示LogbuildConfigField "boolean", "LOG_DEBUG", "false"proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'aaptOptions.cruncherEnabled = falseaaptOptions.useNewCruncher = falseapkName = "szyj.apk"signingConfig signingConfigs.release}}android.applicationVariants.all { variant ->variant.outputs.all {if (outputFileName.endsWith('.apk')) {//这里使用之前定义apk文件名称outputFileName = apkName}}}
//    android.applicationVariants.all {
//        variant -> variant.outputs.all { output ->
//                def date = new Date().format("yyMMdd",
//                        TimeZone.getTimeZone("GMT+08"))
//                if (variant.buildType.name == 'debug'){
//                    output.outputFileName = "项目名称_" +
//                            "${android.defaultConfig.versionName}_${date}_debug.apk"
//                }else if (variant.buildType.name == 'release'){
//                    output.outputFileName = "项目名称_" +
//                            "${android.defaultConfig.versionName}_${date}_release.apk"
//                }
//            }
//    }//**********打包设置结束**********

2.2. build.gradle.kts

  //**********打包设置开始**********signingConfigs {
//        create("release") {
//            storeFile = file("./keystore/insour_szyj.keystore")
//            storePassword = "insour_szyj"
//            keyAlias = "insour_szyj"
//            keyPassword = "insour_szyj"
//        }getByName("debug") {enableV1Signing =trueenableV2Signing =trueenableV3Signing =trueenableV4Signing =truestoreFile = file("./keystore/insour_szyj.keystore")storePassword = "insour_szyj"keyAlias = "insour_szyj"keyPassword = "insour_szyj"}register("release") {enableV1Signing =trueenableV2Signing =trueenableV3Signing =trueenableV4Signing =truestoreFile = file("./keystore/insour_szyj.keystore")storePassword = "insour_szyj"keyAlias = "insour_szyj"keyPassword = "insour_szyj"}}buildTypes {debug {isMinifyEnabled = falseisShrinkResources = falseproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}release {isMinifyEnabled = falseisShrinkResources = falseproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}}// 输出类型android.applicationVariants.all {// 编译类型val buildType = this.buildType.nameval date = SimpleDateFormat("yyyyMMddHHmmss").format(Date())outputs.all {// 判断是否是输出 apk 类型if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) {this.outputFileName = "szyj" +"_${android.defaultConfig.versionName}_${date}_${buildType}.apk"}}}//**********打包设置结束**********

3. sourceSets配置

3.1. build.gradle

    sourceSets {main {jniLibs.srcDirs = ['libs']}}

3.2. build.gradle.kts

 //jniLibs目录指向libs目录sourceSets {getByName("main") {jniLibs.srcDirs("libs")}}

4. Kotlin Build.gradle脚本编写(build.gradle.kts)

plugins {id("com.android.application")kotlin("android")kotlin("kapt")
}
android {compileSdkVersion(29)defaultConfig {applicationId = "com.xxx.xxxxx"minSdkVersion(21)targetSdkVersion(29)versionCode = 27versionName = "2.2.0"resConfigs("zh")ndk {abiFilters += listOf("armeabi-v7a","arm64-v8a")}}//开启dataBindingbuildFeatures {dataBinding = true}//图片已压缩 指定aapt不做图片压缩 因为可能会反而增加图片大小aaptOptions {
//        cruncherEnabled = false}//关闭lint检查lintOptions {disable("ResourceType")
//        abortOnError  = false}//jniLibs目录指向libs目录sourceSets {getByName("main") {jniLibs.srcDirs("libs")}}//优化transformClassDexBuilderForDebug的时间dexOptions {preDexLibraries = truemaxProcessCount = 8}//禁止生成依赖元数据 不上play用不到dependenciesInfo {includeInApk = false}//jdk1.8支持compileOptions {sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = JavaVersion.VERSION_1_8.toString()}//签名配置signingConfigs {getByName("debug") {storeFile = file("../xxx.jks")storePassword = "xxx"keyAlias = "xxx"keyPassword = "xxx"}}buildTypes {getByName("debug") {//签名signingConfig = signingConfigs.getByName("debug")//git提交次数 作为测试包版本后缀buildConfigField("int", "GIT_COMMIT_COUNT", getGitCommitCount())}register("alpha") {//继承debug配置initWith(getByName("debug"))//混淆isMinifyEnabled = trueproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")//ZipAlignEnabled优化isZipAlignEnabled = true//移除无用的resource文件isShrinkResources = true}getByName("release") {//继承alpha配置initWith(getByName("alpha"))//关闭debugdebuggable(false)}}//release打包时自定义apk名字、输出路径android.applicationVariants.all {outputs.all {if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) {this.outputFileName = "xxxx.apk"}}}
}//获取git提交次数
fun getGitCommitCount(): String {val os = org.apache.commons.io.output.ByteArrayOutputStream()project.exec {commandLine = "git rev-list --count HEAD".split(" ")standardOutput = os}return String(os.toByteArray()).trim()
}//依赖库
apply(from = "depends.gradle")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Redis实战》学习笔记

特点 :1、是一个高性能的key/value内存型数据库 2、支持丰富的数据类型(string,List,Set,ZSet,Hash) 3、支持持久化 内存数据, 可以持久化到硬盘中 4、单进程,单线程 效率高 redis实现分布式锁 一、redis的相关指令 1、flushDB 清空当前…

Flink实时电商数仓之旁路缓存

撤回流的处理 撤回流是指流式处理过程中,两表join过程中的数据是一条一条跑过来的,即原本可以join到一起的数据在刚开始可能并没有join上。 撤回流的格式: 解决方案 定时器:使用定时器定时10s(数据最大的时间差值&am…

7.14解数独(LC37-H)

算法: 二维递归(递归时需要两层for循环) 一个for循环放行 另一个for循环放列 画树: 因为这个树形结构太大了,我抽取一部分,如图所示: 回溯三部曲: 1.确定函数参数和返回值 返…

在Gradle工程中使用checkstyle来规范你的项目

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 系列专栏目录 [Java项…

CSS transition详解

文章目录 属性transition-propertytransition-durationtransition-timing-functiontransition-delaytransition 简写属性 方法Element:transitionrun 事件Element:transitionstart 事件Element:transitionend 事件Element:transit…

音频DAC,ADC,CODEC高性能立体声

想要让模拟信号和数字信号顺利“交往”,就需要一座像“鹊桥”一样的中介,将两种不同的语言转变成统一的语言,消除无语言障碍。这座鹊桥就是转换器芯片,也就是ADC芯片。ADC芯片的全称是Analog-to-Digital Converter, 即模拟数字转换…

【白盒测试】逻辑覆盖和路径测试的设计方法

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

互联网演进历程:从“全球等待”到“全球智慧”的技术革新与商业变革

文章目录 一、导言二、World Wide Wait (全球等待)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 三、World Wide Web (万维网)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 四、World Wide Wisdom (全球智慧)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 五、…

Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析

IO模型 IO模型就是说用什么样的通道进行数据的发送和接收,Java 共支持3种网络编程IO 模式:BIO,NIO,AIO BIO(Blocking lO) 同步阻塞模型, 一个客户端连接对应一个处理线程 代码示例: package com.tuling.bio; import java.io.…

DeepL翻译器,一直想使用怎么办?

作为一个独立开发者,将应用程序翻译到不同语言是个让我很头大的事情。请专业人员翻译太贵无法承受,谷歌翻译质量太差时常词不达意。 如何使用 DeepL 使用起来很直观,打开此网页粘贴要翻译的内容即可。它也支持 macOS 和 PC 端。 这里开我们开…

LinuxShell

一、 新建用户 在Linux上新建一个用户并赋予超级用户权限,建立家目录并设置默认shell为bash,并设置Linux在输入sudo密码时显示星号。请提交全部命令及输出截图(表明完成需求即可)。 1.sudo useradd -m ymhs(用户名) 增加用户 2.su…

SpingBoot的项目实战--模拟电商【5.沙箱支付】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一. 沙箱支付是什么 二.Sp…

2分钟了解什么是socket?

文章目录 概念比喻类型Socket 与 TCP、UDP的关系 概念 Socket 是提供网络通信功能的编程接口(API),提供了网络通信的基本操作,允许程序或进程之间进行数据交换。是传输层协议的具体软件实现,它封装了协议底层的复杂实…

【干货】Windows中定时删除system32目录下的.dmp文件教程

旭帆科技的技术人员除了给用户答疑解惑以外,还会主动测试软件性能,进行平台优化,除此之外,技术人员还会总结一些技术干货,这不,近期又提供了一份如何在Windows中定时删除system32目录下的.dmp文件的教程。感…

CRM软件对企业发展起着哪些作用?CRM的功能解析

虽然不少科技成果昙花一现,但CRM管理系统作为销售和营销领域的核心技术,已经牢牢占据了不可撼动的地位。拥有一个部署得当的CRM系统能为企业带来诸多好处。它可以跟踪和管理销售人员与潜在/现有客户的所有互动和沟通,并帮助他们识别出需要重点…

msvcp140.dll文件缺失要怎么修复?msvcp140.dll重新安装的解决方法

使用Windows系统时,dll文件丢失的问题时有发生,特别是msvcp140.dll文件缺失问题,它会导致某些程序无法运行。针对这一常见问题,本文将详细阐述如何应对和修复msvcp140.dll文件缺失的状况,提供多个解决方案,…

Java多线程-14

目录 程序线程进程 并发并行​编辑 创建线程的基本方式 程序线程进程 并发并行 创建线程的基本方式(1) package com.edu.threaduse;public class Demo01 {public static void main(String[] args) throws InterruptedException {//创建Cat对象&…

DolphinScheduler实际应用

前言 最近公司新启动了一个项目,然后领导想用一下新技术,并且为公司提供多个大数据调度解决方案,我呢就根据领导要求调研了下当前的开源调度工具,最终决定采用DolphinScheduler, 因此研究了一下DolphinScheduler &…

今日聊聊寒假假期如何不颓废

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

Linux-进程间通信_管道

项目场景: 须熟知文件管理和进程方面的基础知识 通过Xshell和VScode 相互进行远程开发,学习进程间通信的其中一种方式——管道。 问题描述 依照我们曾经所学的知识,我们仅仅只能在单个进程中进行数据的交互,但是在实际应用中&a…