Flutter 打包教程

Posted zhitianbai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter 打包教程相关的知识,希望对你有一定的参考价值。

1. APP 图标

规格说明

https://developer.android.com/google-play/resources/icon-design-specifications

https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/app-icon/

图标尺寸

android 512x512

ios 1024x1024

在线工具

https://www.designevo.com/cn/logo-maker/

https://icon.wuruihong.com/

图标目录

android/app/src/main/res

ios/Runner/Assets.xcassets/AppIcon.appiconset

2. 启动图片

规格说明

https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/#device-screen-sizes-and-orientations

https://developer.android.com/about/dashboards/index.html#Screens

https://uiiiuiii.com/screen/

图片尺寸

iPhone XS Max 1242px × 2688px

android xxhdpi xhdpi

3. Android 发布

证书签名说明

https://developer.android.com/studio/publish/app-signing?hl=zh-cn
使用签名的主要作用是:

应用程序升级:只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!

应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。

代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。

生成证书

# 在 macOS 或者 Linux 系统上,执行下面的命令,不用修改
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

#如果出现如下错误
No Java runtime present, requesting install.

# 需要安装java SDK或者使用
/Applications/Android\\ Studio.app/Contents/jre/jdk/Contents/Home/bin/keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

Gradle 配置

  • android/key.properties
storePassword=123456 
keyPassword=123456
keyAlias=key
storeFile=/Users/zhitianbai/key.jks
  • android/app/build.gradle
// 定义属性读取对象,读取 android/key.properties
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    compileSdkVersion 28

    ...

    // 签名配置
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {

        // 发布配置
        release {
            signingConfig signingConfigs.release
        }
    }
}

修改版本号

  • pubspec.yaml
version: 1.0.0+1

修改程序名称

  • android/app/src/main/AndroidManifest.xml
<application
    android:name="io.flutter.app.FlutterApplication"
    android:label="FlutterBase"
    android:icon="@mipmap/launcher_icon">

设置网络权限

  • android/app/src/main/AndroidManifest.xml
    </application>

    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

编译打包

flutter build apk 

输出目录

✓  Built build/app/outputs/flutter-apk/app-release.apk (31.2MB).

启动页

  • 图片

4. iOS 发布

修改版本号

  • 打开xcworkspace工程文件

  • Display Name 真正显示到用户屏幕上的 App 名称

  • Bundle Identifier 包名

  • Version(应用程序发布版本号)

    对应的就是CFBundleShortVersionString。该版本的版本号是三个时期分隔的整数组成的字符串:
    第一个整数代表重大修改的版本,如实现新的功能或重大变化的修订。 第二个整数表示的修订,实现较突出的特点。
    第三个整数代表维护版本。该键的值不同于CFBundleVersion标识。 如当前上架版本为1.1.0,之后你更新的时候可以改为1.1.1

  • Build(应用程序内部标示)
    对应的是CFBundleVersion。标识(发布或未发布)的内部版本号。用以记录开发版本的,每次更新的时候都需要比上一次高。如:当前版本是1,下一次就要大于1,比如2,3。

    比如团队打算发布1.0版本的时候,会发布很多build版本供测试或QA团队进行测试,你发布了很多build,因为一直在修改着代码,因此当你收到一条bug信息时候,你怎么知道是哪个build引起的问题呢,这时候build版本号的优点就可以体现出来了。

编译打包

flutter build ios

以上是关于Flutter 打包教程的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]

Flutterflutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘(代码片段

flutter解决 dart:html 只支持 flutter_web 其他平台编译报错 Avoid using web-only libraries outside Flutter web(代码片段

Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段

flutter Web打包