Flutter项目打包生成APK

本文详细介绍了如何在Flutter项目中为安卓平台创建key.jks签名文件,包括使用keytool命令生成文件,设置别名和密码,以及在Android Studio中配置key.properties文件和build.gradle文件的过程。同时,文中提到了错误示例和解决方案,确保打包过程中避免常见问题。

flutter实现安卓打包:(以安卓Studio工具为例)

(1)创建key.jks文件

在安卓studio中调整至项目路径,例如:
我的项目所在地

E:\Flutter\fluttershuqi>

然后输入命令:

keytool -genkey -v -keystore E:\Flutter\fluttershuqi\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

最后的alias key , key指的是签名文件的别名。
其中E:\Flutter\fluttershuqi是我希望.jks文件创建的位置,

E:\Flutter\textdemo>keytool -genkey -v -keystore E:\Flutter\fluttershuqi\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  1
您的组织单位名称是什么?
  [Unknown]:  2
您的组织名称是什么?
  [Unknown]:  3
您所在的城市或区域名称是什么?
  [Unknown]:  4
您所在的省//自治区名称是什么?
  [Unknown]:  5
该单位的双字母国家/地区代码是什么?
  [Unknown]:  6
CN=1, OU=2, O=3, L=4, ST=5, C=6是否正确?
  []:  Y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000):
         CN=1, OU=2, O=3, L=4, ST=5, C=6
输入 <key> 的密钥口令
        (如果和密钥库口令相同, 按回车):
[正在存储E:\Flutter\fluttershuqi\key.jks]

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore E:\Flutter\fluttershuqi\key.jks -destkeystore E:\Flutter\fluttershuqi\key.jks -deststoretype pkcs1
2" 迁移到行业标准格式 PKCS12。

此时你的key.jks文件就创建成功了,
在这里插入图片描述
如果此过程报错,请参考如何打包发布flutter项目

(2) 将创建的jks文件粘贴至Flutter项目的指定位置
  • (1)方案一:直接放在android/app文件夹下,这样的话第3步中的storeFile写法为:
    storeFile=key.jks或者storeFile=E:/Flutter/fluttershuqi/android/app/key.jks

  • (2)也可以在app目录下再创建一个文件夹,例如文件夹key
    storeFile=key/key.jks或者storeFile=E:/Flutter/fluttershuqi/android/app/key/key.jks

方法(一):
(3) 在项目目录下的android文件夹下,创建一个名为key.properties的文件,并打开粘贴下面的代码:

错误写法:

storePassword=123456   //输入上一步创建KEY时输入的 密钥库 密码
keyPassword=123456    //输入上一步创建KEY时输入的 密钥 密码
keyAlias=key
storeFile=E:/Flutter/fluttershuqi/android/app/key.jks    //key.jks的存放路径  此处要是用/而不是\

此处是我自己遇到的问题,中间一直找不到问题,最后才发现这个文件注释不是//而是#,我开始错误使用了//导致一直报如下错,这是将后面的空格和//的内容都识别到key路径中了,所以才会找不到。

* What went wrong:
Execution failed for task ':app:validateSigningRelease'.
> Keystore file 'E:\Flutter\fluttershuqi\android\app\key.jks   \key.jks????��??��??' not found for signing config 'release
'.

正确写法:

storePassword=123456
keyPassword=123456
keyAlias=key
storeFile=E:/Flutter/fluttershuqi/android/app/key.jks

注意:后面连空格都不要有,不然也会报错

(4) 配置/android/app/build.gradle文件
  • 进入项目目录的/android/app/build.gradle文件,在
android {}

上面添加:

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
  • 修改
buildTypes {
    release {
        signingConfig signingConfigs.debug
    }
}

为:

 buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
  • 添加:
signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
方法(二):
(3)配置build.gradle文件
  • 修改
buildTypes {
    release {
        signingConfig signingConfigs.debug
    }
}

为:

signingConfigs {

        release {
                keyAlias 'key'
                keyPassword '123456'
                storeFile file('key.jks')//此种写法默认key文件在android-app文件夹下
                storePassword '123456'
//            keyAlias keystoreProperties['keyAlias']
//            keyPassword keystoreProperties['keyPassword']
//            storeFile file(keystoreProperties['storeFile'])
//            storePassword keystoreProperties['storePassword']
        }
        debug {
            keyAlias 'key'
            keyPassword '123456'
            storeFile file('key.jks')
            storePassword '123456'
//            keyAlias keystoreProperties['keyAlias']
//            keyPassword keystoreProperties['keyPassword']
//            storeFile file(keystoreProperties['storeFile'])
//            storePassword keystoreProperties['storePassword']
        }
    }
  buildTypes {
        release {
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.release
        }
    }
(4)打包 生成apk

输入命令:flutter build apk
即生成安装包,安装包位置:E:\Flutter\myflutter\build\host\outputs\apk\release,即在项目build文件夹下。

(5)关于备注内容
  • 修改应用名称和logo:
    在这里插入图片描述
Flutter 项目中构建和生成 APK 文件,可以通过命令行工具或配置相关文件来完成。以下是一些关键步骤和注意事项: ### 构建 APK 文件的基本命令 在项目根目录的终端中运行以下命令即可生成 APK 文件: ```bash flutter build apk ``` 该命令会生成一个通用的 APK 文件,适用于大多数设备,文件通常位于项目的 `build/app/outputs/flutter-apk` 目录下 [^2]。 ### 生成针对不同 CPU 架构的 APK 文件 为了优化应用性能,可以为不同的 CPU 架构生成独立的 APK 文件。使用以下命令: ```bash flutter build apk --split-per-abi ``` 该命令会生成多个 APK 文件,分别对应 `armeabi-v7a`、`arm64-v8a` 和 `x86_64` 架构,这些文件同样位于 `build/app/outputs/flutter-apk` 目录下 。 ### 修改应用名称和 Logo 在打包 APK 文件之前,可以修改应用名称和 Logo。这些修改通常涉及修改 `pubspec.yaml` 文件中的应用名称以及 `android/app/src/main/res` 目录下的图标文件 [^1]。 ### 混淆编译 为了提高应用的安全性,可以在构建 APK 文件时进行混淆编译。在 `android/app` 目录下创建混淆文件 `proguard-rules.pro`,并添加相应的混淆规则。以下是一些基本的混淆规则: ``` -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.** { *; } ``` 然后在构建命令中添加 `--obfuscate` 和 `--split-debug-info` 参数来启用混淆和调试信息分离: ```bash flutter build apk --obfuscate --split-debug-info=/<project-name>/<directory-name> ``` 该命令会生成混淆后的 APK 文件 [^3]。 ### 生成签名 APK 文件 为了发布应用,需要生成签名的 APK 文件。首先,创建一个名为 `/android/key.properties` 的文件,并包含对密钥库的引用: ``` storePassword=<创建 keystore 时的 storePassword> keyPassword=<创建 keystore 时的 keyPassword> keyAlias=key storeFile=<密钥库文件的位置 , 例如: F:/key.jks> ``` 然后,在 `android/app/build.gradle` 文件中配置签名配置,确保 `signingConfigs` 和 `buildTypes` 部分正确设置 [^4]。 ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值