Skip to content

Flutter打包apk(windows环境)

  1. 创建签名

    shell
    keytool -genkey -v -keystore D:\workSpace\3_projects\personal\dutch\android\upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
    • 其中,我将密钥文件生成到了项目根目录下的android文件夹下,通常情况下,密钥文件和配置文件不建议上传到git管理仓库,而android文件夹下的.gitignore也正好忽略了这二者的上传,所以我通常生成密钥文件就生成到android文件夹下

      image-20260226162423526

    • 创建签名的时候,需要设置密钥库口令,后续配置文件中要使用

    • 创建签名前会询问你姓名、所在城市什么的,直接回车忽略即可,询问填写的是否正确,输入y回车即可

    • upload的密钥口令我设置的与密钥库相同,所以按照提示直接按回车

      image-20260226162335093

  2. 创建配置文件:在项目的 android 目录下 创建一个名为 key.properties 的文件,内容如下:

    properties
    storePassword=上一步设置的密钥库
    keyPassword=与密钥库口令相同
    keyAlias=upload # 别名, 创建签名时 -alias参数 指定的值
    storeFile=D:\\workSpace\\3_projects\\personal\\dutch\\android\\upload-keystore.jks # 密钥库的绝对路径,windows路径必须使用双反斜杠!!!
    • storeFile的路径如上填写后,会有提示也需要将冒号转义(如下图),不必理会

      image-20260226170457593

  3. 添加签名配置:在 android/app/build.gradle.kts 文件中添加下面配置

    image-20260226162740841

    image-20260226162755367

    • 代码添加的位置建议严格按照上面图片的位置
    • 修改Gradle文件后,最好执行 flutter clean 命令清除缓存,防止其影响签名过程
  4. 开启开发者模式:设置 → 系统 → 高级 → 开发者选项

    image-20260226164503949

    • 未开启开发人员模式构建apk时会报错

      shell
      Please enable Developer Mode in your system settings. Run start ms-settings:developers
  5. 构建apk:flutter build apk --release

    image-20260226164847149

    • 构建成功,最终路径如上图,至于为什么还报错了,我就没细研究了,flutter小白一枚 😦
  6. 安装到Android手机

    1. USB连接设备到电脑上
    2. cd [project]
    3. flutter install
  7. 安装报错问题及解决方案(使用方案二解决问题)

    image-20260226165359603

    image-20260226165447462

  8. 构建apk并安装Android手机后,在涉及网络请求的页面报错

    tex
    ClientException with SocketException: Failed host lookup: 'api.exchangerate-api.com' (OS Error: No address associated with hostname, errno = 7),uri=https://api.exchangerate-api.com/v4/latest/USD
    • debug模式正常是因为在debug包下的 AndroidManifest.xml 文件里声明了权限

      image-20260226171920975

    • 所以在 android/app/src/main/AndroidManifest.xml 文件里也要加上权限,加上后再次构建apk并安装后即可解决

      xml
      <uses-permission android:name="android.permission.INTERNET" />

参考文档

MIT版权,未经许可禁止任何形式的转载