Flutter的ios与android打包---完整踩坑路径

1. 修改基础信息

基础信息修改可以先不改,后面再改都行

1.1. 修改APP名称

1.1.1. android

1.1.2. ios

注意:不建议修改包名(非app名称),包名最好在项目创建时就写好,后期修改地方比较多

1.2. 修改版本号

pubspec.yaml

yml 复制代码
version: 0.0.1+1

2. Android打包

2.1. 配置权限

android/app/src/main/AndroidManifest.xml

权限配置看个人需要是否更改

xml 复制代码
    </application>
<!-- 网络权限 -->
  <uses-permission android:name="android.permission.INTERNET" />
</manifest>

2.2. 设置 sdk 版本

可改可不改

android/app/build.gradle

  • 以下版本号作为参考,可以不做更改
json 复制代码
defaultConfig {
  minSdkVersion 19
  compileSdkVersion 33
  targetSdkVersion 33
}

2.3. 签名证书配置

  • /Users/ch.w/Desktop/code/planx_app/android,这个是生成证书的路径,我直接写到项目路径下了
shell 复制代码
keytool -genkey -v -keystore /Users/ch.w/Desktop/code/planx_app/android -keyalg RSA -keysize 2048 -validity 10000 -alias key
  • 输入密码等,完成创建
  • 同样在android下新建keystore.properties 文件

android/keystore.properties

ini 复制代码
storePassword=654321
keyPassword=654321
keyAlias=key
storeFile=../key.jks
  • 添加到build.gradle配置中

android/app/build.gradle

dart 复制代码
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

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

    buildTypes {
         release {
            signingConfig signingConfigs.release
            // 启用缩减、混淆处理和优化功能,
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug{
            // debuge模式也使用证书
            signingConfig signingConfigs.release
            ndk {
                abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
            }
        }
    }
}

2.4. 打包

shell 复制代码
 flutter build apk

报错解决:

  • 该报错不影响打包,可以不做更改
  • 修改android/build.gradle 中的版本号
json 复制代码
buildscript {
    ext.kotlin_version = '1.8.22'
    // ....
    dependencies {
        classpath 'com.android.tools.build:gradle:8.0.0'
        //....
    }
}
  • 修改gradle的版本号

android/gradle/wrapper/gradle-wrapper.properties

arduino 复制代码
// ....
distributionUrl=https://services.gradle.org/distributions/gradle-8.0-all.zip

3. IOS打包

前提:

  • 拥有ios开发者账号
  • 使用mac电脑,需要用到xcode

3.1. Xcode可视化打包

  • 找到Runner.xcworkspace,双击打开
  • 建议先使用xcode打包,始终允许打包,并且生成ExportOptions.plist,命令行打包时候会用到

3.1.1. 自动生成证书

选择开发账号,自动生成证书

3.1.2. 新建App ID

开发者后台,新建appid

3.1.3. 在appStore后台新建app

  • 这一步非必需,不过后期如果要上传到app store,建议先新建,避免app名称后面被占用了

3.1.4. 打包

  • 此时可能有报错:
  • 解决方案:

到项目ios目录下,执行pod install

此时会弹出输入电脑开机密码的弹窗,输入密码后,选择总是允许

继续以下步骤:

报错: An SSL error has occurred and a secure connection to the server cannot be made.

解决方案:

  • 点击取消,再次选择distribute app重新打包

导出

查看导出的文件夹

  • 记住这个ExportOptions.plist,后续使用命令行打包时,我们直接引入这个问价就行
  • 这里我们打包的是adhoc,上传到分发平台,就可以测试了。
  • 这里我用的分发平台是:www.betaqr.com.cn/apps

3.1.5. 选择打包appstore,制作appstore的ExportOptions.plist

3.2. 命令行打包

  • 将上面步骤的ExportOptions.plist复制到项目中,并改名为:adhoc.plist(为了区分App Store包的plist文件)

使用命令:

adhoc

  • /Users/ch.w/Desktop/code/planx_app是我本地项目的地址
css 复制代码
flutter build ipa --release --export-options-plist=/Users/ch.w/Desktop/code/planx_app/ios/adhoc.plist

appstore

css 复制代码
flutter build ipa --release --export-options-plist=/Users/ch.w/Desktop/code/planx_app/ios/appStore.plist

打包成功:

4. 编写脚本完成自动打包

参考:flutter快速上手 - 掘金,中的打包篇章

这里就不细写了。

相关推荐
PineappleCoder3 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪3 小时前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯3 小时前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
源码获取_wx:Fegn08954 小时前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring
闲谈共视4 小时前
基于去中心化社交与AI智能服务的Web钱包商业开发的可行性
前端·人工智能·去中心化·区块链
狮恒4 小时前
OpenHarmony Flutter 分布式数据管理:跨设备数据同步与一致性保障方案
分布式·flutter·wpf·openharmony
CreasyChan4 小时前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发
嗝o゚4 小时前
鱼与熊掌可兼得?用Flutter+鸿蒙的混合架构破解性能与UI的世纪难题
flutter·架构·harmonyos
JIngJaneIL5 小时前
基于Java+ vue智慧医药系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
hashiqimiya6 小时前
两个步骤,打包war,tomcat使用war包
java·服务器·前端