当前位置: 首页 > news >正文

给APK签名—两种方式(flutter android 安装包)

前提:给未签名的apk签名,可以先检查下apk有没有签名

通过命令行查看:打开终端或命令行界面,导入包含APK文件的目录,并执行以下命令:
keytool -printcert -jarfile your_app.apk
your_app.apk替换为要检查的APK文件名。执行命令后,你将看到与APK文件关联的签名信息。
注意:上述命令基于Java Development Kit (JDK) 中的 keytool工具,因此请确保你的系统上已安装JDK,并且 keytool命令可以在命令行中使用。

方式一、手动签名

1. 生成密钥文件,选个文件目录,cmd命令行输入以下命令

keytool -genkey -v -keystore test.keystore  -alias YYY -keyalg RSA -validity 4000
YYY是 别名,4000是有效天数4000天 生成密钥文件 test.keystore)
执行命令之后会提示你设置密码,以及一些公司名称之类的;密码一定要记住,其他随意
其中Keytool 是Java提供的密钥(Key)和证书(Certificate)管理工具,用于管理公钥/私钥对以及相关证书。
Keytool是Java自带的工具,安装Java即可。位于Java安装的bin目录中, 比如C:\Program Files\Java\jre1.8.0_131\bin。

2. 查看证书信息  

  keytool -list -v -keystore test.keystore  
Enter keystore password: //输入密码,回车

3. 开始签名

格式: jarsigner -verbose -keystore 签名 -signedjar  签名文件后的文件名 需要签名文件  证书里alias别名
接着输入密码
  jarsigner -verbose -keystore E:\xxx\test.keystore  -signedjar xxxx签名后的xxx.apk D:\xxx\未签名的xxx.apk  testalias如下 :jarsigner -verbose -keystore D:\test1.keystore -signedjar flutter_demo.apk 
E:\Flutter\flutterdemo\build\app\outputs\flutter-apk\app-release.apk YYY
其中文件拖到命令行界面就可以,不需要自己拼路径

方式二、配置自动签名

以下以Flutter项目的Android为例

要在Flutter项目中配置APK签名,你可以按照以下步骤进行操作:

1. 在Android项目的根目录下创建一个sign的文件夹,将你的密钥库文件(.keystore)复制该目录下。

2.再创建名为`key.properties`的文件

确保`key.properties`中指定的密钥库文件名与密钥文件名一致,在文件中添加以下内容,替换为真实的值:

  ```properties

   storePassword=your_store_password

   keyPassword=your_key_password

   keyAlias=your_key_alias

   storeFile=your_keystore_file.jks

  

   # 如果你在构建不同的构建类型(例如,debug和release),需要提供不同的配置,可以创建以下配置:

   # storePassword.debug=debug_store_password

   # keyPassword.debug=debug_key_password

   # keyAlias.debug=debug_key_alias

   # storeFile.debug=debug_keystore_file.jks

   #

   # storePassword.release=release_store_password

   # keyPassword.release=release_key_password

   # keyAlias.release=release_key_alias

   # storeFile.release=release_keystore_file.jks

-`your_store_password`:密钥库(keystore)文件的密码。

   - `your_key_password`:密钥的密码。

   - `your_key_alias`:密钥的别名。

   - `your_keystore_file.jks`:密钥库文件的名称。

 如果你需要为不同的构建类型(例如,debug和release)提供不同的配置,请取消注释相应的行,并为每个构建类型提供适当的值。

3. 在Flutter项目的`android/app/build.gradle`文件中,找到`android`块,并在其中添加以下代码:

   ```groovy

//声明 获取签名配置 配置文件路径

def signProperties = rootProject.file("sign/keystore.properties")

def props = new Properties()

props.load(new FileInputStream(signProperties))

def file = file(props['storeFile'])

android {

    signingConfigs {

        release {

            //如果秘钥库文件和配置文件存在就签名,否则不签名

            if (file.exists() && signProperties.exists()) {

                keyAlias props['keyAlias']

                keyPassword props['keyPassword']

                storeFile file

                storePassword props['storePassword']

            }

        }

    }

       // ...

   

 buildTypes {

    release {

        //混淆

        minifyEnabled true

        //去除无用res文件

        shrinkResources true

        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        //使用签名文件

        signingConfig signingConfigs.release

     }

   }

   

 }

   ```

这将读取你在`key.properties`中配置的值,并在`release`构建类型中应用签名配置。

请注意,确保替换`keyAlias`、`keyPassword`、`storeFile`和`storePassword`值为你自己的实际值。

完成这些步骤后,你的Flutter项目将配置APK签名。

在构建发行版本时,Android构建系统将使用指定的密钥库和密码进行签名。

4.编译签名apk

#你可以通过运行`flutter build apk`命令来生成已签名的APK文件,

它将位于`build/app/outputs/flutter-apk/app-release.apk`路径下(对于release构建类型)。

#如果是原生安卓项目,可以在Gradle中找到build/build,编译出签名apk

注意:1.在使用APK签名之前,请确保密钥库文件和相关密码的安全性,并且备份好重要的文件和密码信息,以防止丢失或泄露。2.编译成功后,可以回到文章开头,验证是否签名成功。

参考反编译后打包签名:apk反编译和重新打包流程_apk反编译后重新打包_☆七年的博客-CSDN博客

创造价值,乐哉分享!776147358

相关文章:

给APK签名—两种方式(flutter android 安装包)

前提:给未签名的apk签名,可以先检查下apk有没有签名 通过命令行查看:打开终端或命令行界面,导入包含APK文件的目录,并执行以下命令: keytool -printcert -jarfile your_app.apk 将 your_app.apk替换为要检查…...

观察者模式、中介者模式和发布订阅模式

观察者模式 定义 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新 观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式…...

PHP-Mysql图书管理系统--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 首页phpStudy 设置导数据库后台的管理界面数据库表结构项目目录如图:代码部分:主页的head 配套资源作业: 本系列校训 用免费公开视频&am…...

网络传输层协议:UDP和TCP

背景知识 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -…...

ElementUI Select选择器如何根据value值显示对应的label

修改前效果如图所示&#xff0c;数据值状态应显示为可用&#xff0c;但实际上仅显示了状态码1&#xff0c;并没有显示其对应的状态信息。在排查了数据类型对应关系问题后&#xff0c;并没有产生实质性影响&#xff0c;只好对代码进行了如下修改。 修改前代码&#xff1a; <…...

Kotlin 内联函数语法之let、apply、also、run、with的用法与详解

一、介绍 kotlin的语法千奇百怪&#xff0c;今天我们将介绍项目中频率使用比较高的几个内联函数。 二、什么叫内联函数&#xff1f; 内联函数 的语义很简单&#xff1a;把函数体复制粘贴到函数调用处 。使用起来也毫无困难&#xff0c;用 inline关键字修饰函数即可。 语法&a…...

Swift 中如何判断是push 过来的页面 还是present过来的 页面

在 Swift 中&#xff0c;可以通过检查当前视图控制器的 presentingViewController 属性来判断是通过 push 过来的页面还是 present 过来的页面。 下面是一个示例代码&#xff0c;展示如何判断是通过 push 还是 present 过来的页面&#xff1a; if let presentingViewControll…...

基于K8s环境·使用ArgoCD部署Jenkins和静态Agent节点

今天是「DevOps云学堂」与你共同进步的第 47天 第⑦期DevOps实战训练营 7月15日已开营 实践环境升级基于K8s和ArgoCD 本文节选自第⑦期DevOps训练营 &#xff0c; 对于训练营的同学实践此文档依赖于基础环境配置文档&#xff0c; 运行K8s集群并配置NFS存储。实际上只要有个K8s集…...

874. 模拟行走机器人

874. 模拟行走机器人 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类型的命令 commands &#xff1a; -2 &#xff1a;向左转 90 度-1 &#xff1a;向右转 90 度1 < x < 9 &#xff1a;…...

【Linux】- RPM 与 YUM

RPM 与 YUM 1.1 rpm 包的管理1.2 rpm 包的简单查询指令1.3 rpm 包的其它查询指令&#xff1a;1.4 卸载 rpm 包&#xff1a;2.1 安装 rpm 包3.1 yum3.2 yum 的基本指令3.3 安装指定的 yum 包3.4 yum 应用实例&#xff1a; 1.1 rpm 包的管理 介绍 rpm 用于互联网下载包的打包及安…...

Visual Studio 2015编译器 自动生成 XXX_EXPORTS宏

XXX_EXPORTS宏 XXX_EXPORTS宏是由Visual Studio 2015编译器自动生成的。这个宏用于标识当前项目是一个导出符号的动态链接库&#xff08;DLL&#xff09;项目。在使用Visual Studio 2015创建Win32项目时&#xff0c;编译器会自动添加这个宏到项目的预定义宏中。 这个宏的作用…...

HTML5的应用现状与发展前景

HTML5&#xff0c;作为Web技术的核心&#xff0c;已经深深地改变了我们看待和使用Web的方式。它不仅提供了数不尽的新特性和功能&#xff0c;还使得Web设计和开发更加互动、更加直观。这篇文章将探讨HTML5的当前应用现状&#xff0c;以及它的未来发展前景。 HTML5的应用现状 H…...

day44-Spring_AOP

0目录 1.2.3 1.Spring_AOP 实体类&#xff1a; Mapper接口&#xff1a; Service和实现类&#xff1a; 测试1&#xff1a; 运行后&#xff1a; 测试2&#xff1a;无此型号时 测试3&#xff1a;库存不足时 解决方案1&#xff1a;事务声明管理器 测试&#xff1a…...

selenium IDE 接入jenkins-转载

Selenium-IDE脚本录制,selenium-side-runner自动化测试教程_51CTO博客_selenium ide录制脚本 备忘录...

云计算结合数据科学突破信息泛滥(下)

大家好&#xff0c;本文将继续讨论云计算结合数据科学突破信息泛滥的相关内容&#xff0c;讲述其余三个关键组成部分。 3.数据清理和预处理 收集数据并将其存储在云端之后&#xff0c;下一步是将数据进行转换。因为原始数据经常包含错误、不一致和缺失的值&#xff0c;这些都…...

蓝桥杯单片机第十二届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…...

MyBatis学习笔记之缓存

文章目录 一级缓存一级缓存失效 二级缓存二级缓存失效二级缓存相关配置 MyBatis集成EhCache 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率 mybatis的缓存&#xff1a;将select语句的查询结果放到缓存&#xff08;内存&…...

​小程序 WxValidate.js ​再次封装

util.js // 合并验证规则和提示信息 const filterRules (objectItem) > {let rules {}, messages {};for (let key in objectItem) {rules[key] objectItem[key].rulesmessages[key] objectItem[key].message}return { rules, messages } }module.exports {filterRule…...

redis 第三章

目录 1.主从复制 2.哨兵 3.集群 4.总结 1.主从复制 结果&#xff1a; 2.哨兵 3.集群 4.总结 通过集群&#xff0c;redis 解决了写操作无法负载均衡&#xff0c;以及存储能力受到单机限制的问题&#xff0c;实现了较为完善的高可用方案。...

MYSQL常见面试题汇总

MYSQL常见面试题汇总 1. 什么是MYSQL&#xff1f;它有哪些特点&#xff1f; MYSQL是一种开源的关系型数据库管理系统。它具有以下特点&#xff1a; 高性能&#xff1a;MYSQL能够处理大量的并发请求&#xff0c;并提供快速的响应时间。可靠性&#xff1a;MYSQL具有数据持久化…...

Linux 内核中的内存管理:从物理内存到虚拟内存

Linux 内核中的内存管理&#xff1a;从物理内存到虚拟内存 引言 作为一名深耕操作系统和嵌入式开发的工程师&#xff0c;我深知资源管理的重要性。在系统开发中&#xff0c;合理的资源管理可以提高系统的性能和可靠性。在 Linux 内核中&#xff0c;内存管理是一个核心组件&…...

保姆级教程:在绿联NAS上用Docker Compose一键部署PaddleOCR,打造本地私有化OCR服务

绿联NASDocker Compose极简部署PaddleOCR&#xff1a;零命令行打造私有文字识别服务 家里堆积如山的合同发票需要电子化&#xff1f;团队内部敏感文档不敢用云端OCR&#xff1f;绿联NAS用户现在可以抛开复杂命令&#xff0c;用Docker Compose三分钟搭建企业级文字识别服务。本文…...

怎样快速掌握mGBA测试套件:5个专业技巧确保模拟器稳定性

怎样快速掌握mGBA测试套件&#xff1a;5个专业技巧确保模拟器稳定性 【免费下载链接】mgba mGBA Game Boy Advance Emulator 项目地址: https://gitcode.com/gh_mirrors/mg/mgba mGBA作为一款开源的高精度Game Boy Advance模拟器&#xff0c;其测试套件是确保模拟器稳定…...

WaveTools鸣潮工具箱:深度技术解析与高级配置指南

WaveTools鸣潮工具箱&#xff1a;深度技术解析与高级配置指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 对于追求极致游戏体验的《鸣潮》玩家而言&#xff0c;WaveTools不仅仅是一个简单的辅助工具&a…...

企业数字化转型基石:全面认识4A企业架构数据架构方案

数据架构是企业架构中连接业务、应用与技术的桥梁&#xff0c;通过数据资产目录厘清家底&#xff0c;数据标准统一语言&#xff0c;数据模型指导开发&#xff0c;数据分布拉通业务流&#xff0c;从而提升数据质量与运作效率&#xff0c;支撑业务决策与系统建设。 统一语言&…...

ROCm零基础入门实战指南:从环境搭建到高性能计算

ROCm零基础入门实战指南&#xff1a;从环境搭建到高性能计算 【免费下载链接】ROCm AMD ROCm™ Software - GitHub Home 项目地址: https://gitcode.com/GitHub_Trending/ro/ROCm AMD ROCm&#xff08;Radeon Open Compute&#xff09;是一套开源GPU计算平台&#xff0c…...

用树莓派Zero 2W和Qt5打造你的第一个工业控制面板(附完整源码)

用树莓派Zero 2W和Qt5打造工业级控制面板实战指南 在嵌入式开发领域&#xff0c;树莓派Zero 2W以其紧凑的尺寸和出色的能效比&#xff0c;正成为工业控制应用的理想选择。这款信用卡大小的计算机搭载四核64位处理器和512MB内存&#xff0c;足以运行复杂的Qt图形界面&#xff0c…...

DB2数据迁移实战:除了EXPORT/LOAD,这几种备份还原方法你试过吗?

DB2数据迁移实战&#xff1a;超越基础工具的高效策略全景 当测试环境的DB2数据库需要整体搬迁到新服务器时&#xff0c;大多数DBA的第一反应是使用EXPORT/LOAD这对经典组合。但真实场景中&#xff0c;数据迁移远不止简单的导出导入——表结构依赖、CLOB字段处理、编码转换、存储…...

3步告别卡顿:用鸣潮工具箱实现流畅游戏体验

3步告别卡顿&#xff1a;用鸣潮工具箱实现流畅游戏体验 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你的游戏还在卡顿吗&#xff1f;试试这个免费解决方案 你是否曾经在《鸣潮》的激烈战斗中遭遇突然的…...

5分钟搞定KEPserver V6配置:Java读取西门子PLC数据的保姆级教程

5分钟极速配置KEPserver V6与Java通信&#xff1a;西门子S7-1500数据采集实战指南 当工业现场的PLC数据需要与IT系统集成时&#xff0c;OPC技术栈往往是最直接的选择。但传统OPC配置过程繁琐的文档和复杂的依赖管理&#xff0c;常让工程师在项目初期耗费大量时间在环境搭建上。…...