流水线建构apk、abb实战(二)

gradlew 命令生成apk、aab包

其实构建应用程序包就几个命令:

### 生成AAB:
gradlew bundleRelease #输出到[project]/build/outputs/bundle/release/下
gradlew bundleDebug### 生成APK:
gradlew assembleRelease
gradlew assembleDebug### 清楚gradle缓存
gradlew cleanBuildCache

接下来看下如何在项目中使用本地下载的sdk

local.properties使用以及Gradle文件、Manifests文件如何使用local.properties配置的值

先看下一般local.properties的内容:
image.png

sdk.dir

打包构建时,项目会读取local.properties文件中的sdk.dir配置构建时使用的SDK,所以sdk.dir配置是必要的,具体目录看你安装的SD目录位置.

channel

channel我是用来区分渠道的,一般在AndroidManifests.xml会有以下一段配置:

 <meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="包名|appid||${channel}"/>

其中channel就是要动态配置的值,这个值需要在build.gradle中先读取配置:
image.png
配置后就可以在AndroidManifests.xml中读取了。

outputDir

如果有需要修改打包后输出目录路径以及修改文件名就在build.gradle文件这样做:

android {
...
applicationVariants.all { variant ->variant.outputs.all { output ->def apkDir = rootProject.file(properties.getProperty("outputDir"));if (!apkDir.exists()) {apkDir.mkdirs()}variant.packageApplicationProvider.get().outputDirectory = apkDir  // 指定apk的输出位置def packageType = properties.getProperty("packageType");def channel = properties.getProperty("channel");def version = properties.getProperty("version");def name =  "zh_${channel}_${version}";if (buildType.name == 'debug') {name = name + "_dev";  }output.outputFileName = "${name}.${packageType}"; // 指定输出文件名}}
}

以上的配置只针对打包apk有效,修改打包aab文件输出目录的方法暂时没找到,欢迎各位大佬指点!
打包aab一般是输出到[project]/build/outputs/bundle/release/,可以自己验证下对不对。
最后在外部构建机一般会新建一个local.properties(一般不会上传到代码仓库):

echo 'set local.properties'
echo 'sdk.dir=sdk目录' >> local.properties
echo 'outputDir=输出目录' >> local.properties
echo 'channel=渠道' >> local.properties
echo 'version=版本 >> local.properties
echo 'packageType=apk or aab' >> local.properties
  • 补充一种情况,上传google应用商店是上传aab包,这是google console会对包进行二次签名,会导致报名和对应的秘钥、签名证书不一致等,所以这时候会有一个需求:打包apk包使用的包名和aab包名不一致,这时候build.gradle可以这样配置(可能这样用不太合适,因为这里用来扩展渠道的):
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())android {compileSdkVersion 33defaultConfig {applicationId "包名1"flavorDimensions "App"  #必须的,目前就是两个渠道}productFlavors {dev {dimension "App" #必须的// 每个环境包名不同applicationId "包名1"// 动态修改 常量 字段buildConfigField "String", "ENVIRONMENT", '"dev"'// 修改 AndroidManifest.xml 里渠道变量manifestPlaceholders = [UMENG_CHANNEL_VALUE: "dev",name: "包名1",channel: properties.getProperty("channel")]}prod {dimension "App" #必须的applicationId "包名2"buildConfigField "String", "ENVIRONMENT", '"prod"'manifestPlaceholders = [# 以下可以在AndroidManifest.xml中使用UMENG_CHANNEL_VALUE: "prod",name: "包名2"channel: properties.getProperty("channel")]}}}

配置完以上后会报错:

A problem was found with the configuration of task ':project:createReleaseApkListingFileRedirect' (type 'ListingFileRedirectTask').In plugin 'com.android.internal.version-check' type 'com.android.build.gradle.internal.tasks.ListingFileRedirectTask' property 'listingFile' specifies file 'xxx/xxx' which doesn't exist.

一种方法是把之前配置的修改应用程序包建构输出的目录, 但这不是最优的解决方案,具体参考Gradle ListingFileRedirectTask 引发的打包问题,在build.gradle最后加上:

 tasks.whenTaskAdded {task ->if (task.name.contains("ReleaseApkListingFileRedirect")) { // 过滤releasetask.enabled = false}
}

其中AndroidManifest.xml中的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="可以随意配置">
</manifest>

使用命令gradlew bundleDevReleasegradlew bundleProRelease构建后会自动配置对应的包名,gradlew bundleProRelease打包出来的路径如下:
image.png

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

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

相关文章

菜刀冰蝎哥斯拉流量通讯特征绕过检测反制感知

1.加密流程 工具名称requestsresponseAntSwordbase64等方式明文冰蝎2.0开启Openssl扩展-动态密钥aes加密aes加密base64未开启Openssl扩展-异或异或base64冰蝎3.0开启Openssl扩展-静态密钥aes加密aes加密base64未开启Openssl扩展-异或异或base64哥斯拉php的为base64异或base64异…

游戏《酒店业领袖》

为快餐连锁店麦当劳&#xff0c;我们创建了一款名为“好客领袖”的游戏。麦当劳的员工可以在网站上注册&#xff0c;并测试自己是否扮演酒店领导的角色&#xff0c;在餐厅可能出现的各种情况下快速做出决定。奖品等待着那些在比赛中表现最好的人。 对于该项目&#xff0c;我们&…

【Meetup】探索Apache SeaTunnel的二次开发与实战案例

在数据科技快速演进的今天&#xff0c;业务场景的复杂化和数据量的激增&#xff0c;推动了大数据技术的迅速发展&#xff0c;在众多开源大数据处理工具中&#xff0c;Apache SeaTunnel以其强大的数据集成能力&#xff0c;成为众多企业的首选。 但随着应用深入&#xff0c;企业面…

【三更新】多分式标注 脚本工具

这篇是 多分式标注 脚本工具的第三次更新文章。 原文章及历次更新请点击链接 【ArcGIS 脚本工具】生成多分式标注 【更新】多分式标注 脚本工具 【再更新】多分式标注&#xff08;船新版本&#xff09; 更新内容 1、组合字段标注 分子、分母、前分、后分&#xff0c;四个…

流水线建构apk、abb实战(一)

在构建机上需要下载的工具 流水线中的构建机无法使用Android Studio中自带的sdk工具下载&#xff0c;所以得下载commandlinetools命令行工具&#xff0c;下载后使用随附的 sdkmanager 下载其他 SDK 软件&#xff0c;解压后按照/cmdline-tools/latest/bin/sdkmanager目录结构整…

Camtasia Studio2024破解汉化版crack安装包下载地址

在当今数字化时代&#xff0c;视频内容已成为传播信息和吸引观众的重要方式。无论是企业宣传、在线教育还是个人创作&#xff0c;一款功能强大的视频编辑软件都是必不可少的工具。而Camtasia Studio2024作为业界领先的视频编辑软件&#xff0c;其永久免费版及最新版本的功能更是…

28 - 只出现一次的最大数字(高频 SQL 50 题基础版)

28 - 只出现一次的最大数字 select (selectnumfromMyNumbers group bynum havingcount(num)1order by num desc limit 1) as num;

二叉树的先序创建、复制、深度及结点个数

文章目录 前言一、二叉树的先序创建二、二叉树的复制三、二叉树的深度四、二叉树的结点个数总结 前言 T_T此专栏用于记录数据结构及算法的&#xff08;痛苦&#xff09;学习历程&#xff0c;便于日后复习&#xff08;这种事情不要啊&#xff09;。所用教材为《数据结构 C语言版…

体育器材管理系统(Java+MySQL)

技术栈 Java语言&#xff1a;作为主要编程语言&#xff0c;用于编写应用逻辑和界面交互。MySQL数据库&#xff1a;用于存储和管理体育器材的相关数据。Swing窗口视图&#xff1a;用于创建图形用户界面&#xff0c;使用户能够通过窗口进行操作&#xff08;GBK编码&#xff09;。…

线性模型-分类

一、线性判别分析LDA 线性判别分析是一种经典的线性学习方法&#xff0c;在二分类问题上最早是Fisher提出的&#xff0c;亦称为Fisher判别分析。 Fisher判别分析是一种用于降维和分类的统计方法&#xff0c;旨在找到可以最好区分不同类别的特征。它基于类内方差和类间方差的比…

Polar Web【简单】uploader

Polar Web【简单】uploader Contents Polar Web【简单】uploader思路EXP运行&总结 思路 本题的重点仍是文件上传&#xff0c;只是期间需要加上一步自主的文件上传。 打开环境&#xff0c;审查代码&#xff0c;发现在上传文件之后会自动生成一个以MD5散列值命名的目录&#…

COMPUTEX 2024 国际电脑展即将举行,英伟达宣布将Copilot+引入RTX系列设备,赋能游戏本AI助理

COMPUTEX 2024 国际电脑展即将于2024年6月4日至7日在台北南港展览馆1馆及2馆盛大举行。作为业界瞩目的盛会&#xff0c;本次展会不仅吸引了全球各地的科技爱好者&#xff0c;更迎来了AMD CEO苏姿丰博士和NVIDIA首席执行官黄仁勋的精彩演讲。 在展会的开幕之际&#xff0c;图形…

查看服务器端口是否打开,如何查看服务器端口是否打开

查看服务器端口是否打开&#xff0c;是确保服务器正常运行和网络通信畅通的关键步骤。以下是几个有力的方法&#xff0c;帮助你快速、准确地判断端口状态。 首先&#xff0c;你可以使用telnet命令来检测端口的连通性。telnet是一个网络协议&#xff0c;可以用于远程登录和管理网…

如何将 MySQL 数据库共享给他人?

文章目录 共享所有数据库给他人1. 连接到 MySQL 数据库2. 选择要使用的数据库3. 修改连接所需的 host4. 刷新权限 共享部分数据库给他人1. 创建用户2. 授权3. 刷新权限 结语 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是I…

张大哥笔记:高考,万人过独木桥,你怕不怕摔倒?

今天刷到一个新闻&#xff1a;宁夏煤业计划招600名挖煤的井下操作工&#xff0c;要求大学学历&#xff01;结果却吸引了7900人来报名&#xff01;我都惊呆了&#xff0c;什么时候挖煤都要求这么高的学历了&#xff0c;那读书到底起啥作用&#xff01; 如果一个人读书读到大学后…

1.Rust安装

目录 一、安装1.1 在Windows上安装1.2 在Linux下安装 二、包管理工具三、Hello World3.1 安装IDE3.2 输出Hello World 一、安装 1.1 在Windows上安装 点击页面 安装 Rust - Rust 程序设计语言 (rust-lang.org)&#xff0c;选择"下载RUSTUP-INIT.EXE(64位&#xff09;&qu…

Vue——子级向父级使用props传递数据(函数)

文章目录 前言原理案例效果演示 前言 看到这个标题&#xff0c;相信很多人会说我&#xff0c;你之前博客写的父级向子级中传递数据使用的是props&#xff0c;然后说的子级向父级传递数据则是用的$emit。 并且还说了对于String、数组Array&#xff0c;只能是父级使用props传递…

矩阵链相乘(动态规划法)

问题分析 矩阵链相乘问题是一个经典的动态规划问题。给定一系列矩阵&#xff0c;目标是找到一种最优的乘法顺序&#xff0c;使得所有矩阵相乘所需的标量乘法次数最少。矩阵链相乘问题的关键在于利用动态规划来避免重复计算子问题。 算法设计 定义子问题&#xff1a;设 &…

HTTP-一

一、超文本传输 1. 文本传输 > 字符串(能在utf8/gbk等码表上找到合法字符) 2. 超文本传输 > 不仅仅是字符串,还可以携带一些图片,特殊得格式 HTML 3. 富文本 word http0.9 -> http1.0 -> http1.1 -> http2.0 -> http3.0 http1.0是主流版本 2.0 和…

redis安裝启动

1、下载redis解压 https://github.com/tporadowski/redis/releases 2、打开cmd&#xff0c;切换到解压的文件夹 3、redis-server.exe redis.windows.conf 启动redis redis可通过命令行输入config set requirepass password和直接修改redis.config文件中修改 requirepass 来设…