# Flutter 开发,安卓开发

基于 Linux 容器远程开发,

## Usage

.devcontainer/Dockerfile
```
FROM jianboy/flutter-dev-container:3.13.5

```

## Develop

锁定版本:

```
flutter 2.0.5
dart 2.12.3
gradle 7.4-all
java   17
kotlin 1.7.10
android sdk  33
```

```
flutter 3.7.12
dart 2.19.6
gradle 7.4-all
java   17
kotlin 1.7.10
android sdk  21-33
```

```
flutter 3.19.6
dart
gradle tool 7.2.2 gradle-7.5-all.zip
java   17.0.11-ms
21.0.1-ms
11.0.23-ms

kotlin 1.7.10
android sdk  21-33

```

coding 目前在用的版本:

```
sift-docker.pkg.coding.net/flutter-team/dev-container/dev-allinone:1.0.12-flutter
```


支持 flutter 开发
更新 python3 支持,环境变量添加到.bashrc


Codespaces在用的版本:

codespaces默认环境就集成了众多开发语言,但是不包含flutter,为此只需要未flutter创建容器即可:
```
docker login --username jianboy
docker build  -f .devcontainer/Dockerfile2 -t jianboy/flutter-dev-container:3.13.5 .
docker push jianboy/flutter-dev-container:3.13.5

```
已知问题:无法使用docker,无其他环境


构建 apk
```
      - uses: gradle/gradle-build-action@v2
        with:
          arguments: publishToMavenLocal
```



rclone 同步apk

```
    # Setup Rclone
    - name: Setup Rclone
      uses: AnimMouse/setup-rclone@v1
      with:
        rclone_config: ${{ secrets.RCLONE_CONFIG }}

    # # Sync from Tencent COS
    - name: Rclone Sync 
      run: |
          rclone copy TencentCOS:${{ secrets.COS_CDN_BUCKET }} ./ --transfers=8 --checkers=16
      env:
        RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }}

    # Rclone Sync to B2 & R2
    - name: Rclone Sync 
      run: |
          rclone copy ./ Cloudflare:${{ secrets.CF_R2_BUCKET }} --transfers=8 --checkers=16 --exclude=.git/** --exclude=.github/** --exclude=README.md
          rclone copy ./ Backblaze:${{ secrets.B2_BUCKET }} --transfers=8 --checkers=16 --exclude=.git/** --exclude=.github/** --exclude=README.md
      env:
        RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }}
```


## GitHub Action ipa:

本章介绍通过 github 托管代码,每次提交代码,github action 自动触发构建ipa,发布IOS。

### 安装 Apple 证书

打包证书 .p12, 描述文件 .mobileprovision 

P12_BASE64
P12_PASSWORD

```
- name: Install Apple Certificate
  uses: apple-actions/import-codesign-certs@v1
  with:
    p12-file-base64: ${{ secrets.P12_BASE64 }}
    p12-password: ${{ secrets.P12_PASSWORD }}
```

## Github Action 构建发布 apk

包含初始化安卓环境,构建,推送消息,提交,上传到应用商店等等

## Notify on Slack

配置 SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 通知的路径


## Deploy to Play Store

需要到 google console 生成 service_account.json,配置 {{ secrets.SERVICE_ACCOUNT_JSON }} 

## Sign AAB

一种方法可以在代码中存放 keys.jks,然后在 build.gradle 上配置 sign。另外一种方法,使用 r0adkll/sign-android-release@v1,配置 ${{ secrets.SIGNING_KEY }} 等四个参数。

## devcontainer

```
docker login 
docker build  -f .devcontainer/Dockerfile2 -t jianboy/android-dev-container:v1.0.1 .
docker push

```



## Jenkins

通过docker快速启动一个 Jenkins 服务,配置好环境,插件,构建任务,即可实现自动化构建,部署,通知等功能。

```
docker run -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
```

配置文件`android-studio\Jenkinsfile`

## travis

travis是比较早的ci/cd平台,通过 travis-ci 实现自动化构建,部署,通知等功能。主要提供php,nodejs,python等语言的支持,目前是收费的。

配置 `android-studio\.travis.yml`


## fastlane

## AppCenter

## Gitpod

通过 `.gitpod.yml`和 `.gitpod.Dockfile` 配置开发环境,实现远程开发。

```
FROM gitpod/workspace-full-vnc

```
容器包含 VNC 服务,可以通过浏览器访问远程桌面,在做桌面开发十分有效。

此外提供了很多开发环境,如 nodejs,python,java,go,rust等等,可以安装 Chrome 浏览器,远程连接 adb。

## Gitlab CI

配置 `.gitlab-ci.yml` 文件,实现自动化构建,部署,通知等功能。


## Azure DevOps

一般用来开发微软相关的项目,如.net,azure等,提供windows,linux,mac主机构建,。

配置 `dotnet\azure-pipelines.yml`


## circleci

## bitrise