Flutter 项目打包成 APK

3,492 阅读3分钟

友情链接

  1. iOS 3分钟实现自定义 Xcode 初始化的模板,提高开发效率
  2. 从 0 开始手把手教你制作自己的 Pod 库

注:

  • 本次所记录的打包流程全部都是在 VSCode上完成,Android Studio 也一样。
  • 本次使用 Gradle 配置打包

1、检查 & 安装 JDK

  • 检查当前 JDK 的版本号 java -version

检查 JDK 的版本号 如果已经显示当前 java version 版本号,说明 JDK 安装成功,或者之前就安装过,如果已经安装,可以忽略下面的安装步骤

  • 安装 JDK 可以选择终端安装 brew cask install oracle-jdk,显示 brew cask install oracle-jdk 即是安装成功。 因为我需要更新 Homebrew,所以使用官网下载安装的方式。
  1. JDK 官网下载地址,下载对应的版本,我的是 MBP,所以选择了 macOS Installer
  2. 安装成功后,用终端打开环境配置文件:vim .bash_profile,增加 export JAVA_HOME=$(/usr/libexec/java_home)

JDK 换将配置

  1. 保存并退出 esc -> wq
  2. 执行 source .bash_profile 更新配置文件并生效
  3. 检查 JDK 的版本号 ,看是否成功

2、生成签名证书 .jks

使用签名的主要作用是:

  1. 应用程序升级:只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!
  2. 应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。
  3. 代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。

**注意**:一旦给Apk签名并上线后,签名文件和密码别名等一定不能丢失,否则就等着跑路吧。

把生成证书的路径,替换成自己的,在终端执行下面的命令

keytool -genkey -v -keystore <存放的路径>/sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign

  1. genkey : 产生密钥
  2. keystore :
  3. <存放的路径>/sign.jks :证书的存放路径和名字
  4. keyalg RSA -keysize 2048 :使用 2048 位 RSA 算法对签名加密
  5. validity 10000 :有效期时间,这里是 10000天
  6. alias sign : 别名 sign

根据步骤,按照实际情况,输入内容,生成签名证书后的路径就是你上面命令中的路径 生成签名证书

3、配置打包文件

  • 导入上面创建好的证书, key 文件夹如果没有,则创建
 < flutter 项目>/android/app/key/sign.jks
  • 创建 key.properties 文件
 < flutter 项目>/android/key.properties

添加配置,可以复制已有的 properties 文件,修改名字和对应的内容,

storePassword=android
keyPassword=123456
keyAlias=sign
storeFile=key/sign.jks
  1. storePassword :
  2. keyPassword :生成签名证书输入的密库口令
  3. keyAlias :证书的别名
  4. storeFile :证书相对于 key.properties 的路径
  • 配置 build.gradle 文件
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

    signingConfigs {
        release {
            keyAlias 'sign'
            keyPassword 'android'
            storeFile file('key/sign.jks')
            storePassword 'android'
        }
    }

 build 文件

4、VSCode 最终的目录配置

VSCode 目录配置

Flutter 打包 生成apk

  • 在 VSCode 中的 终端中输入 flutter build apk,如果最终显示 ✓ Built ***,说明打包成功
  • build/app/outputs/flutter-apk/app-release.apk 是在项目中的子路径,到这里,APK 打包就已经顺利成功。

终端命令打包