博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flutter学习 ---- TravisCI加持
阅读量:7093 次
发布时间:2019-06-28

本文共 5117 字,大约阅读时间需要 17 分钟。

Flutter号称统一Android端和IOS端开发,做到一份代码同时运行在两个平台上,从实际效果来看,流畅的体验、完善的文档,还是很值得一试的。不过其中却藏了一个神坑(对我来说),那就是你的Flutter应用要在IOS上运行,必须在macOS主机上打包才可以,吃着苹果的童鞋自然不用担心了。然而本人一台y400征战多年,目前资金池也处于资源紧缩状态,换苹果机这种高消耗的任务基本是排在优先级队列尾端(求土豪公司“包养” ?)。不过好在,还有线上自动构建工具TravisCI帮忙,打两个平台的安装包也不是梦。

本文目标

  • 通过TravisCI为Flutter项目 生成Android和IOS的安装包。
  • 把安装包放到Github Release供下载。

怎么把Github项目接入TravisCI这里就不再介绍了,网上已经有很多相关教程,接入工作非常的简单。我们要实现持续集成,说白了就是提供一个yml文件,让CI照着它跑一遍,至于它的语法,可以参考TravisCI官方文档介绍,其实跟Gitlab的CI差不多,说起来,目前工作中用的就是Gitlab,感觉界面、使用逻辑等比Github方便很多,尤其是WebIDE简直牛逼,线上就能做很多事,省去了把项目clone下来的麻烦。言归正传,因为是要打包APK和IPA,所以Chic里写的.travis.yml应该适用于大部分Flutter项目。我把CI分成三个阶段:test、打包APK、打包IPA。下面就这三个阶段分别介绍一下:

# jobs 用于执行不同的build stagejobs:  include:  - stage: test  - stage: deployAPK  - stage: deployIPA复制代码
  • Test 阶段

- stage: test    os: linux    language: generic    sudo: false    addons:      apt:        sources:        - ubuntu-toolchain-r-test        packages:        # Flutter依赖        - libstdc++6        - fonts-droid    before_script:    - git clone https://github.com/flutter/flutter.git -b beta --depth 1    script:    - "./flutter/bin/flutter upgrade"    - "./flutter/bin/flutter test"复制代码

测试主要是运行一下flutter test,跑一下测试用例,这个没啥好说的,根据官网的例子来写就可以。

  • 打包APK

- stage: deployAPK    os: linux    language: android    licenses:    - android-sdk-preview-license-.+    - android-sdk-license-.+    - google-gdk-license-.+    android:      components:      - tools      - platform-tools      - build-tools-27.0.3      - android-27      - sys-img-armeabi-v7a-google_apis-25      - extra-android-m2repository      - extra-google-m2repository      - extra-google-android-support    jdk: oraclejdk8    sudo: false    # 以上都是在安装AndroidSDK    env: APK_OUTPUT=build/app/outputs/apk/release/app-release.apk    addons:      apt:        sources:        - ubuntu-toolchain-r-test        packages:        - libstdc++6        - fonts-droid    #以上为Flutter环境搭建    before_script:    # 用你自己的解密命令替代    - openssl aes-256-cbc -K $encrypted_faf484425141_key -iv $encrypted_faf484425141_iv -in key.properties.enc -out android/key.properties -d    - openssl aes-256-cbc -K $encrypted_a1a476bece9a_key -iv $encrypted_a1a476bece9a_iv -in feng.jks.enc -out android/feng.jks -d    - git clone https://github.com/flutter/flutter.git -b beta --depth 1    script:    - "./flutter/bin/flutter upgrade"    - "./flutter/bin/flutter -v build apk --release"    deploy:      provider: releases      skip_cleanup: true      # 用你的api_key替代      api_key:        secure: uDRE0d3gZ5JYhl/jBiDp5z...      file: $APK_OUTPUT      on:        tags: true复制代码

首先是安装AndroidSDK,这个TravisCI已经有很多现成的例子了,主要关注script阶段我们如何利用flutter build apk --release生成签名APK。

  1. 准备key.properties和.jks
    搞过Android开发的应该对这两个文件不陌生,如何生成jks网上有很多教程,这里就不再赘述了,key.properties其实就是jks中的密码等参数,文件内容如下
storePassword=yourpasskeyPassword=yourpasskeyAlias=aliasstoreFile=../your.jks复制代码

把这两个文件放在Flutter项目的android目录下,修改app中的build.gradle

// -- New --def keystorePropertiesFile = rootProject.file("key.properties")def keystoreProperties = new Properties()keystoreProperties.load(new FileInputStream(keystorePropertiesFile))android {    ...    // -- New --    signingConfigs {        release {            keyAlias keystoreProperties['keyAlias']            keyPassword keystoreProperties['keyPassword']            storeFile file(keystoreProperties['storeFile'])            storePassword keystoreProperties['storePassword']        }    }    // -- Change --    buildTypes {        release {            signingConfig signingConfigs.release        }    }    ...}复制代码

注意:key.properties和jks文件必须在Git中忽略

  1. 加密key.properties和jks
    利用TravisCI提供的cli工具,可以对单个文件进行加密:
travis encrypt-file [文件名].jks复制代码

会生成一个加密文件*.jks.enc,和解密命令

openssl aes-256-cbc -K $encrypted_faf484425141_key -iv $encrypted_faf484425141_iv -in key.properties.enc -out android/key.properties -d复制代码

把这个enc文件放在android下并加入Git,解密命令可以替换上面的示例代码中的标记部分。key.properties文件也是一样的操作。

  1. 上传到GithubRelease
    上传到Release就很简单了,利用TravisCI提供的命令行工具,执行 travis setup releases 就会自动在你的.travis.yml中添加deploy语句,我们主要需要api_key那块,替换示例代码的标记部分。 经过以上步骤,你应该就能在Github Release上看到打包好的app_release.apk,可以直接下载安装。

如果碰到问题,建议多查看TravisCI官方文档,和蒲公英的持续集成介绍。对照Chic的.travis.yml文件修复问题。

  • 打包IPA

- stage: deployIPA    os: osx    language: objective-c    osx_image: xcode9.2    before_script:    - pip2 install six    - brew update    - brew install libimobiledevice    - brew install ideviceinstaller    - brew install ios-deploy    # 以上安装xcode环境    - git clone https://github.com/flutter/flutter.git -b beta --depth 1    script:    - "./flutter/bin/flutter upgrade"    - gem install cocoapods    - pod setup    - "./flutter/bin/flutter -v build ios --release --no-codesign"    - mkdir Runner    - mkdir Runner/Payload    - cp -r build/ios/iphoneos/Runner.app Runner/Payload/Runner.app    - cd Runner    - zip -r Runner.ipa Payload    deploy:      provider: releases      skip_cleanup: true      #跟Android的api_key是一致的      api_key:        secure: uDRE0d3gZ5JYhl/jBiDp5zv32fH...      file: Runner.ipa      on:        tags: true复制代码

打IOS平台的安装包相对Android麻烦了很多,主要是证书不好搞,个人开发者证书一年99美元。网上一些的证书服务也不便宜,所以目前虽然打了一个IPA包,但是没有签名,不能安装。等以后有条件了再更新使用方法,有条件的童鞋可以在这个IPA包的基础上继续探索,比如fastlane自动打包、发布啥的,国内也有蒲公英提供类似的服务。

效果

项目地址:

参考

转载地址:http://sjaql.baihongyu.com/

你可能感兴趣的文章
bash shell快捷键
查看>>
Android判断是平板还是手机
查看>>
Nginx 499错误
查看>>
Spring Boot实践--集成WebServices基础开发
查看>>
使用history.back(-1)的问题
查看>>
ubuntu 重设crontab -e的默认编辑器
查看>>
[unity3d]unity中C#委托的应用
查看>>
我的友情链接
查看>>
gson 处理泛型
查看>>
pssh 自动化运维
查看>>
主机上的vsphere ha 代理无法访问其它主机的部分管理网络地址
查看>>
网站在架构时要考虑的事情
查看>>
MySQL修改root密码的多种方法
查看>>
android中WebView小结
查看>>
7、yum 学习笔记
查看>>
gentoo-livedvd安装
查看>>
myphpadmin导入SQL文件大小的限制
查看>>
linux内核源码目录结构
查看>>
linux 文本命令之----tr
查看>>
Failed to execute goal 拒绝访问
查看>>