打包
大约 2 分钟
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
- 通过
flutter doctor -v找到Java binary at位置 - 复制路径位置,将有空格的文件夹以单引号包裹,指定你需要存放
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
- 在项目的
android文件夹下创建一个名为key.properties文件并写入
storePassword=xxxxxx
//输入上一步创建KEY时输入的 密钥库 密码
keyPassword=xxxxxx
//输入上一步创建KEY时输入的 密钥 密码
keyAlias=key
storeFile=H:/key.jks
//key.jks的存放路径
key生成好之后需要在/android/app/build.gradle的andriod{这一行之前加入代码
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
}
}
- 直接在终端输入
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 打包
- 创建
Apple开发者账号,在开发者平台上创建整数 - 创建
Release版本,flutter build默认为--release
flutter clean
flutter packages get
flutter build ios
- 点击
Xcode的open,选择当前工程目录ios文件夹,打开Runner.xcworkspace选择Product>Scheme>Runner选择Product>Destination>Generic iOS Device - 选择
Product>Archive以生成构建档案 弹出窗口里选择Ad Hoc主要用于开发和测试,可以导出ipa文件提供安装;选择iOS App Store可以直接上传至AppStroe,也可以导出ipa文件手动上传至AppStore
