给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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《2023中国开发者调查报告》探索2023中国开发者的技术创新与挑战:AIoT、云原生、国产数据库等领域的发展与前景

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

[论文阅读笔记24]Social-STGCNN: A Social Spatio-Temporal GCNN for Human Traj. Pred.

论文: 论文地址 代码: 代码地址 作者在这篇文章中直接用GNN对目标的轨迹时空特征进行建模, 并用时序CNN进行预测, 代替了训练难度较大和速度较慢的RNN类方法. 0. Abstract 行人轨迹预测是一个比较有挑战性的任务, 有着许多的应用. 一个行人的轨迹不仅是由自己决定的, 而且受…

[JavaScript游戏开发] 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测

系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 文章目录 系列文章目录前言一、本章节效果图二、介绍2.1、准备地图素材2.2、封装地图上…

前端食堂技术周刊第 91 期:2023 npm 状态、TC39 会议回顾、浏览器中的 Sass、React 18 如何提高应用程序性能

美味值:🌟🌟🌟🌟🌟 口味:茶椰生花 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来看下…

Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期

初始Spring 一、Spring核心概念1.1IoC(Inversion of Contral):控制反转1.2IoC代码实现1.2DI代码实现 二、bean的相关操作2.1bean的配置2.1.1bean的基础配置2.1.2bean的别名配置2.1.3bean的作用范围配置 2.2bean的实例化 - - 构造方法2.3bean的实例化 - - 实例工厂与…

【软件测试】webdriver常用API演示(Java+IDEA+chrome浏览器)

1.元素定位方法 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名&#xf…

粘包处理的方式

为什么出现粘包: 发送端在发送的时候由于 Nagel 算法的存在会将字节数较小的数据整合到一起发送,导致粘包;接收端不知道发送端数据的长度,导致接收时无法区分数据; 粘包处理的方式: 通过在数据前面加上报…

flask 实现简单的登录系统demo

你提供的代码是一个基本的Flask应用程序,实现了一个简单的登录系统。以下是代码的详细解释: 1. 导入必要的模块:os 用于生成密钥,Flask 用于创建Web应用程序。 2. 创建Flask应用程序的实例,并为会话管理设置一个密钥。…

如何提高自动化测试覆盖率

实施自动化测试最重要的就是要保证其可用性,而不少同学写了不少自动化测试用例,但感觉到其可用性不高。究其原因,不是自动化测试本身的问题,是实施自动化测试的时候没有考虑周全。 第一,不合事宜地引入自动化测试 在公…

C++ | 红黑树以及map与set的封装

目录 前言 一、红黑树 1、红黑树的基本概念 2、红黑树相关特性 3、红黑树结点的定义 4、红黑树的查找 5、红黑树的插入 6、二叉树的拷贝构造与析构 7、红黑树的检测 8、红黑树总结 二、map与set的封装 1、红黑树的结点 2、红黑树迭代器 3、set的封装 4、map的封…

一、前端高德地图注册、项目中引入、渲染标记(Marker)and覆盖物(Circle)

首先说明一下,下面的流程只是个人摸索and看文档梳理出来的,并不作为完全正确的流程。 首先,注册 高德开放平台 没有注册的可以点击右上角点击注册; 我们点个人的就ok; 信息完善之后我们到控制台,点击 应…

使用Feign出现空指针异常

说明:本文记录一次偶然出现的空指针异常,在微服务架构中,一个服务在调用另一个服务时,出现了空指针异常。 业务描述:在做订单超时功能时,大家都知道,可以使用RabbitMQ延迟队列,下单…

二、SQL-6.DCL-2).权限控制

*是数据库和表的通配符,出现在数据库位置上表示所有数据库,出现在表名位置上,表示所有表 %是主机名的通配符,表示所有主机。 e.g.所有数据库(*)的所有表(*)的所有权限(a…

关于Docker的基本概念和使用

关于Docker的基本概念和使用 一、Docker 概述1、Dcker的概念2、容器的优势3、Docker与虚拟机的区别4、容器在内核中支持2种重要技术5、Docker核心概念 二、安装 Docker1、安装依赖包2、设置阿里云镜像源3、安装 Docker-CE并设置为开机自动启动3、查看 docker 版本信息4、docker…

程序员,必须要知道的热门开源项目!

🏆 文章目标:了解热门开源项目 🍀 入门篇:程序员,必须要知道的热门开源项目! ✅ 创作者:熊猫Jay ✨ 个人公众号: 熊猫Jay字节之旅 (文末有链接) 🍁 展望:若本篇讲解内容帮助到您,请帮…

Java并发编程面试题

Author 郑金维 并发编程面试题1 一、原子性高频问题: 1.1 Java中如何实现线程安全? 多线程操作共享数据出现的问题。 锁: 悲观锁:synchronized,lock乐观锁:CAS 可以根据业务情况,选择ThreadLocal&am…

PHP 3des加解密新旧方法可对接加密

一、旧3des加解密方法 <?php class Encrypt_3DES {//加密秘钥&#xff0c;private $_key;private $_iv;public function __construct($key, $iv){$this->_key $key;$this->_iv $iv;}/*** 对字符串进行3DES加密* param string 要加密的字符串* return mixed 加密成…

配置IPv4 over IPv6隧道示例

IPv4 over IPv6隧道&#xff1a; 在IPv4 Internet向IPv6 Internet过渡后期&#xff0c;IPv6网络被大量部署后&#xff0c;而IPv4网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv6网络上创建隧道&#xff0c;从而实现IPv4孤岛的互联&#xff0c;IPv4孤岛能通过IPv6公…

基于STM32CubeMX和keil采用STM32F407的基本定时器中断实现LED闪烁

文章目录 前言1. 电路原理图理解2. 基本定时器2.1 STM32定时器中断的流程&#xff1a;2.2 部分参数详解2.2.1 时钟源2.2.2 预分频系数2.2.3 自动重装载值 3. STM32CubeMX参数配置3.1GPIO配置3.2 时钟配置3.2 配置定时器相关参数3.3 Debug配置3.4 中断配置3.5 代码生成 4. keil代…

关于Java中的Lambda变量捕获

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 目录 一、Lambda表达式语法 二、Lambda中变量捕获 一、Lambda表达式语法 基本语法: (parameters) -> expression 或 (parameters) ->{ statements; } Lambda表达式由三部分组成&a…