0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu20.04でGTK/GDK と Flutter Engine を自前でビルドして使用する方法

Posted at

はじめに

Flutterアプリケーションのデバッグ時にGTK/GDK と Flutter Engine を自前でビルドしてログを取ってみようという話になり、試していたところ色々と詰まったので備忘録として手順を残しておきます。

前提条件

  • OS: Ubuntu20.04
  • CPU: Intel Core-i7 13700
  • depot toolがインストール済みであること
    • インストールしていない場合はこちらの手順に従ってインストールしてください

手順

1. GTK/GDKのビルド

以下のコマンドでGTKのビルドに必要な依存関係をインストールします

sudo apt update
sudo apt install -y build-essential meson ninja-build libglib2.0-dev libcairo2-dev libpango1.0-dev libgdk-pixbuf2.0-dev libatk1.0-dev libepoxy-dev libx11-dev libxi-dev libxext-dev libxrandr-dev libxcursor-dev libxdamage-dev libxcomposite-dev libxinerama-dev libxfixes-dev libwayland-dev libxkbcommon-dev wayland-protocols libdbus-1-dev libgirepository1.0-dev libegl1-mesa-dev libfontconfig1-dev libfreetype6-dev libharfbuzz-dev libfribidi-dev libxrender-dev libx11-xcb-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev libxkbcommon-x11-dev libgtk-3-dev gtk-doc-tools gobject-introspection

以下のコマンドでインストールされているGTKのバージョンを確認します(参考)。

dpkg -l "*gtk-3.0*" | grep ii

実行すると以下のような出力が得られ、下記の場合だとバージョンは3.24.20であることがわかります。

ii  gir1.2-gtk-3.0:amd64 3.24.20-0ubuntu1.2 amd64        GTK graphical user interface library -- gir bindings
ii  libgtk-3-0:amd64     3.24.20-0ubuntu1.2 amd64        GTK graphical user interface library
ii  libgtk-3-bin         3.24.20-0ubuntu1.2 amd64        programs for the GTK graphical user interface library
ii  libgtk-3-common      3.24.20-0ubuntu1.2 all          common files for the GTK graphical user interface library
ii  libgtk-3-dev:amd64   3.24.20-0ubuntu1.2 amd64        development files for the GTK library

以下のコマンドでGTKをcloneし、GTKのバージョンを確認して得られたバージョンにcheckoutします

git clone https://github.com/GNOME/gtk
cd gtk
git checkout 3.24.20

以下のコマンドでGTKをビルドします。
<ユーザー名>の部分は適宜書き換えてください。

meson setup build
cd build
meson setup --prefix=/home/<ユーザー名>/.local --buildtype=debug --reconfigure
ninja install

2. Flutter Engineのビルド

以下のコマンドでFlutter Engineのビルドに必要な依存関係をインストールします。

sudo apt update
sudo apt install -y curl unzip clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev xz-utils libasound2-dev libpulse-dev libudev-dev libglu1-mesa-dev mesa-common-dev
sudo apt-get install --reinstall libxxf86vm-dev

以下のコマンドで現在使用しているFlutterのバージョンを確認します。

flutter --version

実行すると以下のような出力が得られ、下記の場合だとバージョンは3.24.1であることがわかります。

Flutter 3.24.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 5874a72aa4 (4 weeks ago) • 2024-08-20 16:46:00 -0500
Engine • revision c9b9d5780d
Tools • Dart 3.5.1 • DevTools 2.37.2

以下のコマンドで作業用ディレクトリを作成しその中に入ります。

mkdir ~/flutter-engine && cd ~/flutter-engine

.gclientを以下のように手動で作成します。

nano .gclient
solutions = [
  {
    "name": "src/flutter",
    "url": "https://github.com/flutter/engine.git",
    "deps_file": "DEPS",
    "managed": False,
    "custom_deps": {},
  },
]

以下のコマンドでFlutter Engineのソースコードをfetchします。
「3.24.1」の部分は適宜現在使用しているFlutterのバージョンに変えてください。

gclient sync --revision src/flutter@3.24.1

以下のコマンドでPKG_CONFIG_PATHを設定し先にビルドしたGTK/GDKを参照できるようにします。
<ユーザー名>の部分は適宜書き換えてください。

export PKG_CONFIG_PATH=/home/<ユーザー名>/.local/lib/x86_64-linux-gnu/pkgconfig:/lib/x86_64-linux-gnu/pkgconfig

以下のコマンドでビルドします。

cd ~/flutter-engine/src
./flutter/tools/gn --unoptimized --no-goma --target-sysroot=/
ninja -C out/host_debug_unopt

3.デバッグ対象のFlutterアプリケーションの起動

デバッグ対象のFlutterアプリケーションのディレクトリに移動したあと以下のコマンドを実行します。

LD_LIBRARY_PATH=/home/<ユーザー名>/.local/lib/x86_64-linux-gnu flutter run --local-engine-src-path ~/flutter-engine/src/ --local-engine host_debug_unopt --local-engine-host host_debug_unopt -v

教訓

Chat GPT Plusは課金しておくと幸せになれる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?