命令行搭建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 $@