flutter中App签名_flutter 签名-程序员宅基地

技术标签: android  android studio  ide  

一、创建 keystore

1.先输入命令:

keytool -genkey -v -keystore ./key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key


2.按提示输入相关参数,如下图所示

二、引用 keystore(

1.创建一个名为<app dir>/android/key.properties的文件,其中包含对密钥库的引用:

storePassword=第一步创建的key.jks文件时输入的密码
keyPassword=第一步创建的key.jks文件时输入的密码
keyAlias=key //.jks文件名,这里我们创建的key.jks,所以为key
storeFile=第一步创建的key.jks文件的存储路径 如:C:/Users/<user name>/key.jks

注意:

  • 保持文件私密,不要将它加入公共源代码控制中;
  • storeFile中的路径是以<app dir>/android/app/开始的相对路径,因此为了防止不必要的错误建议使用绝对路径

2.在gradle中配置签名

通过编辑<app dir>/android/app/build.gradle文件为您的应用配置签名

(1)添加
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

signingConfigs {
    release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['storePassword']
    }
}

(2)修改buildTypes 
buildTypes {
    release {
        signingConfig signingConfigs.release
        ndk{ // 必须加入这部分,否则可能导致编译成功的release包在真机中会闪退
             abiFilters "armeabi-v7a"
         }
    }
    debug {
         ndk {
             //这里要加上,否则debug包会出问题,后面三个为可选,x86建议加上不然部分模拟器回报错
             abiFilters "armeabi", "armeabi-v7a", "arm64-v8a",  "x86"
         }
     }
}

注意 :

release包在真机中闪退可能是因为打包时没有引入arm64的libflutterso文件导致在arm64架构手机上出现“兼容”问题。

主要是引用so库的问题arm64cpu架构是可以向下兼容的,就是arm64架构的cpu可以使用arm32的.so文件。出现问题真正原因是我们在引用so库时(引用的三方库中引用了so库)。

三、开启混淆

默认情况下 flutter 不会开启 Android 的混淆。

如果使用了第三方 Java 或 Android 库,也许你想减小 apk 文件的大小或者防止代码被逆向破解。

配置混淆

创建 /android/app/proguard-rules.pro 文件,并添加以下规则:

#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
复制代码

注意 :上述配置只混淆了 Flutter 引擎库,任何其他库(比如 Firebase)需要添加与之对应的规则。

开启混淆/压缩

打开 /android/app/build.gradle 文件,定位到 buildTypes 块。

在 release 配置中将 minifyEnabled 和 useProguard 设为 true,再将混淆文件指向上一步创建的文件。

android {
 
    ...
 
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

四、构建一个发布版(release)APK

如果您完成了签名步骤,则会对APK进行签名。

使用命令行:

  1. cd <app dir>
  2. 运行flutter build apk (flutter build 默认会包含 --release选项).

打包好的发布APK位于<app dir>/build/app/outputs/apk/app-release.apk

五、在设备上安装发行版APK

按照以下步骤在已连接的Android设备上安装上一步中构建的APK

  1. 用USB将Android设备连接到电脑
  2. 运行 cd <app dir> .
  3. 运行 flutter install .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shinechow/article/details/126072500

智能推荐

SpringBoot之ActiveMQ实现延迟消息_activemq 如何在控制面板创建延时消息topic-程序员宅基地

文章浏览阅读723次。【北京】 IT技术人员面对面试、跳槽、升职等问题,如何快速成长,获得大厂入门资格和升职加薪的筹码?与大厂技术大牛面对面交流,解答你的疑惑。《从职场小白到技术总监成长之路:我的职场焦虑与救赎》活动链接:码客 恭喜fpx,新王登基,lpl*b 我们是冠军一、安装activeMQ​ 安装步骤参照网上教程,本文不做介绍二、修改activeMQ配置文件​ broker新增配置信息 sch..._activemq 如何在控制面板创建延时消息topic

Tessent scan & ATPG (1)scan chain基本原理_tessent lpct-程序员宅基地

文章浏览阅读1.6w次,点赞27次,收藏193次。从制造缺陷开始,介绍scan chain的基本原理_tessent lpct

创建DOTA2本地数据库(一)-程序员宅基地

文章浏览阅读222次。在APP中,用本地数据库好于频繁的联网去获取相关数据。我使用SQLite作为本地的数据库,比较轻巧。英雄首先先建立英雄的数据库,暂时我先只设置ID,name,loaclized_name这三种,我这是在窗体应用程序里写的,不要在意那些细节,其实我们只是要先创建这么一个.db文件 public Form1() { I...

响应式编程库Reactor 3 Reference Guide参考文档中文版(v3.2.0)-程序员宅基地

文章浏览阅读231次。Project Reactor 是 Spring WebFlux 的御用响应式编程库,与 Spring 是兄弟项目。关于如何基于Spring的组件进行响应式应用的开发,欢迎阅读系列文章《响应式Spring的道法术器》。官方参考文档地址:http://projectreactor.io/docs/core/release/reference/中文翻译文档地址:http://htmlprevi..._reactor 指南中文版v3.0

TeamTalk部署问题及解决方案_teamtalk ../daeml: 没有那个文件或目录-程序员宅基地

文章浏览阅读727次。TeamTalk部署问题及解决方案1、部分源下载地址2、编译安装libiconv报错3、找不到tt4、编译im-server5、缺少daeml6、找不到mysql.h7、centos7 mini 安装后无法连接到网络8、使用mwget提高下载速度9、nginx: [emerg] unknown log format "access" in错误解决方法10、PHP报错1、部分源下载地址gmpwget ftp://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.gzmpfrwge_teamtalk ../daeml: 没有那个文件或目录

java中将多文件字节流压缩成zip-程序员宅基地

文章浏览阅读2.4k次。java中将多文件字节流压缩成zip核心就是使用java.util.zip包中的ZipOutputStream直接上核心代码/** * * @param zipFilePath zip保存路径 * @param zipFileName zip文件名 * @param byteList 文件字节码Map,k:fileNam..._java将多个字节流压缩成zip

随便推点

Config配置搜索路径_configservices路径-程序员宅基地

文章浏览阅读812次。前面所有的GIT远程端配置文件都放在是根目录的,所有请求默认都是根目录,但是有时候,项目很多,配置文件需要根据子目录来划分,这时候,就需要来配置搜索路径了;比如aaa项目的配置文件放aaa目录下,bbb项目的配置文件放bbb目录下,不配置的话是找不到的那些配置文件的,需要配置search-paths属性来实现在microservice-config-server-4001项目的yml文件加个配..._configservices路径

c++笔记-程序员宅基地

文章浏览阅读62次。多行代码的函数:std::cout << R"()";

【产品】PRD需求文档:云迹扶教(公益支教APP)_公益类app用户画像描述-程序员宅基地

文章浏览阅读2.2k次。简介:借助CSDN平台发布自己编写的需求文档。参考了前辈们的经验,编写如下(持续更新):正文:PRD:云迹扶教APP产品需求文档一、文档综述1.1版本历史 制订时间 制订人 制订内容 2021.06.13 Max 撰写文档 1.2输出环境 文档名称 云迹扶教A_公益类app用户画像描述

std::string转QString中文乱码_c++ 中文 string 转qstring乱码-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏8次。std::string cstring;QString qstring;//从std::string 到QStringqstring = QString(QString::fromLocal8Bit(cstring.c_str()));//从QString 到 std::stringcstring = std::string((const char *)qstring.toLocal8Bit().constData());_c++ 中文 string 转qstring乱码

html符号中文含义大全特殊,中文标点符号大全名称-程序员宅基地

文章浏览阅读2.6k次。中文的标点符号包括句号,逗号,感叹号,问号,引号,冒号等等,接下来分享常见的中文标点符号名称。常见的中文标点符号1.句号:【。】用于句子末尾,表示陈述语气。有时也可表示较缓和的祈使语气和感叹语气。2.问号:【?】用于句子末尾,表示疑问语气(包括反问、设问等疑问类型)。在多个问句连用或表达疑问语气加重时,可叠用问号。3.叹号:【!】用于句子末尾,主要表示感叹语气,有时也可表示强烈的祈使语气、反问语气..._html顿号

【加密算法】5 种常见的摘要、加密算法_摘要加密-程序员宅基地

文章浏览阅读994次。那么上面提到的这些能力,我们都可以利用哪些加密算法来实现呢?咱们接着往下看。加密算法整体上可以分为:不可逆加密、可逆加密。可逆加密又可以分为:对称加密、非对称加密。_摘要加密