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

yum install epel-release -y

yum install snapd -y

systemctl enable --now snapd.socket

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
yum -y install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

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:

cd ~/.ssh
# 没有 .ssh 则新建一个

# xxxx 随意,key的名称
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中有以下强制配置:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        /* When bumping, also update ndkVersion above. */
        classpath 'com.android.tools.build:gradle:4.1.0'
    }
}

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

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

buildscript {
    repositories {
        maven {
            try {allowInsecureProtocol = true} catch (Throwable e) {}
            url "xxxxxxx" // 使用我们自己的 maven 或者国内源,例如 aliyun 的
        }

        // google()
        // mavenCentral()
    }
    dependencies {
        /* When bumping, also update ndkVersion above. */
        classpath 'com.android.tools.build:gradle:4.1.0'
    }
}

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

subprojects {
    repositories {
        maven {
            url = "xxxx" // 要替换的 url
        }
    }

    buildscript.repositories {
        maven {
            url = "xxxx" // 要替换的 url
        }
    }
}

七、替换 pub 源:

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

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

 八、执行gradle task:

# 先在工程目录下执行 packages get
flutter packages get

#同步完成后,cd到 Android目录执行 gradlew
cd android
chmod 777 gradlew

./gradlew xxxxTask

cd ..

flutter build xxxxxx

总结:

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

2、repositories 覆盖

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

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
export PATH=$PATH:/var/lib/snapd/snap/bin

# git 替换 ssh访问
sed -i 's|https://xxx/|git@xxx:|g' pubspec.yaml

flutter packages get

cd android
chmod 777 gradlew

./gradlew xxxTask

cd ..

flutter build appbundle --obfuscate --split-debug-info=./debug_info

参考:

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值