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.mzph.cn/diannao/52811.shtml

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

相关文章

国产网卡品牌崛起,做好网络信息安全的“守门人”

在信息技术日新月异的时代背景下&#xff0c;信息安全不仅关乎个人隐私保护&#xff0c;更是国家安全与经济发展的基石。LR-LINK联瑞凭借其前瞻性的视野和深厚的研发实力&#xff0c;成功自主研发出全国产化的FPGA&#xff08;现场可编程门阵列&#xff09;网闸隔离卡方案&…

优质企业上网行为管理软件大盘点

员工在上班时间摸鱼&#xff0c;看似是一个小问题&#xff0c;但却会给企业带来诸多不良影响。首先&#xff0c;摸鱼会降低员工的工作效率&#xff0c;导致工作任务无法按时完成&#xff0c;影响项目进度。其次&#xff0c;摸鱼行为会破坏企业的工作氛围&#xff0c;影响其他员…

零基础学习Python(七)

1. 字符串常用方法 lower()、upper()&#xff1a;转换为小写字符串、大写字符串 split(str)&#xff1a;按照指定字符串str进行分割&#xff0c;结果为列表&#xff1a; email "123qq.com" print(email.split("")) [123, qq.com] count(str)&#xf…

Linux 安装Mysql保姆级教程

一、检查环境 我们登录服务器&#xff0c;查看之前是否安装过mysql rpm -qa | grep mysql 由于我之前安装过&#xff0c;所以这里是有数据的 如果需要删除重新下载&#xff0c;可以使用 rpm -e mysql57-community-release-el7-10.noarch.rpm 二、安装 1、下载 接下来下载安装…

Hive SQL

一、基本数据类型 tinyint 1byte 有符号整数 smallint 2byte 有符号整数 int 4byte 有符号整数 bigint 8byte 有符号整数 boolean 布尔类型&#xff0c;true或者false float 单精度浮点数 double 双精度浮点数 decim…

电脑C盘临时文件怎么清理?

在解决“C盘临时文件怎么清理&#xff1f;”的问题前&#xff0c;先来一起了解一下清理C盘临时文件的原因&#xff1a; 释放磁盘空间&#xff1a;临时文件可以占用大量磁盘空间&#xff0c;尤其是在长时间未清理的情况下&#xff0c;清理这些文件可以释放空间。提高系统性能&a…

sheng的学习笔记-AI-半监督聚类

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 半监督学习&#xff1a;sheng的学习笔记-AI-半监督学习-CSDN博客 聚类&#xff1a;sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 均值算法&#xff1a;sheng的学习笔记-AI-K均值算法_k均值算法怎么算迭代两次后的最大…

突发!Runway 从 HuggingFace 及 GitHub 上删库跑路,背后有何隐情?

突发&#xff01;2024年8月29日Runway 从 HuggingFace 及 GitHub 上删库跑路&#xff0c;背后有何隐情&#xff1f; &#x1f9d0; 今天我们来聊一聊科技圈一则爆炸性消息&#xff1a;Runway ML 从 HuggingFace 和 GitHub 上删库跑路&#xff0c;毫无预警&#xff01;这个举动…

properties文件提示未引用

问题描述 以前用的好好的项目,今天突然打开就发现idea不识别spring配置信息显示未引用,如果config代码中引入的配置却可以高亮显示,然后输入spring相关的配置,文件是没有提示的。经过研究发现是spring相关的插件被关闭了。效果如下 解决方法 启用三个插件spring Boot,Sp…

看完这100道软件测试面试题,拿不到offer,算我输

掌握此套面试题&#xff0c;人手至少2份offer&#xff0c;绝不瞎吹&#xff01;分享给大家。 一、自我介绍 二、灵活问题 1、大概说说之前公司的测试流程 2、测试报告有哪些内容? 3、如何保证用例的覆盖度&#xff1f; 4、什么是测试用例&#xff0c;什么是测试脚本&…

知识社区的小程序源码系统 界面支持万能DIY装修 带源代码包以及搭建部署教程

系统概述 知识社区的小程序源码系统是一款专为构建知识分享和交流社区而设计的强大工具。它提供了完整的源代码包&#xff0c;使开发者能够根据自己的需求进行定制和扩展&#xff0c;打造出个性化的小程序应用。 该系统的界面设计简洁大方&#xff0c;易于操作&#xff0c;同…

【JavaEE】线程安全性问题,线程不安全是怎么产生的,该如何应对

产生线程不安全的原因 在Java多线程编程中&#xff0c;线程不安全通常是由于多个线程同时访问共享资源而引发的竞争条件。以下是一些导致线程不安全的常见原因&#xff1a; 共享可变状态&#xff1a;当多个线程对共享的可变数据进行读写时&#xff0c;如果没有适当的同步机制&…

鸿蒙Next 单元测试框架——hypium

一 框架概述 单元测试框架(hypium)是HarmonyOS上的测试框架&#xff0c;提供测试用例编写、执行、结果显示能力&#xff0c;用于测试系统或应用接口。 表1 单元测试框架功能特性 二 安装使用 目前hypium以npm包的形式发布, 因此需要在Deveco Studio 工程级package.json内配…

CSS-常用属性【看这一篇就够了】

目录 前言文章 常用属性 cursor鼠标样式 outline外轮廓 border与outline的区别 overflow超出部分隐藏 overflow属性值 overflow-x和overflow-y vertical-align属性 应用案例 常用的a标签布局按钮 水平居中的轮播图按钮 产品展示效果&#xff1a; 小米商城菜单 前…

【C#】属性的声明

在面向对象程序设计中,属性是访问对象存储数据的首选方式。 一般不要直接公开类的变量成员,即便是get访问器和set访问器并无数据访问规则。 属性的声明 1. 完整声明 在代码中输入propfull &#xff0c;并连续按两下tab键 高亮的部分是可以修改的部分&#xff0c;按tab键可以…

FPGA上板项目(四)——FIFO测试

目录 实验内容实验原理FIFO IP 核时序绘制HDL 代码仿真综合实现上板测试 实验内容 理解 FIFO 原理调用 FIFO IP 核完成数据读写 实验原理 FIFO&#xff1a;First In First Out&#xff0c;先入先出式数据缓冲器&#xff0c;用来实现数据先入先出的读写方式。可分类为同步 FI…

一个php快速项目搭建框架源码,带一键CURD等功能

介绍&#xff1a; 框架易于功能扩展&#xff0c;代码维护&#xff0c;方便二次开发&#xff0c;帮助开发者简单高效降低二次开发成本&#xff0c;满足专注业务深度开发的需求。 百度网盘下载 图片&#xff1a;

科研绘图系列:R语言多组极坐标图(grouped polar plot)

介绍 Polar plot(极坐标图)是一种二维图表,它使用极坐标系统来表示数据,而不是像笛卡尔坐标系(直角坐标系)那样使用x和y坐标。在极坐标图中,每个数据点由一个角度(极角)和一个半径(极径)来确定。角度通常从水平线(或图表的某个固定参考方向)开始测量,而半径则是…

【网络安全】服务基础第一阶段——第六节:Windows系统管理基础---- DNS部署与安全

计算机智能识别并用IP地址定位&#xff0c;例如我们想要访问一个网页&#xff0c;其实是只能使用这个网页的IP地址&#xff0c;即四位的0&#xff5e;255来访问&#xff0c;但这一串数字难以记忆&#xff0c;于是就有了DNS&#xff0c;将难以记忆的数字转化为容易记忆的域名&am…

合宙LuatOS产品规格书——Air700EAQ

Luat Air700EAQ是合宙的LTE Cat.1bis通信模块&#xff0c;采用移芯EC716E平台&#xff0c;支持LTE 3GPP Rel.13技术。 该模块专为满足小型化、低成本需求而设计&#xff0c;具备超小封装和极致成本优势。 Air700EAQ支持移动双模&#xff0c;内置丰富的网络协议&#xff0c;集…