• Linux/CentOS 安装 flutter 与 jenkins 构建 (踩坑)


    不论在Ubuntu 还是 CentOS,强烈推荐使用snapd 安装,因为不用额外安装 Linux toolchain!

    由于我在Linux和Flutter还是小白,又在CentOS 7上有采用了手动安装Flutter,导致安装 Linux toolchain 时可把我坑惨了。官方的toolchain 在Ubuntu 上很方便,但在CentOS上 ninja,pkgconfig,libgtk-3-dev 没有直接的源,导致安装起来非常麻烦:

    apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev

    使用 snapd 安装则不需要这个步骤。

     一、安装snap

    Installing snap on CentOS | Snapcraft documentation

    1. yum install epel-release -y
    2. yum install snapd -y
    3. systemctl enable --now snapd.socket
    4. ln -s /var/lib/snapd/snap /snap

    二、snap 安装 flutter:

    snap install flutter --classic

    source /etc/profile,或重启系统后,flutter可被识别到。而后执行 

    flutter doctor

    注意,jenkins因为各种环境问题,可能会找不到 flutter,因此在脚本执行flutter前,PATH添加 snap路径:

    export PATH=$PATH:/var/lib/snapd/snap/bin

    三、升级 git

    • CentOS 7默认git版本是1.8.3
    • 此版本git存在BUG会导致Flutter识别的版本变为0.0.0-unknown
    1. yum -y install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
    2. yum -y update git

    或者使用snap 安装(还未尝试过) 

    sudo snap install git-ubuntu --classic

    四、flutter的 git依赖组件(可选)

    flutter pub 可以使用 git,但对于需要密码的git,如果使用http或https方式,用户名和秘密会有暴露的风险,建议使用SSH。如果是http或https,在jenkins flutter build 之前,将 pubspec.yaml 内的链接替换为git@xxx: :

    sed -i 's|https://xxxxxxx/|git@xxxxxxxx:|g' pubspec.yaml

     在打包机上生成ssh key:

    1. cd ~/.ssh
    2. # 没有 .ssh 则新建一个
    3. # xxxx 随意,key的名称
    4. ssh-keygen -t rsa -C "xxxx"

    注意:回车后,不要填任何东西,直接回车,不然flutter 的 git找不到 ssh 密钥
    Enter file in which to save the key (/xxx) (回车)
    Enter passphrase (回车)
    Enter same passphrase again: (回车)

    而后 把 id_rsa.pub 内容贴到 git 仓库的 ssh 授权中(不同仓库操作不一样,请自行搜索)

    最后验证 git 联通性:

    ssh -T git@xxxx

    当有提示 welcome 等信息时,就说明链接成功,有错误自行搜索下
     

    六、repositories 覆盖

    由于在app 的build.gradle中,flutter 要求添加以下脚本,导致我们自定义替换的repositories 无法替换掉它里面的 google 源:

    apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

      flutter SDK 的 flutter.gradle中有以下强制配置:

    1. buildscript {
    2. repositories {
    3. google()
    4. mavenCentral()
    5. }
    6. dependencies {
    7. /* When bumping, also update ndkVersion above. */
    8. classpath 'com.android.tools.build:gradle:4.1.0'
    9. }
    10. }

    导致如果google连不上,会出现很奇怪的  com.android.tools.build:gradle:4.1.0 找不到,google 仓库无法连接的编译bug。

    此时,只能对flutter.gradle 进行强制修改:

    1. buildscript {
    2. repositories {
    3.      maven {
    4.             try {allowInsecureProtocol = true} catch (Throwable e) {}
    5.             url "xxxxxxx" // 使用我们自己的 maven 或者国内源,例如 aliyun 的
    6.         }
    7. // google()
    8. // mavenCentral()
    9. }
    10. dependencies {
    11. /* When bumping, also update ndkVersion above. */
    12. classpath 'com.android.tools.build:gradle:4.1.0'
    13. }
    14. }

    此外,还有第三方插件也有类似的问题,也会出现各中 com.android.tools.build:gradle 找不到。此时需要在 rootProject 的build.gradle 添加以下脚本,以在依赖的子工程脚本执行前添加 我们的repositories覆盖顺序:

    1. subprojects {
    2. repositories {
    3. maven {
    4. url = "xxxx" // 要替换的 url
    5. }
    6. }
    7. buildscript.repositories {
    8. maven {
    9. url = "xxxx" // 要替换的 url
    10. }
    11. }
    12. }

    七、替换 pub 源:

    环境变量添加  PUB_HOSTED_URL 和 FLUTTER_STORAGE_BASE_URL,jenkins脚本增加:

    1. export PUB_HOSTED_URL=https://pub.flutter-io.cn
    2. export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

     八、执行gradle task:

    1. # 先在工程目录下执行 packages get
    2. flutter packages get
    3. #同步完成后,cd到 Android目录执行 gradlew
    4. cd android
    5. chmod 777 gradlew
    6. ./gradlew xxxxTask
    7. cd ..
    8. flutter build xxxxxx

    总结:

    1、使用snap 安装flutter,升级git

    2、repositories 覆盖

    3、Jenkins脚本要修改环境变量,大致为:

    1. export PUB_HOSTED_URL=https://pub.flutter-io.cn
    2. export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
    3. export PATH=$PATH:/var/lib/snapd/snap/bin
    4. # git 替换 ssh访问
    5. sed -i 's|https://xxx/|git@xxx:|g' pubspec.yaml
    6. flutter packages get
    7. cd android
    8. chmod 777 gradlew
    9. ./gradlew xxxTask
    10. cd ..
    11. flutter build appbundle --obfuscate --split-debug-info=./debug_info

    参考:

    如何在 Linux 上安装和设置 Flutter 开发环境-51CTO.COM

    linux部署flutter环境__Leo的博客-CSDN博客_centos flutter

  • 相关阅读:
    算法——买卖股票问题
    【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析
    ES6的面向对象编程以及ES6中的类和对象
    2023校招4399面试
    第15集丨知行合一
    Kubernetes网络组件介绍
    Django笔记九之model查询filter、exclude、annotate、order_by
    学习笔记---0基础+干货满满的单链表专题~~
    [软件工程] UML类图
    【云原生之k8s】K8s 管理工具 kubectl 详解(三)
  • 原文地址:https://blog.csdn.net/ceabie/article/details/127038819