likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 32

1. 修改基础信息

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

1.1. 修改APP名称

1.1.1. android

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

1.1.2. ios

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

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

1.2. 修改版本号

pubspec.yaml

version: 0.0.1+1

2. Android打包

2.1. 配置权限

android/app/src/main/AndroidManifest.xml

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

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

2.2. 设置 sdk 版本

可改可不改

android/app/build.gradle

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

2.3. 签名证书配置

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

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

  • 同样在android下新建keystore.properties 文件

android/keystore.properties

storePassword=654321
keyPassword=654321
keyAlias=key
storeFile=../key.jks
  • 添加到build.gradle配置中

android/app/build.gradle

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. 打包

 flutter build apk

报错解决:

  • 该报错不影响打包,可以不做更改

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

  • 修改android/build.gradle 中的版本号
buildscript {
    ext.kotlin_version = '1.8.22'
    // ....
    dependencies {
        classpath 'com.android.tools.build:gradle:8.0.0'
        //....
    }
}
  • 修改gradle的版本号

android/gradle/wrapper/gradle-wrapper.properties

// ....
distributionUrl=https://services.gradle.org/distributions/gradle-8.0-all.zip

3. IOS打包

前提:

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

3.1. Xcode可视化打包

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

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

3.1.1. 自动生成证书

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

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

3.1.2. 新建App ID

开发者后台,新建appid

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

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

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

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

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

3.1.3. 在appStore后台新建app

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

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

3.1.4. 打包

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

  • 此时可能有报错:

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

  • 解决方案:

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

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

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

继续以下步骤:

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

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

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

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

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

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

解决方案:

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

导出

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

查看导出的文件夹

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

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

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

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

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

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

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

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

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

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

3.2. 命令行打包

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

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

使用命令:

adhoc

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

appstore

flutter build ipa --release --export-options-plist=/Users/ch.w/Desktop/code/planx_app/ios/appStore.plist

打包成功:

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

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

这里就不细写了。

转载自:https://juejin.cn/post/7295681529606848522
评论
请登录