学习Flutter中的打包过程 - 生成纯Flutter项目的Android应用程序包(flutter技巧)(flutter基础教程)

访客 107 0

###前言

在前文中,我们已经介绍了Flutter中一些基本Widget的使用方法。接下来,我们将重点讲解如何在实际项目中构建和生成Android包。本文将主要介绍纯Flutter项目生成Android包的方法,并分享我们在此过程中遇到的问题。现在,让我们进入正文部分吧!

  • 1、生成签名文件
    这个步骤对于一个Android开发来说应该是很简单的,这里我就不进行赘述,需要的小伙伴可以参考Android的签名文件生成两种方法
  • 2、配置gradle文件
    在/android/目录下创建一个key.properties的文件,包含我们所需要一些内容,例如
在android/app/build.gradle文件中添加以下信息:

```
storePassword 你签名设置的密码
keyPassword 你签名设置的密码
keyAlias 你签名的别名
storeFile 你的签名文件存放的路径
``` 
下面是改写后的文本:

```java
def keystorePropertiesFile = rootProject.file(key.properties)
def keystoreProperties = new Properties()

if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    ...
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
}
``` 

接下来,在android/app/build.gradle文件中插入以下内容

在进行打包之前,需要对Android的配置进行一些调整。具体如下:

```
android {
    ...
    buildTypes {
        release {
            signingConfig signingConfigs.release  // 使用正式release配置
            minifyEnabled true // 是否压缩
            useProguard true // 打开混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 配置混淆文件
        }
    }
}
```

经过以上的前期配置,现在可以执行以下命令来进行打包。 
  • cd到工程目录下
  • flutter build apk
    顺利的话我们会看到如下内容
在MacBook-Pro上的tianchibinde文件夹中,使用Flutter构建APK时,您正在生成一个包含android-arm、android-arm64和android-x64二进制文件的大型APK。如果您要将应用程序部署到Play Store上,建议使用应用程序捆绑包或拆分APK以减小APK大小。要生成应用程序捆绑包,请运行以下命令:flutter build appbundle --target-platform android-arm,android-arm64,android-x64。了解更多信息,请访问:https://developer.android.com/guide/app-bundle。要按ABI拆分APK,请运行以下命令:flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi。了解更多信息,请访问:https://developer.an 

Q1: ProcessException: Executable contains incompatible CPU type. The complete log is as follows:

ProcessException: 在可执行文件中存在错误的CPU类型
命令:/Users/tiancb/Desktop/Android/flutter/bin/cache/artifacts/engine/android-arm-release/darwin-x64/gen_snapshot --causal_async_stacks --deterministic --snapshot_kind=app-aot-elf --elf=/Users/tiancb/Desktop/Flutter/flutter_build_apk/build/app/intermediates/flutter/release/android-arm/app.so --strip --no-sim-use-hardfp --no-use-integer-division /Users/tiancb/Desktop/Flutter/flutter_build_apk/build/app/intermediates/flutter/release/android-arm/app.dill#0      
runCommandAndStreamOutput (package:flutter_tools/src/base/process.dart:142:27)                                               
#1      GenSnapshot.run (package:flutter_tools/src/base/build.dart:75:12)
#2      AOTSnapshotter.build. (package:flutter_tools/src/base/build.dart:211:27)
#3      AOTSnapshotter._timedStep (package:flutter_tools/src/base/build.dart:344:33)                                               
#4      AOTSnapshotter.build (package:flutter_tools/src/base/build.dart:210:13)                                               
#5      BuildAotCommand.runCommand (package:flutter_tools/src/commands/build_aot.dart:149 :56)
#6 FlutterCommand.verifyThenRunCommand(package :flutter_tools /src /runner /flutter_command .dart :478 :18)  
 #7 FlutterCommand.run. ( package : flutter _tools /src /runner )  
 #8 AppContext.run. ( package : flutter _tools )  
 #9 _rootRun( dart:async/zon e. dart:1124:13)
#10_CustomZone .run( dart:async/zon e. dart:1021:19)
#11_runZoned( dart:async/zon e. dart:1516:10)
#12 runZoned( dart:async/zon e. ) 
#13 AppContext.run( package : flutter _tools /src /base/context .dart :152 :18)  
 #14 FlutterCommand.run ( package : flutter _tools /src /runner/flutter_command .dart :375:20)
#15 CommandRunner.runCommand (package:args/command_runner.dart:197:27)
#16 FlutterCommandRunner.runCommand. ( package : flutter _tools/src/runner/flutter_command_runner.dart:396 :21)  
 #17 AppContext.run. ( package : flutter_tools/src/base/context .dart :153 :29) 
 #18_rootRun( dart:async/zone.dart )  
 #19_CustomZone .run( d art:a sync/zone.d art )
 #20_runZoned( d art:a sync/zone.d art )
 #21 runZoned (dart:async/zone.dart)
 #22 AppContext.run (package:flutter_tools/src/base/context.dart:152:18)                                               
 #23 FlutterCommandRunner.runComman d(package:flutter_tools/src/runne   

运行以下命令以接受Android许可证:flutter doctor --android-licenses

执行完之后会有一个

请确认是否接受?(y/N):直接选择y即可。 

Q2 - Could not download …
完整的错误日志是

无法解析配置“:app:releaseCompileClasspath”的所有文件。无法下载 armeabi_v7a_release.jar (io.flutter:armeabi_v7a_release:1.0.0-af04338413c3ed73316350f64248a152433073b6)。无法获取资源'http://download.flutter.io/io/flutter/armeabi_v7a_release/1.0.0-af04338413c3ed73316350f64248a152433073b6/armeabi_v7a_release-1.0.0-af04338413c3ed73316350f64248a152433073b6.jar'。无法访问'http://download.flutter.io/io/flutter/armeabi_v7a_release/1.0.0-af04338413c3ed73316350f64248a152433073b6/armeabi_v7a_release-1.0.0-af04338413c3ed73316350f64248a152433073b6.jar'。连接到 download.flutter.io 失败:80 [download.flutter.io / 172,217,160,80,download.flutter.io / 2404:68001] 失败:主机不可达(连接失败)。
* 尝试:
运行时使用--stacktrace选项获取堆栈跟踪。运行时使用--info或--debug选项获取更多日志输出。运行时使用--scan以获得完整的洞察力。
* 出了什么问题:   

翻墙 - 你懂的

结语

至此,关于纯Flutter项目的打包过程已经详细介绍完毕。

欢迎大家指正,以下是我Flutter系列的链接,将持续更新。

文章系列:探索 Flutter 的奇妙世界

  • Flutter 学习 - 开篇
  • Flutter 学习 - 基础框架
  • Flutter 学习 - 网络请求和数据解析
  • Flutter 学习 - Widget 之 Text
  • Flutter 学习 - Widget 之 RichText
  • Flutter 学习 - Widget 之 Image和Icon
  • Flutter 学习 - Widget 之 TextField
  • Flutter 学习 - Widget 之 菜单按钮
  • Flutter 学习 - Widget 之 布局 Widget
  • Flutter 学习 - 容器类Widget
  • Flutter 学习 - 可滚动的 Widget
  • Flutter 学习 - 功能类Widget

更多关于技术相关的内容请关注博主公众号–迷途程序猿
学习Flutter中的打包过程 - 生成纯Flutter项目的Android应用程序包(flutter技巧)(flutter基础教程)-第1张图片-谷歌商店上架

标签: 谷歌商店上架 文件 命令

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~