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快速上手 - 掘金,中的打包篇章

这里就不细写了。

相关推荐
子兮曰6 小时前
Bun v1.3.14 深度解析:Image API、HTTP/3、全局虚拟存储与五十项变革
前端·后端·bun
kyriewen7 小时前
今天,百年巨头一次砍了9200人,而一个离职科学家的实话让全网睡不着觉
前端·openai·ai编程
问心无愧05137 小时前
ctf show web 入门42
android·前端·android studio
kyriewen7 小时前
老板逼我上AI,我偷偷在浏览器里跑LLaMA,省下20万API费
前端·react.js·llm
Beginner x_u8 小时前
前端八股整理(手写 02)|数组转树、数组扁平化、随机打乱一个数组
前端·数组·数组转树·数组扁平化
KaMeidebaby8 小时前
卡梅德生物技术快报|禽类成纤维细胞 FISH 实验:鸟类性别染色体基因定位技术实现与数据验证
前端·数据库·其他·百度·新浪微博
天若有情6738 小时前
前端高阶性能优化:跳出传统懒加载与预加载,基于用户行为做轻量预判加载
前端·性能优化
小小小小宇8 小时前
前端转后端:SQL 是什么
前端
张元清9 小时前
React Observer Hooks:7 种监听 DOM 而不写样板代码的方式
前端·javascript·面试
广州华水科技9 小时前
单北斗GNSS变形监测是什么?主要有怎样的应用与优势?
前端