跳至主要內容

打包

Emilia Zhen大约 2 分钟flutter

Flutter 客户端打包

配置app图标

在项目的/android/app/src/main/res/,文件夹里有很多mipmap-为前缀命名的文件夹,后面是像素密度,可以看出图标的分辨率

  • mdpi:160dpi
  • hdpi:240dpi
  • xhdpi:320dpi
  • xxhdpi:480dpi
  • xxxhdpi:640dpi

配置App名称、图标名称和系统权限

在项目的/android/app/src/main/AndroidManifest.xml

android:label="n" // 配置app的名称,支持中文
android:icon="@mipmap/ic_launcher" // APP图标的文件名称

生成keystore

在终端运行

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
  1. 通过flutter doctor -v找到Java binary at位置
  2. 复制路径位置,将有空格的文件夹以单引号包裹,指定你需要存放key.jks的路径
C:\'Program Files'\Android\'Android Studio'\jre\bin\keytool  -genkey -v -keystore H:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
  1. 在项目的android文件夹下创建一个名为key.properties文件并写入
storePassword=xxxxxx
//输入上一步创建KEY时输入的 密钥库 密码
keyPassword=xxxxxx
//输入上一步创建KEY时输入的 密钥 密码
keyAlias=key
storeFile=H:/key.jks
//key.jks的存放路径
  1. key生成好之后需要在/android/app/build.gradleandriod{这一行之前加入代码
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

并把android{中的buildTypes{}替换为

signingConfigs {
  release {
    keyAlias keystoreProperties['keyAlias']
    keyPassword keystoreProperties['keyPassword']
    storeFile file(keystoreProperties['storeFile'])
    storePassword keystoreProperties['storePassword']
  }
}
buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
  1. 直接在终端输入flutter build apk 就打包成功了,使用flutter install即可安装打包好的apk

打包失败报下载包失败的错误解决方法

C:\flutter\flutter\packages\flutter_tools\gradle目录下flutter.gradle

buildscript {
    repositories {
        // google()
        // jcenter()
                  //  Add
        maven { url'https://maven.aliyun.com/repository/google'}
        maven { url'https://maven.aliyun.com/repository/jcenter'}
        maven { url'http://maven.aliyun.com/nexus/content/groups/public'}
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
    }
}
....
class FlutterPlugin implements Plugin<Project> {
        // Change -> storage.flutter-io.cn
    private static final String MAVEN_REPO      = "https://storage.flutter-io.cn/download.flutter.io";


    void addFlutterDependencies(buildType) {
        String flutterBuildMode = buildModeFor(buildType)
        if (!supportsBuildMode(flutterBuildMode)) {
            return
        }
        String repository = useLocalEngine()
            ? project.property('local-engine-repo')
            : MAVEN_REPO
        project.rootProject.allprojects {
            repositories {
                maven {
                    url repository
                }
                             // Add
                maven { url'https://maven.aliyun.com/repository/google'}
                maven { url'https://maven.aliyun.com/repository/jcenter'}
                maven { url'http://maven.aliyun.com/nexus/content/groups/public'}
            }
        }

当前项目

buildscript {
    repositories {
        // google()
        // jcenter()
        maven{ url 'https://maven.aliyun.com/repository/google' }
        maven{ url 'https://maven.aliyun.com/repository/jcenter' }
        maven{ url 'https://maven.aliyun.com/repository/public'}
        maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'}
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'
    }
}
allprojects {
    repositories {
        // google()
        // jcenter()
        maven{ url 'https://maven.aliyun.com/repository/google' }
        maven{ url 'https://maven.aliyun.com/repository/jcenter' }
        maven{ url 'https://maven.aliyun.com/repository/public'}
        maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'}
    }
}

ios 打包

  1. 创建Apple开发者账号,在开发者平台上创建整数
  2. 创建Release版本,flutter build默认为--release
flutter clean
flutter packages get
flutter build ios
  1. 点击Xcodeopen,选择当前工程目录ios文件夹,打开Runner.xcworkspace 选择Product > Scheme > Runner 选择Product > Destination > Generic iOS Device
  2. 选择Product > Archive 以生成构建档案 弹出窗口里选择Ad Hoc 主要用于开发和测试,可以导出ipa文件提供安装;选择iOS App Store可以直接上传至AppStroe,也可以导出ipa文件手动上传至AppStore