Android APK打包脚本

build.gradle版本

同目录创建config.gradle文件写入需要的信息入

在这里插入图片描述

config.gradle文件内容
ext {
/*** 自定义APP运行环境* dev: 开发* test: 测试* pro: 生产*/
env = "pro"
/*** 动态参数配置,根据自己需要添加参数* APP_ID: 包名* VERSION_CODE: 版本号* VERSION_NAME: 版本名* HOST: 网络请求前缀*/
dev = [APP_ID: "包名",APP_NAME: "(开发版)",VERSION_CODE: 1,VERSION_NAME: "1.0.0",HOST: "网络请求前缀"
]
pro = [APP_ID: "包名",APP_NAME: "正式包",VERSION_CODE: 1,VERSION_NAME: "1.0.0",HOST: "网络请求前缀",
]
//签名文件
sign = [STORE_FILE: "文件地址",STORE_PASSWORD: "密码",KEY_ALIAS: "秘钥名",KEY_PASSWORD: "秘钥密码"]
}

build.gradle中如何引用


使用 apply from: ‘config.gradle’ 添加脚本文件
将build.gradle文件中的相关信息替换成脚本文件的内容

def env = project.ext.env // 环境
def config = project.ext[env] // 根据环境获取配置信息
def sign = project.ext.sign
//noinspection GradleCompatible
compileSdkVersion 31
buildToolsVersion "29.0.3"defaultConfig {applicationId config.APP_IDminSdkVersion 21//noinspection ExpiredTargetSdkVersiontargetSdkVersion 29versionCode config.VERSION_CODEversionName config.VERSION_NAMEresValue "string", "app_name", config.APP_NAMEbuildConfigField "String", "HOST", "\"${config.HOST}\""buildConfigField "String", "PATH", "\"${config.PATH}\""buildConfigField "String", "HALL_OID", "\"${config.HALL_OID}\""manifestPlaceholders = [FILE_PROVIDER_AUTHORITIES: config.APP_ID + ".fileProvider"]signingConfigs {release {storeFile file(sign.STORE_FILE)storePassword sign.STORE_PASSWORDkeyAlias sign.KEY_ALIASkeyPassword sign.KEY_PASSWORDv1SigningEnabled truev2SigningEnabled true}
}//设置打包生成的apk命名
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'applicationVariants.all { variant ->variant.outputs.all { output ->if(!variant.buildType.isDebuggable()) {outputFileName = "${config.APP_NAME}_V${variant.versionName}_${new Date().format("yyyyMMddHHmm")}.apk"}}}signingConfig signingConfigs.release}
}

build.gradle.kts版本

创建的config.gradle文件,内容见上方config.gradle文件内容

build.gradle和build.gradle.kts的区别在于前面是常规的写法,后面是kotlin写法。

添加脚本文件

apply(from = "config.gradle")

替换内容

val env = extra["env"] as String
val config = extra[env] as Map<*, *>
val sign = extra["sign"] as Map<*, *>
namespace = config["APP_ID"] as StringcompileSdk = 34defaultConfig {applicationId = config["APP_ID"] as StringminSdk = 21targetSdk = 34versionCode = config["VERSION_CODE"] as IntversionName = config["VERSION_NAME"] as StringtestInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"resValue("string", "app_name", config["APP_NAME"] as String)buildConfigField("String", "HOST", "\"${config["HOST"] as String}\"")buildConfigField("String", "WEBSOCKET", "\"${config["WEBSOCKET"] as String}\"")buildConfigField("String", "APP_KEY", "\"${config["APP_KEY"] as String}\"")buildConfigField("String", "APP_SECRET", "\"${config["APP_SECRET"] as String}\"")manifestPlaceholders["FILE_PROVIDER_AUTHORITIES"] = applicationId + ".fileProvider"
}signingConfigs {getByName("debug") {storeFile = file(sign["STORE_FILE"] as String)storePassword = sign["STORE_PASSWORD"] as StringkeyAlias = sign["KEY_ALIAS"] as StringkeyPassword = sign["KEY_PASSWORD"] as String}create("release") {storeFile = file(sign["STORE_FILE"] as String)storePassword = sign["STORE_PASSWORD"] as StringkeyAlias = sign["KEY_ALIAS"] as StringkeyPassword = sign["KEY_PASSWORD"] as String}
}
//编写打包生成的apk名是使用了日期个时间的类型,kotlin不像build.gradle可以直接使用需要引入相关类
//import java.text.SimpleDateFormat
//import java.util.DatebuildTypes {release {isMinifyEnabled = falseproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")applicationVariants.all {outputs.all {if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl)outputFileName = "${config["APP_NAME"] as String}_V${config["VERSION_NAME"] as String}_${ SimpleDateFormat("yyMMdd").format(Date()) }.apk"}}}
}

项目中使用脚本字段,先编译项目,生成BuildConfig
直接在项目中使用 BuildConfig.VERSION_CODE 获取包名或者项目版本。

其中 manifestPlaceholders = [FILE_PROVIDER_AUTHORITIES: config.APP_ID + “.fileProvider”] 创建的是FileProvider中的authorities属性

<providerandroid:name="androidx.core.content.FileProvider"android:authorities="${FILE_PROVIDER_AUTHORITIES}"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>

项目中使用

FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", apk);

需要修改的话只需要在config.gradle脚本文件中修改相关字段并重新编译项目即可

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

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

相关文章

【TDesign】如何修改CSS变量

Tdesign的组件想通过style定义样式没效果, 可以通过组件api文档修改, 组件提供了下列 CSS 变量&#xff0c;可用于自定义样式。 比如Cell, https://tdesign.tencent.com/miniprogram/components/cell?tabapi 提供了&#xff1a; –td-cell-left-icon-color 图标颜色 –td-cell…

yolo训练策略--使用 Python 和 OpenCV 进行图像亮度增强与批量文件复制

简介 在计算机视觉和深度学习项目中&#xff0c;数据增强是一种常用的技术&#xff0c;通过对原始图像进行多种变换&#xff0c;可以增加数据集的多样性&#xff0c;从而提高模型的泛化能力。本文将介绍如何使用 Python 和 OpenCV 实现图像的亮度增强&#xff0c;并将增强后的…

Golang | Leetcode Golang题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; func canConstruct(ransomNote, magazine string) bool {if len(ransomNote) > len(magazine) {return false}cnt : [26]int{}for _, ch : range magazine {cnt[ch-a]}for _, ch : range ransomNote {cnt[ch-a]--if cnt[ch-a] < 0 {r…

Vue(八) localStorage、组件的自定义事件、Todo案例修改

文章目录 一、浏览器本地存储1. 相关API2. Todo案例中的应用 二、组件的自定义事件1. 回顾props传值方式2. 绑定自定义事件&#xff08;1&#xff09;方式一&#xff1a;v-on或&#xff08;2&#xff09;方式二&#xff1a; ref 3. 解绑自定义事件4. 注意点总结 三、Todo案例采…

算法复盘——LeetCode hot100:哈希

文章目录 哈希表哈希表的基本概念哈希表的使用1. 插入操作2. 查找操作3. 删除操作 哈希表的优点和缺点1.两数之和复盘 242.有效的字母异位词复盘 49.字母异位词分组复盘 128. 最长连续序列复盘HashSet 哈希表 先来搞清楚什么是哈希表吧~ 概念不清楚方法不清楚怎么做题捏 哈希表…

c++习题28-计算2的N次方

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 描述 任意给定一个正整数N(N<100)&#xff0c;计算2的n次方的值。 输入描述 输入一个正整数N。 输出描述 输出2的N次方的值。 用例输入 1 5 用例输出 1 32 二&#xff0…

【王树森】Transformer模型(2/2): 从Attention层到Transformer网络(个人向笔记)

Single Head Self-Attention 上节课讲到的属于单头注意力&#xff1a; Multi-Head Self-Attention 使用 l l l 个单头注意力层堆叠成一个多头注意力层&#xff0c;注意它们之间不共享参数一个单头注意力有 3 个参数矩阵&#xff0c;所以多头注意力有 3 l 3l 3l 个参数矩阵…

docker文档

一、docker概述 1、java项目通过docker打包成镜像&#xff08;包含了所有的环境&#xff09;放到docker仓库中&#xff0c;只需要下载发布的镜像直接运行即可&#xff1b; 2、虚拟机技术的缺点&#xff1a; 资源占用多、冗余步骤多、启动很慢 容器化技术&#xff1a; 比较do…

色彩与笔触的交响:广州米塔在线科教技术有限公司揭秘PS绘画秘籍!

在数字艺术的广阔天地里,PS无疑是一颗璀璨的明星&#xff0c;它不仅在图像处理领域独领风骚&#xff0c;更以其强大的功能成为了众多艺术家和设计师进行数字绘画的首选工具。广州米塔在线科教技术有限公司&#xff0c;作为致力于艺术教育与技术分享的平台&#xff0c;深知掌握P…

RNN及其变体

RNN及其变体 RNN模型定义 循环神经网络:一般接受的一序列进行输入,输出也是一个序列 作用和应用场景: RNN擅长处理连续语言文本,机器翻译,文本生成,文本分类,摘要生成 RNN模型的分类 根据输入与输出结构 N Vs N : 输入和输出等长,应用场景:对联生…

科技改变搜索习惯:Anytxt Searcher,重新定义你的信息获取方式!

前言 史蒂夫乔布斯所言&#xff1a;“创新就是把事物联系起来的能力”。这种能力不仅推动了全球科技的飞速发展&#xff0c;也深刻影响着我们的日常生活方式。在这样的背景下&#xff0c;一款名为Anytxt Searcher的本地数据全文搜索引擎应运而生&#xff0c;它以其独特的功能和…

【Android】使用 ADB 查看 Android 设备的 CPU 使用率

目录 一 查看整体CPU使用率 1 top 二 查看特定应用的CPU使用率 1 获取特定应用的进程 ID (PID) 2 使用 top 命令并过滤该 PID 三 常见的CPU相关命令参数 1 adb shell top 参数 一 查看整体CPU使用率 1 top top命令将显示当前所有进程的 CPU 使用情况&#xff0c;包括每…

【Datawhale AI夏令营】从零上手CV竞赛Task3

文章目录 前言一、数据集增强二、设置 YOLO 模型训练参数三、模型微调总结 前言 本文的Task3对Task1的baseline代码继续进行优化的过程。 一、数据集增强 数据增强是机器学习和深度学习中常用的技术&#xff0c;用于通过从现有数据集中生成新的训练样本来提高模型的泛化能力。…

gitee版本控制

前置要求&#xff1a; 安装Git git下载地址&#xff1a;https://git-scm.com/download/win 注册gitee gitee官网&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台 创建普通项目 目录 git推送远程仓库基本操作 克隆仓库到本地 项目上传 版本管理 分支管理版本…

基于ssm的实习课程管理系统/在线课程系统

实习课程管理系统 摘 要 互联网的快速发展&#xff0c;给各行各业带来不同程度的影响&#xff0c;悄然改变人们的生活、工作方式&#xff0c;也倒逼很多行业创新和变革&#xff0c;以适应社会发展的变化。人们为了能够更加方便地管理项目任务&#xff0c;实习课程管理系统被人们…

55.基于IIC协议的EEPROM驱动控制(2)

升腾A7pro的EEPROM芯片为24C64芯片&#xff0c;器件地址为1010_011。 &#xff08;1&#xff09;Visio整体设计视图&#xff08;IIC_SCL为250KHz&#xff0c;IIC_CLK为1MHz&#xff0c;addr_num为1&#xff0c;地址字节数为2字节&#xff0c;addr_num为0&#xff0c;地址字节数…

产品经理的学习笔记(全集)-持续更新

1.前言 产品经理不是一个软件&#xff0c;也不是一个专业技能&#xff0c;是一个思维量变的过程&#xff1b;内容介绍&#xff1a;P1-产品经理基础认知&#xff1b;P2-从0-1搭建实战项目&#xff08;电商&#xff09; 2.产品经理基础 2.1产品经理定义 产品管理--产品的设计…

【手撕数据结构】二叉树oj题

目录 单值二叉树题目描述题目思路及代码 相同的树题目描述题目思路及代码 对称二叉树题目描述题目思路及代码 另一棵树的子树题目描述题目思路及代码 二叉树的前序遍历题目描述题目思路及代码 二叉树的构建与遍历题目描述题目思路及代码 单值二叉树 题目描述 题目思路及代码 …

SAP LE学习笔记07 - MM与WM跨模块收货到仓库的流程中 如何实现 先上架再入库

上一章讲了LE中收货的一些特殊情况&#xff1a; 1&#xff0c;MM模块收货时&#xff0c;特别移动指标来标识的物料直接产生TO 2&#xff0c;MM中直接收货到仓库的固定Storage Bin(棚番)上 SAP LE学习笔记06 - MM与WM跨模块收货到仓库的流程中 带特别移动指标的物料也可以直接…

怎么将日常的文件做成二维码?文件二维码的在线转换方法

文件做成二维码来展示的应用场景越来越多&#xff0c;可以通过二维码在存储文件的同时&#xff0c;提供文件预览以及下载服务&#xff0c;并且二维码没有时效限制&#xff0c;能够长期提供内容展示服务&#xff0c;更符合现在的展示需求。那么文件生成二维码比较简单的方法可以…