android应用的持续构建CI(三)-- 手动签名

news2024/10/6 10:26:07

一、背景

关于android应用的签名及其原理,很多文章都有讲述,无意重复赘述。

本文紧接上文,站在运维的角度,对开发是透明的。

但是它又和gradle build 构建动作是紧密相关的。

第一步使用jdk的keytool生成证书文件,第二步调用android构建工具apksigner,对构建好的apk文件进行签名。(参考链接地址:manually-signing-the-apk )

二、生成keystore证书

1、手动生成keystore证书

$ keytool -genkeypair -v -keystore xample.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000

Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  Ham Chimpanze
What is the name of your organizational unit?
  [Unknown]:  NASA
What is the name of your organization?
  [Unknown]:  NASA
What is the name of your City or Locality?
  [Unknown]:  Cape Canaveral
What is the name of your State or Province?
  [Unknown]:  Florida
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US
Enter key password for <publishingdoc>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing xample.keystore]

这是手动生成keystore证书文件,属于交互式的操作。
当使用shell命令生成keystore证书文件时,需进行适当的转换。

2、shell命令生成keystore证书

/opt/keystore.sh ${apkName} 证书文件名与apk的名称保持一致,别名是publishingdoc,密码是123456hello

expect <<!
spawn keytool -genkeypair -v -keystore $1.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000 -keystore ./$1.keystore
expect "Enter keystore password:"
send "123456hello\r"
sleep 1
expect "Re-enter new password:"
send "123456hello\r"
sleep 1
send "Ham Chimpanze\r"
sleep 1
send "NASA\r"
sleep 1
send "NASA\r"
sleep 1
send "Cape Canaveral\r"
sleep 1
send "Florida\r"
sleep 1
send "US\r"
sleep 1
send "yes\r"
sleep 1
send "\r"
sleep 1
expect eof
!
sleep 1

如此,便不需要人工与之交互,就可以生成keystore证书文件了。

  • 生成的xxx.keystore文件,存在于jenkins服务器的目录下
    在这里插入图片描述

三、android应用程序的配置

前文说了,开发是不能知道keystore文件信息的,生成过程交由jenkins服务器完成。

而gradle打包完成后,对应用签名的时候,是需要知道keystore证书所在以及密码。

所以,我们新建一个properties配置文件,jenkins服务器负责写入该配置文件,android应用程序只需要读取该配置文件。

配置文件apk.properties的格式如下:

## xxx是应用名称
APK_NAME=xxx.apk
APK_DIR=/opt/apks
STORE_FILE=/opt/keystore/xxx.keystore
STORE_PASSWORD=123456hello
KEY_ALIAS=publishingdoc
KEY_PASSWORD=123456hello

1、android代码

  • apk.gradle
    在这里插入图片描述
  • build.gradle

在这里插入图片描述

android {
	signingConfigs {
        release {
        }
    }
    buildTypes {
        debug {
            # 编译debug版本时,暂不签名
        }
        release {
            # 编译release版本时,自动签名
            signingConfig signingConfigs.release
            
        }
    }
}

2、properties配置文件

这里想补充一下,写入properties配置文件的两种方式:

  • 简单粗暴地拼接文本内容
  • 基于模板的变量替换

先创建一个模板文件,然后对其变量进行替换。

cp apk.properties.tpl apk.properties

# 替换变量的示例
sed -i -e "s|APK_NAME=|APK_NAME=$1.apk|" apk.properties
sed -i -e "s|STORE_FILE=/opt/keystore/|STORE_FILE=/opt/keystore/$1.keystore|" apk.properties

四、总结

android应用程序的打包,总是绕不开应用签名。

本文仅从运维的角度,梳理了其如何生成和使用的步骤。

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

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

相关文章

kubeadm快速部署k8s集群

Kubernetes简介 Kubernetes&#xff0c;简称k8s&#xff0c;容器编排引擎&#xff0c;以API编程的方式管理安排各个容器的引擎。 k8s会在多台node服务器上调度pod进行部署和扩缩容每个pod内部可以含&#xfeff;有多个container每个container本质上就是一个服务进程 1、k8s集…

Python 3.x 下的 3D 游戏引擎

在 Python 3.x 中&#xff0c;有几个比较流行的用于开发 3D 游戏的引擎和库。虽然 Python 自身不是一个主流的游戏开发语言&#xff0c;但是可以通过这些库和引擎结合其它语言或者底层渲染引擎来实现复杂的游戏开发。 1、问题背景 在 Linux 系统中&#xff0c;尤其是 Debian 7…

clone()方法

在Java中&#xff0c;clone() 方法是一个非常有趣且强大的工具&#xff0c;用于创建对象的一个副本。这个方法位于 Object 类中&#xff0c;因此可以被所有类使用。让我们讨论一下它的几个要点&#xff1a; 什么是克隆&#xff1f; 克隆就是创建一个对象的新副本&#xff0c;这…

3-1 激活函数和神经网络思想

3-1 激活函数和神经网络思想 主目录点这里

机器学习原理之 -- 梯度提升树(GBT)原理详解

梯度提升树&#xff08;Gradient Boosting Trees, GBT&#xff09;是一种强大的机器学习算法&#xff0c;广泛应用于分类和回归任务。它通过集成多个弱学习器&#xff08;通常是决策树&#xff09;来构建一个强大的预测模型&#xff0c;具有较高的准确性和鲁棒性。本文将详细介…

android应用的持续构建CI(四)-- 依赖环境(兼容多版本的gradle和jdk)

一、背景 android应用的构建前提是&#xff0c;安装好了gradle和jdk。在实际使用的过程中&#xff0c;不同的android应用&#xff0c;对gradle和jdk的版本要求不一。 于是&#xff0c;在jenkins服务器上&#xff0c;我们需要安装多种版本的gradle和jdk。 安装过jdk的小伙伴应…

Rethinking Federated Learning with Domain Shift: A Prototype View

CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…

昇思25天学习打卡营第10天|利用 MindSpore 实现 BERT 对话情绪识别的完整攻略

目录 环境配置 导入模块和库 准备数据集 数据集下载和压缩 数据加载和数据预处理 进行模型的构建和优化器的设置 配置和准备模型的训练过程 测量训练操作的执行时间 模型验证 模型推理 自定义推理数据集 环境配置 首先&#xff0c;利用“%%capture captured_output”来捕获…

银湖资本在中国设立公司运营点,全球投资巨头的新篇章!

近日&#xff0c;全球知名私募股权投资公司银湖资本宣布在中国设立公司运营点。一点是银湖资本在国内安置了两个办事营业点&#xff0c;一个在黑龙江&#xff0c;一个在广州等一线城市。这一举动标志着银湖资本在全球范围内的扩展进入了新的阶段&#xff0c;同时也展示了其对中…

iOS手机竖着拍的照片被旋转了90°的原因以及解决方案

EXIF.getData(IMG_FILE, function () { // IMG_FILE为图像数据 var orientation EXIF.getTag(this, “Orientation”); console.log(“Orientation:” orientation); // 拍照方向 }); 获取拍照方向的结果为1-8的数字&#xff1a; 注意&#xff1a;对于上面的八种方向中&a…

Xilinx FPGA:vivado关于真双端口的串口传输数据的实验

一、实验内容 用一个真双端RAM&#xff0c;端口A和端口B同时向RAM里写入数据0-99&#xff0c;A端口读出单数并存入单端口RAM1中&#xff0c;B端口读出双数并存入但端口RAM2中&#xff0c;当检测到按键1到来时将RAM1中的单数读出显示到PC端&#xff0c;当检测到按键2到来时&…

从单体服务到微服务:预初始化属性多模式 Web 应用开发记录<四> FreeMarker 视图首次渲染优化

欢迎关注公众号&#xff1a;冬瓜白 相关文章&#xff1a; 多模式 Web 应用开发记录<一>背景&全局变量优化多模式 Web 应用开发记录<二>自己动手写一个 Struts多模式 Web 应用开发记录<三>预初始化属性 经过一段时间的开发和测试&#xff0c;我们成功地…

java的工厂设备管理系统-计算机毕业设计源码16179

摘要 在现代制造业中&#xff0c;高效的设备管理对于确保生产过程的顺利进行至关重要。为了满足工厂对于设备管理的需求&#xff0c;我们设计并实现了一个基于 Java 的工厂设备管理系统。 该系统旨在提供一个全面、可靠且易于使用的解决方案&#xff0c;以帮助工厂有效地管理…

temu a4接口 逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi …

【️讲解下Laravel为什么会成为最优雅的PHP框架?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

为什么进口主食冻干那么高贵?必入榜主食冻干总结分享

新手养猫人常常会有这样的疑问&#xff1a;为何进口主食冻干价格如此昂贵&#xff0c;但仍有大量养猫达人对其推崇备至&#xff1f;与国产主食冻干相比&#xff0c;进口产品的价格高出3-4倍之多&#xff0c;那么这高昂的价格背后&#xff0c;进口主食冻干是否真的值得推荐&…

偏微分方程笔记(驻定与非驻定问题)

椭圆方程可以看成抛物方程 t → ∞ t\rightarrow\infty t→∞的情况。 抛物&#xff1a; 双曲&#xff1a;

音视频流媒体视频平台LntonAIServer视频监控平台工业排污检测算法

在当今社会&#xff0c;环境保护和可持续发展已成为全球关注的焦点。工业生产作为经济发展的重要支柱&#xff0c;其对环境的影响不容忽视。因此&#xff0c;如何有效地监控和管理工业排污&#xff0c;成为了一个亟待解决的问题。LntonAIServer工业排污检测算法应运而生&#x…

【架构-20】死锁

什么是死锁&#xff1f; 死锁(Deadlock)是指两个或多个线程/进程在执行过程中,由于资源的互相占用和等待,而陷入一种互相等待的僵局,无法继续往下执行的情况。 产生死锁的四个必要条件: &#xff08;1&#xff09;互斥条件(Mutual Exclusion)&#xff1a;至少有一个资源是非共享…

2024 年 亚太赛 APMCM (B题)中文赛道国际大学生数学建模挑战赛 |洪水灾害数据分析 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; 完整内容可以在文章末尾领取&#xff01; 该段文字…