命令行搭建flutter-android编译环境

  • linux 安装

docker run -itd --name=flutter \
--network=host \
-v ($pwd):$(pwd) \
registry.cn-hangzhou.aliyuncs.com/jcleng/wrt-ubuntu:20.04

docker exec -it flutter bash

# flutter sdk
git clone -b 3.27.4 --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/flutter-sdk.git
git clone -b 3.27.4 --depth=1 https://github.akams.cn/https://github.com/flutter/flutter.git

apt-get update && apt-get install curl iputils-ping -y

# 临时使用commandlinetools获取sdkmanager https://androidsdkmanager.azurewebsites.net/cmdline-tools.html
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-11076708_latest.zip

# platform-tools https://developer.android.google.cn/tools/releases/platform-tools
# wget https://googledownloads.cn/android/repository/platform-tools-latest-linux.zip
# unzip platform-tools-latest-linux.zip


export BASE_WORK=/usr/local/work
export ANDROID_SDK_ROOT=$BASE_WORK/sdk
export JAVA_HOME=$BASE_WORK/JAVA_HOME/jdk-17/jdk-17
export PATH=$PATH:$JAVA_HOME/bin:$BASE_WORK/cmdline-tools/bin/:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools

mkdir -p $ANDROID_SDK_ROOT
mkdir -p $JAVA_HOME

# java环境
cd $JAVA_HOME
wget https://mirrors.huaweicloud.com/openjdk/17/openjdk-17_linux-x64_bin.tar.gz
tar xvf openjdk-17_linux-x64_bin.tar.gz

# 工具
cd $BASE_WORK
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-11076708_latest.zip

# 安卓sdk
sdkmanager "platforms;android-34" --sdk_root=$ANDROID_SDK_ROOT
sdkmanager "platform-tools" "emulator" --sdk_root=$ANDROID_SDK_ROOT
sdkmanager "system-images;android-34;google_apis;x86_64" --sdk_root=$ANDROID_SDK_ROOT
# 创建虚拟机
avdmanager create avd -d 17 --name myavd -k "system-images;android-34;google_apis;x86_64"
# avdmanager delete avd -n myavd
avdmanager list|grep -C 10 myavd
# 启动虚拟机
export DISPLAY=:1
emulator -avd myavd
# 如果提示路径不对
vim ~/.android/avd/myavd.avd/config.ini
image.sysdir.1=/usr/local/work/sdk/system-images/android-34/google_apis/x86_64/


# 使用adb进行配对
adb pair 192.168.195.198:35047
adb connect 192.168.195.198:43015


# 创建项目
flutter create fdemo
cd fdemo/android
# 换腾讯云
vi gradle/wrapper/gradle-wrapper.properties

distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.6.3-all.zip

# 使用代理, 以及修改 ~/.gradle/gradle.properties 的代理设置
export http_proxy=http://192.168.2.114:7892
export https_proxy=http://192.168.2.114:7892

touch ~/.gradle/gradle.properties

# 构建测试
flutter pub get
# 编辑环境
code android/local.properties

sdk.dir=/home/wb/g/ANDROID_HOME/
flutter.sdk=/home/wb/g/flutter-sdk/
flutter.buildMode=debug
flutter.versionName=1.0.0
flutter.versionCode=1

# 构建测试
./gradlew assembleDebug

# 指定设备运行
flutter devices
flutter run -d 21091116C
  • vscode连接进去

# 用户端vscode安装:
ms-vscode-remote.remote-ssh

# 服务端安装:
ms-vscode-remote.remote-containers
ms-azuretools.vscode-docker
# 设置扩展的 docker path

# 容器内安装
Dart-Code.flutter

# 然后打开服务端[docker]找到刚刚的容器[附加 VSCODE]

code /etc/profile
# 最前面添加
export work_path=/home/wb/g
export PATH=$PATH:$work_path/cmdline-tools/bin/:$work_path/flutter-sdk/bin/:$work_path/platform-tools
export ANDROID_HOME=$work_path/ANDROID_HOME
export JAVA_HOME=$work_path/JAVA_HOME/jdk-17/

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

# export http_proxy=http://192.168.2.114:7892
# export https_proxy=http://192.168.2.114:7892
  • 或者换项目的镜像源

主要是 android/build.gradle  allprojects.repositories 加了之后还有加 allprojects.buildscript.repositories
# 参考:
https://framagit.org/jcleng/flutter_stp/-/blob/master/android/build.gradle?ref_type=heads#L8

# android/build.gradle
// google()
// mavenCentral()
maven { url "https://maven.aliyun.com/repository/central/" }
maven { url "https://maven.aliyun.com/repository/public/" }
maven { url "https://maven.aliyun.com/repository/google/" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin/" }
mavenCentral()

# android/settings.gradle
// google()
// mavenCentral()
// gradlePluginPortal()
maven { url "https://maven.aliyun.com/repository/central/" }
maven { url "https://maven.aliyun.com/repository/public/" }
maven { url "https://maven.aliyun.com/repository/google/" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin/" }
mavenCentral()
  • linux使用容器开发技巧

# docker映射x11和flutter
# 再使用vscode进到容器开发
  • ~/.gradle/gradle.properties

# gradle设置超时时间
# Set the socket timeout to 5 minutes (good for proxies)
systemProp.org.gradle.internal.http.socketTimeout=300000
 # the number of retries (initial included) (default 3)
systemProp.org.gradle.internal.repository.max.retries=10
 # the initial time before retrying, in milliseconds (default 125)
systemProp.org.gradle.internal.repository.initial.backoff=500
systemProp.org.gradle.internal.http.connectionTimeout=300000
  • run.sh

#!/usr/bin/env bash
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
# flutter的sdk
# FLUTTER_BIN=/home/jcleng/work/flutter/3.27.4/bin/
FLUTTER_BIN=/home/jcleng/work/flutter/flutter/bin/
export PATH=$FLUTTER_BIN:$PATH
# android sdk环境
export JAVA_HOME=/home/jcleng/Android/zulu17.60.17/
# 如果是使用工具和命令使用openjdk8
# export JAVA_HOME=/usr/lib/sdk/openjdk8/
# 其实安装android studio 会省去很多配置问题,自动安装sdk,需要先添加代理
export ANDROID_HOME="/home/jcleng/Android/Sdk"
export ANDROID_SDK_ROOT=$ANDROID_HOME
export RUST_BIN=$HOME/.cargo/bin

export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator
export PATH=$PATH:$ANDROID_SDK_ROOT/tools/bin/
export PATH=$PATH:$JAVA_HOME:$RUST_BIN
rm -rf /home/jcleng/work/flutter/flutter/bin/cache/lockfile
exec $@