likes
comments
collection
share

Flutter从安装到跑起来

作者站长头像
站长
· 阅读数 12

从FlutterSDK的下载安装,到各种环境变量配置,网络问题的处理,以及模拟器和真机跑起来过程中的问题记录。不过这里只是针对Windows。有些部分,其他系统也是一样的,只是环境变量设置可能不同。

获取最新SDK

1、看文档Using Flutter in China:docs.flutter.dev/community/c…

2、SDK下载地址:flutter.cn/docs/get-st…

3、将SDK解压到任意目录,比如:M:\softback\developer\flutter

设置环境变量(Windows)

1、在path这个条目中增加以下路径:M:\softback\developer\flutter\bin,如果还下载DartSDK,可以将DartSDK的路径放置在FlutterSDK路径的下方,如下图:

Flutter从安装到跑起来

其实,在FlutterSDK中已经包含了DartSDK了。

2、重新打开一个命令行窗口,输入以下命令查看FlutterSDK(DartSDK)路径

where.exe flutter dart

Flutter从安装到跑起来

输出的flutter在dart之前就对了。

3、设置依赖镜像地址

在系统变量中增加以下两个变量:

PUB_HOSTED_URL = pub.flutter-io.cn

FLUTTER_STORAGE_BASE_URL = storage.flutter-io.cn,如下图

Flutter从安装到跑起来

这里将pub的地址改为了国内的,所以在你要向pub推送自己的dart/flutter package的时候,你还需要将其改回去,如

flutter pub publish --server=https://pub.dartlang.org

运行flutter doctor

Flutter从安装到跑起来

如果有什么问题,按照上面的提示进行处理即可。

安装javaSDK,配置环境变量

创建以下环境变量:

JAVA_HOME = C:\Program Files\Java\jdk-20

然后再Path变量中加入:%JAVA_HOME%\bin

安装Android Studio,从其安装Android SDK,Android SDK Platform-Tools以及Android SDK Build-Tools,然后创建安卓模拟器

这些按照步骤来,没有什么特别的,忽略先。

同意安卓协议(如果提示有问题)

flutter doctor --android-licenses

这一步很可能提示如下错误:

this version of the java runtime only recognizes class file versions up to 52.0

你只需要升级一下你的JavaSDK版本到最新即可。

创建应用

经过以上步骤后,没有意外,你可以通过一下命令创建flutter项目

flutter create xxx_xxx

运行程序

查看你前面创建的Android模拟器

flutter emulators

Flutter从安装到跑起来

在命令行执行以下命令,启动模拟器

flutter emulators --launch Android10

上面的“Android10”你可以换成其他的模拟器id,上面列出来的那些。上面的命令如果正常,你会看到一个模拟器被启动了。

查看设备

flutter devices

Flutter从安装到跑起来

这里会列出刚刚启动的模拟器(如果没有启动任何模拟器,这里不会列出模拟器,就是说这里只会列出当前互动的设备),还有链接在电脑上的真机。

如果要在模拟器中运行,执行下面的命令

flutter run -d emulator-5554

如果要在真机上运行,执行下面的命令

flutter run -d V2031A

上面命令中的参数是对应的模拟器id和真机id,可以从设备列表中看到。到此你已经可以运行flutter应用了。

不过,由于国内的网络环境,你可能会遇到各种问题,导致上面的命令运行失败,比如出现:

Running Gradle task 'assembleDebug'...

这里会一直卡住,直到永远。。。。

解决网络问题

找到flutterSDK的目录,需要修改两个文件

@@ -58,20 +58,30 @@ class FlutterExtension {
     /** Allows to override the target file. Otherwise, the target is lib/main.dart. */
     String target
 }
 
 buildscript {
     repositories {
-        google()
-        mavenCentral()
+        // google()
+        // mavenCentral()
+		maven { url 'https://maven.aliyun.com/repository/google' }
+        maven { url 'https://maven.aliyun.com/repository/jcenter' }
+        maven {
+            url 'http://maven.aliyun.com/nexus/content/groups/public'
+            allowInsecureProtocol = true
+        }
+        maven { 
+            url 'http://download.flutter.io'
+            allowInsecureProtocol = true
+        }
     }
     dependencies {
         /** When bumping, also update ndkVersion above, as well as the Android Gradle Plugin
          * version in ../lib/src/android/gradle_utils.dart.
          */
-        classpath 'com.android.tools.build:gradle:7.3.0'
+        classpath 'com.android.tools.build:gradle:7.2.0'
     }
 }
 
 /**
  * Some apps don't set default compile options.
  * Apps can change these values in android/app/build.gradle.
@@ -84,13 +94,13 @@ android {
     }
 }
 
 apply plugin: FlutterPlugin
 
 class FlutterPlugin implements Plugin<Project> {
-    private static final String DEFAULT_MAVEN_HOST = "https://storage.googleapis.com";
+    private static final String DEFAULT_MAVEN_HOST = "https://storage.flutter-io.cn/download.flutter.io";
 
     /** The platforms that can be passed to the `--Ptarget-platform` flag. */
     private static final String PLATFORM_ARM32  = "android-arm";
     private static final String PLATFORM_ARM64  = "android-arm64";
     private static final String PLATFORM_X86    = "android-x86";
     private static final String PLATFORM_X86_64 = "android-x64";

第二个

@@ -14,16 +14,25 @@
 
 import java.nio.file.Paths
 
 String storageUrl = System.getenv('FLUTTER_STORAGE_BASE_URL') ?: "https://storage.googleapis.com"
 
 repositories {
-    google()
-    mavenCentral()
+    // google()
+    // mavenCentral()
+    // maven {
+       // url "$storageUrl/download.flutter.io"
+    // }
+	maven { url 'https://maven.aliyun.com/repository/google' }
+    maven { url 'https://maven.aliyun.com/repository/jcenter' }
     maven {
-        url "$storageUrl/download.flutter.io"
+            url 'http://maven.aliyun.com/nexus/content/groups/public'
+            allowInsecureProtocol = true
+        }
+    maven {
+        url "https://storage.flutter-io.cn/download.flutter.io"
     }
 }
 
 File flutterRoot = projectDir.parentFile.parentFile.parentFile
 
 assert flutterRoot.isDirectory()