如何在Ubuntu 16.04+上安装和设置Flutter

278 阅读6分钟

Flutter是一个基于Dart的工具包,帮助你构建应用程序的前端。它在跨平台的移动应用开发中真正大放异彩,并旨在成为网页和桌面的可行选择。

在其移动应用的风味中,Flutter提供了许多UI抽象来构建界面。你可以在Dart中实现逻辑,如果你需要与你选择的操作系统进行更具体的互动,也可以直接使用Kotlin或Swift。

虽然跨平台应用开发不是什么新鲜事,但早期的策略,如PhoneGap和Ionic使用可用的WebView实现,而不是直接与系统进行交互。这不仅有很大的局限性,而且还有很多的性能成本。

原生跨平台应用开发的黄金标准还没有建立起来。但Flutter既提供了很多自己的东西,又在你需要使用任何官方语言与操作系统直接互动时优雅地走出了一条路。

这使得Flutter甚至在它实现与应用的网络和桌面版本共享同一代码库的潜力之前就改变了游戏规则。

在本教程中,我们将设置一台Ubuntu 16.04+机器,用Flutter进行Android应用开发。你也可以直接从Android Studio编辑Swift代码,但不幸的是,由于苹果的政策,你将没有官方支持在iOS设备或模拟器中测试该应用程序。

为此,我们需要安装和配置Java作为Android Studio的依赖,设置Android Studio以使用硬件加速和运行Flutter应用程序,当然还有安装和配置Flutter本身。所以,让我们开始吧。

如何安装和配置Flutter

首先:让我们通过snap store安装Flutter。如果你使用的是Ubuntu 16.04以后的版本,你可能已经安装了snap 命令。

如果你没有,你可以按照本页"在你的Linux发行版上安装Snap Store "一节中的说明来安装你的发行版。

Some of the linux distros snap store is available for.

有了snap 命令,就可以像这样安装 Flutter:

sudo snap install flutter --classic

Flutter安装完毕后,运行一个基本的检查,它也会做一些自动配置:

flutter doctor -v

flutter doctor output

Flutter已经安装完毕,很好!

如何安装和配置Java

首先,在能够使用Android Studio之前,我们需要获得(社区支持的)Open Java开发工具包。

要获得最新的稳定版本的Java 8,打开你的终端并运行:

sudo apt-get update && sudo apt-get install openjdk-8-jdk

截至2021年5月,其他版本在与Flutter一起工作时有时会出现一些不可预测的问题,所以我建议安装OpenJDK 8。不要担心,OpenJDK 8至少会在2024年之前得到支持。

安装成功后,是时候设置$JAVA_HOME 环境变量了。它被许多与你的本地Java安装进行交互的应用程序默认使用,Android Studio就是其中之一。

用这个命令获得你系统中当前安装的JDK的列表:

sudo update-alternatives --config java

从本地安装的版本列表中选择(记住,Java 8是最容易与Flutter一起使用的),并设置你想成为系统默认的版本。

$JAVA_HOME 设为其路径,不包括路径中的/bin 之后的部分(例如,在我的例子中,正确的路径是/usr/lib/jvm/java-8-openjdk-amd64 )。

#JAVA_HOME=<your_java_installation_path>, same as below if you followed instructions
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64" # my local path after installing openjdk-8
echo "JAVA_HOME=\"$JAVA_HOME\"" >> ~/.bashrc # sets JAVA_HOME env var for current user
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> .zshrc # adds java's binaries to your path
source ~/.bashrc && echo $JAVA_HOME # verifies that the variable was perenially set

如何安装和配置Android Studio以便与Flutter一起运行

你可以在这里下载Android Studio。

下载完成后,将Android Studio包解压到/usr/local/ 目录中:

sudo tar -C /usr/local -zxvf ~/Downloads/<android_studio_package>.tar.gz

解压成功后,运行Android Studio的安装脚本。

bash /usr/local/android-studio/bin/studio.sh

这应该会弹出安装向导。按照向导的指示进行标准安装,你应该最终到达启动器屏幕。

选择右下角的 "配置",点击 "插件":

Android Studio starter screen

安装 "Flutter "官方插件,由flutter.dev发布。

Flutter Plugin

在你继续之前,你会被提示安装Dart插件(Flutter的基础编程语言)。点击 "OK "并重新启动Android Studio IDE。

现在应该可以看到启动Flutter项目的选项了。点击它,然后选择 "Flutter应用程序 "并点击 "下一步"。

你应该会看到项目配置屏幕。按照您的意愿配置您的项目的名称、位置和描述,并将 "Flutter SDK "字段指向/home/<your_user_name>/snap/flutter/common/flutter

Flutter Project Config

如果上述路径不可用,请打开一个终端并运行。

flutter doctor -v

然后,您应该看到启动项目的屏幕:

Flutter Project Starter

几乎完成了。现在您需要接受Android许可证,并仔细检查您的Flutter安装的所有权,以避免将来由于Android Studio的资源被拒绝而出现意外的构建错误。

打开你的终端并运行。

flutter doctor --android-licenses # accept Google's licenses, necessary to build the app
sudo chown -R $USER:$USER /home/$USER/snap/flutter # confirm you are the owner of local flutter

现在,Android Studio终于被设置为可以运行Flutter项目了。很好!

你还应该启用Android Studio的桌面入口。在你的项目屏幕上,点击 "工具 "然后点击 "创建桌面条目":

AS Desktop Entry

现在,Android Studio的快捷方式应该可以从 "活动 "菜单中找到。

如何启用安卓模拟器的硬件虚拟化功能

为了运行模拟器,我们必须首先设置你的CPU的硬件虚拟化功能。

在你的终端运行kvm-ok ,你的输出应该显示你是否可以使用KVM加速。如果你有一个AMD或英特尔的CPU,很可能它可以。

内核虚拟机,简而言之,是内核与虚拟设备之间的桥梁,它允许虚拟设备直接从主机的硬件模拟自己的硬件。你可以看看这里,了解更详细的信息。

如果你确实能够使用KVM加速,现在是时候设置KVM并授权当前用户使用了:

sudo apt update # update repositories
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils # base packages
sudo addgroup kvm && sudo addgroup libvirtd # create user authorization groups
sudo adduser $USER kvm && sudo adduser $USER libvirtd # add current user to auth groups
sudo virsh -c qemu:///system list # checks if virtualization is ok
# if everything went fine, your output will be something like:
#
#  Id    Name                           State
#----------------------------------------------------

并重新启动你的用户会话。在电脑中,不仅仅是终端。注销系统,然后登录或重启电脑,我等着。

如何使用安卓模拟器来测试应用程序

现在,打开一个Android Studio项目,点击位于窗口右上角的 "AVD管理器"(Android虚拟设备)选项:

AVD Manager

点击 "创建虚拟设备 "按钮,一个带有设备列表的窗口应该弹出,并预选了 "电话 "类别。我建议你选择一个启用了Play Store的设备,以防你以后可能想在你的模拟设备中使用它。我的是Nexus 5。

点击 "下一步 "按钮,应该会出现一个系统镜像(Android操作系统版本)的列表。

System Images

首先,下载你的目标镜像(只需点击发布名称旁边的 "下载"),选择一个本地下载的镜像,然后点击 "下一步"。只有在图像被成功下载后,它才应该被突出显示。

然后会出现一个窗口,让你定制你的虚拟设备的属性,如启动时的屏幕方向、内存使用等等。如果你愿意,可以根据你的喜好调整设备,否则你可以安全地点击 "完成"。

如果一切顺利,你现在应该看到你的设备在Android虚拟设备管理器窗口中列出:

AVD Manager List

回到你的Android Studio项目视图。在 "AVD管理器 "按钮所在的同一行,在 "main.dart "的左边有一个可用设备的下拉列表。选择你刚刚设置的仿真器,并点击绿色的 "播放 "按钮,就在'main.dart'的右边。

如果模拟器还没有列在那里,再次打开AVD管理器窗口,点击你的虚拟设备的 "行动 "标签下的绿色 "播放 "按钮。这将在运行你的Flutter代码之前加载并打开模拟器。

Android Virtual Device

注意到右上角的'debug'功能区吗?如果你想摆脱它,请将debugShowCheckedModeBanner: false ,作为MaterialApp 的一个字段。

如何使用实体安卓设备来测试应用程序

你需要在本地安装一个安卓调试桥,以便使你的电脑能够与任何连接的安卓设备(虚拟或其他)交换信息(如APK构建)。

ADB包括一个客户端(你运行命令的界面,在本教程的所有目的中,它将是安装在你电脑中的ADB二进制文件)、一个守护程序(在安卓设备中执行最初从客户端发送的命令)和一个服务器(在PC中本地运行,它的默认监听位置是tcp://localhost:5037,并在客户端和守护程序之间进行中介通信)。

非常方便的是,Android Studio目前带有一个ADB,所以如果你按照上面的说明安装了Android Studio,你的电脑上已经有一个了。

你可以从Ubuntu软件库中安装ADB,与Android Studio中的ADB一起安装,但是如果你的电脑最终混淆了本地安装的版本,这就会招致麻烦。因此,让我们设置我们的Linux用户来访问Android Studio的ADB,然后运行ADB。

echo 'export PATH=$PATH:$HOME"/Android/Sdk/platform-tools"' >> .bashrc # adds adb to path
adb start-server # launches adb server
adb devices # lists connected devices

在运行adb devices ,你很可能得到一个错误。这个错误已经注册了$LOGNAME 变量,其中包含了当前的用户名。你将使用它把你的用户插入到plugdev 组,如果你还没有在那里的话。

你也很可能没有一套针对Android设备的udev 规则。UDEV规则文件指定了Ubuntu与插入式设备的交互,Ubuntu将拒绝与你的安卓设备进行某些交互,除非它事先在UDEV规则文件中被授权。

所以,让我们来纠正这些错误:

# add user to plugdev group
sudo usermod -aG plugdev $LOGNAME
# downloads a very thorough UDEV rules file into the appropriate directory
sudo wget -O /etc/udev/rules.d/51-android.rules https://raw.githubusercontent.com/NicolasBernaerts/ubuntu-scripts/master/android/51-android.rules
# gives reading permission to the UDEV android file
sudo chmod a+r /etc/udev/rules.d/51-android.rules

重新启动你当前的Linux用户会话以应用这些变化,然后打开终端并再次运行adb devices

如果你仍然有一个与UDEV有关的错误,你的设备的制造商ID可能没有列在/etc/udev/rules.d/51-android.rules 。在这种情况下,在互联网上搜索你的设备的制造商UDEV ID,并以与其他相同的格式手动将其添加到规则列表中。

注意在这些行中唯一具有唯一值的字段是ATTR{idVendor} 。如果你没有收到任何错误,你会发现你的设备被列为 "未授权"。让我们来解锁设备的USB调试。

如何解锁开发者模式和USB调试

在你的安卓设备中,打开 "设置",然后 "关于手机"。点击你的'Build number'5-6次,直到弹出一个告诉'你现在是开发者!'的祝酒词。

You Are Now a Developer

回到 "设置",打开 "系统",你应该看到 "开发者选项 "已被解锁。

Developer Options

点击这个新条目,在 "调试 "部分下面勾选 "USB调试"。

USB Debugging

通过USB将你的安卓设备插入电脑,然后在你的终端上运行adb devices 。输出应该列出你的设备,并指出它已经解锁,可以进行调试了。

现在,回到Android Studio,点击设备下拉列表(就是你之前选择虚拟设备的那个),你的物理设备现在应该被列出。选择它。

最后,点击 "运行 "按钮,你应该看到你的设备中的应用程序,准备好与之互动。

恭喜您!您现在是Flutter的开发者了。您现在是一名Flutter开发者。祝您在开发过程中好运