finalize
4
.vscode/settings.json
vendored
@ -6,7 +6,9 @@
|
||||
{ "path": "chapters/04", "symbol": "T", "tooltip": "04" },
|
||||
{ "path": "chapters/05", "symbol": "T", "tooltip": "05" },
|
||||
{ "path": "chapters/06", "symbol": "T", "tooltip": "06" },
|
||||
{ "path": "chapters/07", "symbol": "T", "tooltip": "07" }
|
||||
{ "path": "chapters/07", "symbol": "T", "tooltip": "07" },
|
||||
{ "path": "chapters/08", "symbol": "T", "tooltip": "08" },
|
||||
{ "path": "chapters/09", "symbol": "T", "tooltip": "09" }
|
||||
],
|
||||
"cSpell.enabled": true,
|
||||
"cSpell.enableFiletypes": ["markdown_latex_combined"]
|
||||
|
669
Bachelor.bib
@ -9,6 +9,13 @@
|
||||
file = {/Users/fabian/Zotero/storage/HNIIPU6S/what-is-the-minimum-amount-of-ram-required-to-run-linux-kernel-on-an-embedded-de.html}
|
||||
}
|
||||
|
||||
@online{156inchQLED,
|
||||
title = {15.6inch {{QLED Monitor}} - {{Waveshare Wiki}}},
|
||||
url = {https://www.waveshare.com/wiki/15.6inch_QLED_Monitor},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/A9QI69GM/15.html}
|
||||
}
|
||||
|
||||
@online{3ClauseBSDLicense2011,
|
||||
title = {The 3-{{Clause BSD License}}},
|
||||
date = {2011-05-22T22:21:11+00:00},
|
||||
@ -20,6 +27,23 @@
|
||||
file = {/Users/fabian/Zotero/storage/ZHWXNYXB/bsd-3-clause.html}
|
||||
}
|
||||
|
||||
@online{AddLinux_arm64Library,
|
||||
title = {Add Linux\_arm64 Library · {{Issue}} \#876 · Isar/Isar},
|
||||
url = {https://github.com/isar/isar/issues/876},
|
||||
urldate = {2024-03-12},
|
||||
file = {/Users/fabian/Zotero/storage/6LPECSW5/876.html}
|
||||
}
|
||||
|
||||
@online{beautypiShadertoy,
|
||||
title = {Shadertoy},
|
||||
author = {Beautypi},
|
||||
url = {https://www.shadertoy.com/view/Xd3BWr},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {Build shaders, share them, and learn from the best community.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/76ZKPMWU/Xd3BWr.html}
|
||||
}
|
||||
|
||||
@online{BestWayUse,
|
||||
title = {The Best Way to Use {{Yocto}} and {{Docker}} — {{Get Intimate With Cyber}} ! 0.1 Documentation},
|
||||
url = {https://ubs_csse.gitlab.io/secu_os/tutorials/crops_yocto.html},
|
||||
@ -39,6 +63,81 @@
|
||||
file = {/Users/fabian/Zotero/storage/DUDXBAGD/comparison-flutter-app-architectures.html}
|
||||
}
|
||||
|
||||
@online{BugsCPURAM2016,
|
||||
title = {2 {{Bugs}} at {{CPU}} and {{RAM}} · {{Issue}} \#386 · {{KittyKatt}}/{{screenFetch}}},
|
||||
date = {2016},
|
||||
url = {https://github.com/KittyKatt/screenFetch/issues/386},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {hey have found 2 BUGS at the CPU frequency and Ram. Ram is 1GB to high. and CPU frequency is incorrect see pic http://www.directupload.net/file/d/4487/vq9o55ar\_png.htm},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/3HUELEPA/386.html}
|
||||
}
|
||||
|
||||
@software{CagekioskCage2024,
|
||||
title = {Cage-Kiosk/Cage},
|
||||
date = {2024-03-20T16:36:49Z},
|
||||
origdate = {2018-11-22T18:58:55Z},
|
||||
url = {https://github.com/cage-kiosk/cage},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {A Wayland kiosk},
|
||||
organization = {Cage kiosk},
|
||||
keywords = {compositor,kiosk,wayland}
|
||||
}
|
||||
|
||||
@software{CanonicalNmDart2023,
|
||||
title = {Canonical/Nm.Dart},
|
||||
date = {2023-11-30T08:17:08Z},
|
||||
origdate = {2020-08-27T20:45:25Z},
|
||||
url = {https://github.com/canonical/nm.dart},
|
||||
urldate = {2024-03-19},
|
||||
abstract = {Native Dart client library to access NetworkManager on Linux.},
|
||||
organization = {Canonical},
|
||||
keywords = {dart}
|
||||
}
|
||||
|
||||
@online{Crops,
|
||||
title = {Crops},
|
||||
url = {https://github.com/crops},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/Z2MJS6AP/crops.html}
|
||||
}
|
||||
|
||||
@online{CustomFlutterEnginec,
|
||||
title = {Custom {{Flutter Engine Embedders}}},
|
||||
url = {https://github.com/flutter/flutter/wiki/Custom-Flutter-Engine-Embedders},
|
||||
urldate = {2024-03-15},
|
||||
abstract = {Flutter makes it easy and fast to build beautiful apps for mobile and beyond - flutter/flutter},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/ZRRK4LNR/Custom-Flutter-Engine-Embedders.html}
|
||||
}
|
||||
|
||||
@software{danielquisbertDanielquisbertSimple_tiles_map2023,
|
||||
title = {Danielquisbert/Simple\_tiles\_map},
|
||||
author = {{Daniel Quisbert}},
|
||||
date = {2023-11-21T17:54:35Z},
|
||||
origdate = {2022-10-26T14:59:36Z},
|
||||
url = {https://github.com/danielquisbert/simple_tiles_map},
|
||||
urldate = {2024-03-18}
|
||||
}
|
||||
|
||||
@online{DartFrog,
|
||||
title = {Dart {{Frog}}},
|
||||
url = {https://dartfrog.vgv.dev/},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {The official documentation site for Dart Frog. A fast, minimalistic backend framework for Dart 🎯 Built by Very Good Ventures.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/E3C2TBYG/dartfrog.vgv.dev.html}
|
||||
}
|
||||
|
||||
@online{DartPad,
|
||||
title = {{{DartPad}}},
|
||||
url = {https://dartpad.dev/},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/2AS4KHAA/dartpad.dev.html}
|
||||
}
|
||||
|
||||
@online{DartVSJava,
|
||||
title = {Dart {{VS Java}} Benchmarks, {{Which}} Programming Language or Compiler Is Faster},
|
||||
url = {https://programming-language-benchmarks.vercel.app/dart-vs-java},
|
||||
@ -93,6 +192,72 @@
|
||||
file = {/Users/fabian/Zotero/storage/LAGSLH4P/what-is-linux-distribution_599979.html}
|
||||
}
|
||||
|
||||
@online{DisableRaspberryPi2022,
|
||||
title = {Disable the {{Raspberry Pi Desktop}} – {{Wobblycogs Workshop}}},
|
||||
date = {2022-01-08},
|
||||
url = {https://www.wobblycogs.co.uk/raspberry-pi/2022/01/08/disable-the-raspberry-pi-desktop/},
|
||||
urldate = {2024-03-16},
|
||||
langid = {british},
|
||||
file = {/Users/fabian/Zotero/storage/GH4TSLMF/disable-the-raspberry-pi-desktop.html}
|
||||
}
|
||||
|
||||
@online{drewmoseleyHowConfigureNetworking2023,
|
||||
title = {How to Configure Networking Using Systemd in {{Yocto Project}} - {{Tutorials}} / {{Yocto Project}}},
|
||||
author = {{Drew Moseley}},
|
||||
date = {2023-05-08T12:42:50+00:00},
|
||||
url = {https://hub.mender.io/t/how-to-configure-networking-using-systemd-in-yocto-project/1097},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {Introduction This tutorial will guide you through configuring networking in Yocto using systemd-networkd. This is one of the possible network management utilities available in Yocto. Other utilities may be documented in other tutorials. This will use a Raspberry Pi 3 platform so that we can demonstrate both wired and wireless networking. Version notes This tutorial targets the following Yocto Project versions: Yocto Project Tutorial applies Maintenance nanbield (4.3) ...},
|
||||
langid = {english},
|
||||
organization = {Mender Hub},
|
||||
file = {/Users/fabian/Zotero/storage/7932BMPI/1097.html}
|
||||
}
|
||||
|
||||
@software{dylanarapsDylanarapsPfetch2024,
|
||||
title = {Dylanaraps/Pfetch},
|
||||
author = {{Dylan Araps}},
|
||||
date = {2024-03-18T18:53:02Z},
|
||||
origdate = {2019-09-24T07:36:11Z},
|
||||
url = {https://github.com/dylanaraps/pfetch},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {🐧 A pretty system information tool written in POSIX sh.},
|
||||
keywords = {neofetch,posix,screenfetch,shell,shell-script,system-information}
|
||||
}
|
||||
|
||||
@online{EngineShellPlatform,
|
||||
title = {Engine/Shell/Platform/Embedder/Embedder.h at Main · Flutter/Engine},
|
||||
url = {https://github.com/flutter/engine/blob/main/shell/platform/embedder/embedder.h},
|
||||
urldate = {2024-03-16},
|
||||
file = {/Users/fabian/Zotero/storage/Z2KD449Q/embedder.html}
|
||||
}
|
||||
|
||||
@online{FlameExamplesGames,
|
||||
title = {Flame/Examples/Games/Rogue\_shooter at Main · Flame-Engine/Flame},
|
||||
url = {https://github.com/flame-engine/flame/tree/main/examples/games/rogue_shooter},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {A Flutter based game engine. Contribute to flame-engine/flame development by creating an account on GitHub.},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/NVJZQY4M/rogue_shooter.html}
|
||||
}
|
||||
|
||||
@online{FlameExamplesLib,
|
||||
title = {Flame/Examples/Lib/Stories/Animations/Benchmark\_example.Dart at Main · Flame-Engine/Flame},
|
||||
url = {https://github.com/flame-engine/flame/blob/main/examples/lib/stories/animations/benchmark_example.dart},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {A Flutter based game engine. Contribute to flame-engine/flame development by creating an account on GitHub.},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/XSJXDZEH/benchmark_example.html}
|
||||
}
|
||||
|
||||
@online{Flutter_packagesPackagesFlutterpi_gstreamer_video_player,
|
||||
title = {Flutter\_packages/Packages/Flutterpi\_gstreamer\_video\_player at Main · Ardera/Flutter\_packages},
|
||||
url = {https://github.com/ardera/flutter_packages/tree/main/packages/flutterpi_gstreamer_video_player},
|
||||
urldate = {2024-03-18},
|
||||
file = {/Users/fabian/Zotero/storage/9YRSWNIX/flutterpi_gstreamer_video_player.html}
|
||||
}
|
||||
|
||||
@online{FlutterArchitecturalOverviewb,
|
||||
title = {Flutter Architectural Overview},
|
||||
url = {https://docs.flutter.dev/resources/architectural-overview},
|
||||
@ -111,6 +276,28 @@
|
||||
file = {/Users/fabian/Zotero/storage/V9T5LLK6/inside-flutter.html}
|
||||
}
|
||||
|
||||
@online{flutterdevDartPadNowBuilt2024,
|
||||
type = {Tweet},
|
||||
title = {{{DartPad}} Is Now Built with {{Flutter}}! 💫 {{Try}} out the New {{Gemini SDK}} with {{Dart}}, and {{Flutter}} Directly in Your Browser. → {{http://goo.gle/3TdaTAv}} {{https://t.co/tV4LzWUztn}}},
|
||||
author = {{FlutterDev}},
|
||||
date = {2024-03-18T19:00Z},
|
||||
url = {https://twitter.com/FlutterDev/status/1769800942361149869},
|
||||
urldate = {2024-03-21},
|
||||
langid = {english},
|
||||
organization = {Twitter},
|
||||
file = {/Users/fabian/Zotero/storage/IA3FSKU9/1769800942361149869.html}
|
||||
}
|
||||
|
||||
@software{FlutterFlutter2024,
|
||||
title = {Flutter/Flutter},
|
||||
date = {2024-03-12T10:00:14Z},
|
||||
origdate = {2015-03-06T22:54:58Z},
|
||||
url = {https://github.com/flutter/flutter},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {Flutter makes it easy and fast to build beautiful apps for mobile and beyond},
|
||||
organization = {Flutter}
|
||||
}
|
||||
|
||||
@online{FlutterGPU,
|
||||
title = {Flutter {{GPU}}},
|
||||
url = {https://github.com/flutter/flutter/wiki/Flutter-GPU},
|
||||
@ -121,6 +308,27 @@
|
||||
file = {/Users/fabian/Zotero/storage/VVZT5YJA/Flutter-GPU.html}
|
||||
}
|
||||
|
||||
@online{FlutterPackagesFlutter_toolsb,
|
||||
title = {Flutter/Packages/Flutter\_tools/Static/Custom-Devices.Schema.Json at 5545c95df7a8ce4eaa03ce98b0d76d83aaf4ecf7 · Flutter/Flutter},
|
||||
url = {https://github.com/flutter/flutter/blob/5545c95df7a8ce4eaa03ce98b0d76d83aaf4ecf7/packages/flutter_tools/static/custom-devices.schema.json},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {Flutter makes it easy and fast to build beautiful apps for mobile and beyond - flutter/flutter},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/KT2IBA6B/custom-devices.schema.html}
|
||||
}
|
||||
|
||||
@software{FluttertizenFluttertizen2024,
|
||||
title = {Flutter-Tizen/Flutter-Tizen},
|
||||
date = {2024-02-27T05:57:26Z},
|
||||
origdate = {2020-11-24T08:13:50Z},
|
||||
url = {https://github.com/flutter-tizen/flutter-tizen},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {Flutter tools for Tizen},
|
||||
organization = {flutter-tizen},
|
||||
keywords = {flutter,tizen}
|
||||
}
|
||||
|
||||
@online{FlutterWeiSuoYouPingMuChuangZaoJingCai,
|
||||
title = {Flutter: 为所有屏幕创造精彩},
|
||||
shorttitle = {Flutter},
|
||||
@ -154,6 +362,15 @@
|
||||
file = {/Users/fabian/Zotero/storage/3K7HX2EI/flutter-on-raspberry-pi-mostly-from-scratch-2824c5e7dcb1.html}
|
||||
}
|
||||
|
||||
@online{GetDartSDK,
|
||||
title = {Get the {{Dart SDK}}},
|
||||
url = {https://dart.dev/get-dart/},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {Get the libraries and command-line tools that you need to develop Dart web, command-line, and server apps.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/LEWDSTCV/get-dart.html}
|
||||
}
|
||||
|
||||
@online{gfallonItFOSSToyota2019,
|
||||
title = {It's {{FOSS}}: {{Toyota Motors}} and Its {{Linux Journey}}},
|
||||
shorttitle = {It's {{FOSS}}},
|
||||
@ -167,6 +384,15 @@
|
||||
file = {/Users/fabian/Zotero/storage/RI36I2EG/its-foss-toyota-motors-and-its-linux-journey.html}
|
||||
}
|
||||
|
||||
@online{Giscus,
|
||||
title = {Giscus},
|
||||
url = {https://giscus.app/en/widget?origin=https%3A%2F%2Fpuro.dev%2F&session=&theme=https%3A%2F%2Fpuro.dev%2Fassets%2Fgiscus_theme_dark.css&reactionsEnabled=1&emitMetadata=0&inputPosition=bottom&repo=pingbird%2Fpuro&repoId=R_kgDOINCKyw&category=Docs&categoryId=DIC_kwDOINCKy84CSHou&strict=0&description=&backLink=https%3A%2F%2Fpuro.dev%2F&term=index},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {A comments widget built on GitHub Discussions.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/IXMVWTKV/widget.html}
|
||||
}
|
||||
|
||||
@online{googleinc.DartLanguageEvolution,
|
||||
title = {Dart Language Evolution},
|
||||
author = {{Google Inc.}},
|
||||
@ -177,6 +403,16 @@
|
||||
file = {/Users/fabian/Zotero/storage/BRNQA73A/evolution.html}
|
||||
}
|
||||
|
||||
@online{googleinc.FAQ,
|
||||
title = {{{FAQ}}},
|
||||
author = {{Google Inc.}},
|
||||
url = {https://docs.flutter.dev/resources/faq},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {Frequently asked questions and answers about Flutter.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/4FE55YQT/faq.html}
|
||||
}
|
||||
|
||||
@online{googleinc.FutterBuildAny,
|
||||
title = {Futter - {{Build}} for Any Screen},
|
||||
author = {{Google Inc.}},
|
||||
@ -187,6 +423,16 @@
|
||||
file = {/Users/fabian/Zotero/storage/FUSDYG34/flutter.dev.html}
|
||||
}
|
||||
|
||||
@online{googleinc.ImpellerRenderingEngine,
|
||||
title = {Impeller Rendering Engine},
|
||||
author = {{Google Inc.}},
|
||||
url = {https://docs.flutter.dev/perf/impeller},
|
||||
urldate = {2024-03-20},
|
||||
abstract = {What is Impeller and how to enable it?},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/DBXYPBIV/impeller.html}
|
||||
}
|
||||
|
||||
@online{googleinc.IntroductionDeclarativeUI,
|
||||
title = {Introduction to Declarative {{UI}}},
|
||||
author = {{Google Inc.}},
|
||||
@ -197,6 +443,16 @@
|
||||
file = {/Users/fabian/Zotero/storage/F6LI3FTY/declarative.html}
|
||||
}
|
||||
|
||||
@online{googleinc.Records,
|
||||
title = {Records},
|
||||
author = {{Google Inc.}},
|
||||
url = {https://dart.dev/language/records/},
|
||||
urldate = {2024-03-19},
|
||||
abstract = {Summary of the record data structure in Dart.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/L9JME4B4/records.html}
|
||||
}
|
||||
|
||||
@online{googleinc.UnsoundNullSafety,
|
||||
title = {Unsound Null Safety},
|
||||
author = {{Google Inc.}},
|
||||
@ -207,6 +463,45 @@
|
||||
file = {/Users/fabian/Zotero/storage/JWER5SLE/unsound-null-safety.html}
|
||||
}
|
||||
|
||||
@online{googleinc.UpgradingFlutter,
|
||||
title = {Upgrading {{Flutter}}},
|
||||
author = {{Google Inc.}},
|
||||
url = {https://docs.flutter.dev/release/upgrade},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {How to upgrade Flutter.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/XTABHQZG/upgrade.html}
|
||||
}
|
||||
|
||||
@online{googleinc.WritingUsingFragment,
|
||||
title = {Writing and Using Fragment Shaders},
|
||||
author = {{Google Inc.}},
|
||||
url = {https://docs.flutter.dev/ui/design/graphics/fragment-shaders},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {How to author and use fragment shaders to create custom visual effects in your Flutter app.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/RE9JW9CM/fragment-shaders.html}
|
||||
}
|
||||
|
||||
@online{googleplayapps&gamesteamSeamlessMultiplatformApp2021,
|
||||
title = {Seamless Multi-Platform App Development with {{Flutter}}},
|
||||
author = {{Google Play Apps \& Games Team}},
|
||||
date = {2021-03-25T15:02:04},
|
||||
url = {https://medium.com/googleplaydev/seamless-multi-platform-app-development-with-flutter-ea0e8003b0f9},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {Discover how Flutter supports creating beautiful experiences on any device.},
|
||||
langid = {english},
|
||||
organization = {Google Play Apps \& Games},
|
||||
file = {/Users/fabian/Zotero/storage/XYVYN58Y/seamless-multi-platform-app-development-with-flutter-ea0e8003b0f9.html}
|
||||
}
|
||||
|
||||
@online{GStreamerOpenSource,
|
||||
title = {{{GStreamer}}: Open Source Multimedia Framework},
|
||||
url = {https://gstreamer.freedesktop.org/},
|
||||
urldate = {2024-03-12},
|
||||
file = {/Users/fabian/Zotero/storage/TCFDKB5X/gstreamer.freedesktop.org.html}
|
||||
}
|
||||
|
||||
@book{hajianFlutterEngineering2024,
|
||||
title = {Flutter Engineering},
|
||||
author = {Hajian, Majid},
|
||||
@ -218,6 +513,25 @@
|
||||
pagetotal = {547}
|
||||
}
|
||||
|
||||
@online{hanneswinklerFlutter_packagesPackagesLinux_spidev,
|
||||
title = {Flutter\_packages/Packages/Linux\_spidev at Main · Ardera/Flutter\_packages},
|
||||
author = {{Hannes Winkler}},
|
||||
url = {https://github.com/ardera/flutter_packages/tree/main/packages/linux_spidev},
|
||||
urldate = {2024-03-18},
|
||||
file = {/Users/fabian/Zotero/storage/LQJ7ACZR/linux_spidev.html}
|
||||
}
|
||||
|
||||
@online{harveydExtractingCPUUsage2014,
|
||||
type = {Forum post},
|
||||
title = {Extracting \%{{CPU}} Usage from {{VMSTAT}} in a File},
|
||||
author = {{harveyD}},
|
||||
date = {2014-11-13},
|
||||
url = {https://stackoverflow.com/q/26906828},
|
||||
urldate = {2024-03-22},
|
||||
organization = {Stack Overflow},
|
||||
file = {/Users/fabian/Zotero/storage/IHWJAPIC/extracting-cpu-usage-from-vmstat-in-a-file.html}
|
||||
}
|
||||
|
||||
@book{heathEmbeddedSystemsDesign2002,
|
||||
title = {Embedded Systems Design},
|
||||
author = {Heath, Steve},
|
||||
@ -235,6 +549,33 @@
|
||||
file = {/Users/fabian/Zotero/storage/4GAFAAXS/git_object_deduplication.html}
|
||||
}
|
||||
|
||||
@online{ImagesYoctoProject,
|
||||
title = {Images — {{The Yocto Project}} ® 4.0.13 Documentation},
|
||||
url = {https://docs.yoctoproject.org/4.0.13/ref-manual/images.html},
|
||||
urldate = {2024-03-20},
|
||||
file = {/Users/fabian/Zotero/storage/M9ZFZW93/images.html}
|
||||
}
|
||||
|
||||
@online{ImplementPlatformViewSupport,
|
||||
title = {Implement {{PlatformView}} Support on {{Linux}} · {{Issue}} \#41724 · Flutter/Flutter},
|
||||
url = {https://github.com/flutter/flutter/issues/41724},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {We'll want to support embedding native views in a Flutter view, as is currently supported on mobile. This is of course blocked on \#30729 since until we have a view-based toolkit implementation for ...},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/2F4XSY36/41724.html}
|
||||
}
|
||||
|
||||
@online{InstallWSL2023,
|
||||
title = {Install {{WSL}}},
|
||||
date = {2023-08-28},
|
||||
url = {https://learn.microsoft.com/en-us/windows/wsl/install},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {Install Windows Subsystem for Linux with the command, wsl --install. Use a Bash terminal on your Windows machine run by your preferred Linux distribution - Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine, and more are available.},
|
||||
langid = {american},
|
||||
file = {/Users/fabian/Zotero/storage/5ZUBTGDX/install.html}
|
||||
}
|
||||
|
||||
@online{IntroductionDeclarativeUIa,
|
||||
title = {Introduction to Declarative {{UI}}},
|
||||
url = {https://docs.flutter.dev/get-started/flutter-for/declarative},
|
||||
@ -261,6 +602,28 @@
|
||||
file = {/Users/fabian/Zotero/storage/P428MCND/README.html}
|
||||
}
|
||||
|
||||
@online{jeulisAnswerExtractingCPU2018,
|
||||
title = {Answer to "{{Extracting}} \%{{CPU}} Usage from {{VMSTAT}} in a File"},
|
||||
author = {Jeulis},
|
||||
date = {2018-06-04},
|
||||
url = {https://stackoverflow.com/a/50677714},
|
||||
urldate = {2024-03-22},
|
||||
organization = {Stack Overflow},
|
||||
file = {/Users/fabian/Zotero/storage/VT27S3DF/extracting-cpu-usage-from-vmstat-in-a-file.html}
|
||||
}
|
||||
|
||||
@software{joelwinarskeMetaflutterMetaflutter2024,
|
||||
title = {Meta-Flutter/Meta-Flutter},
|
||||
author = {{Joel Winarske}},
|
||||
date = {2024-03-04T21:33:38Z},
|
||||
origdate = {2021-10-14T17:59:48Z},
|
||||
url = {https://github.com/meta-flutter/meta-flutter},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {Google Flutter for Yocto},
|
||||
organization = {meta-flutter},
|
||||
keywords = {drm,egl,elinux,flutter,linux,vulkan,wayland,yocto,yocto-layer}
|
||||
}
|
||||
|
||||
@article{korogluComparisonKeypadsTouchscreen2015,
|
||||
title = {Comparison of Keypads and Touch-Screen Mobile Phones/Devices as Potential Risk for Microbial Contamination},
|
||||
author = {Koroglu, Mehmet and Gunal, Selami and Yildiz, Fatma and Savas, Mehtap and Ozer, Ali and Altindis, Mustafa},
|
||||
@ -280,6 +643,18 @@
|
||||
file = {/Users/fabian/Zotero/storage/TFSCZX36/Koroglu et al_2015_Comparison of keypads and touch-screen mobile phones-devices as potential risk.pdf}
|
||||
}
|
||||
|
||||
@online{krunalbhargavFAQAM625Flutter2023,
|
||||
title = {[{{FAQ}}] {{AM625}}: {{Is Flutter}} the Right {{GUI}} Toolkit for Me: An Engineers Perspective. - {{Processors}} Forum - {{Processors}} - {{TI E2E}} Support Forums},
|
||||
shorttitle = {[{{FAQ}}] {{AM625}}},
|
||||
author = {{Krunal Bhargav}},
|
||||
date = {2023-03-13},
|
||||
url = {https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1205636/faq-am625-is-flutter-the-right-gui-toolkit-for-me-an-engineers-perspective},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {Part Number: AM625 Other Parts Discussed in Thread: SK-AM62 In today’s world, people tend to spend more time interacting with machines through a display screen},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/7SCT8J7T/faq-am625-is-flutter-the-right-gui-toolkit-for-me-an-engineers-perspective.html}
|
||||
}
|
||||
|
||||
@online{larsbakDartLanguageStructured2011,
|
||||
title = {Dart: A Language for Structured Web Programming},
|
||||
shorttitle = {Dart},
|
||||
@ -342,10 +717,18 @@
|
||||
author = {Matsubayashi, Hidenori},
|
||||
date = {2020-10-27},
|
||||
url = {https://elinux.org/images/6/61/Oct_27_Graphical_User_Interface_Using_Flutter_in_Embedded_Systems_Hidenori_Matsubayashi.pdf},
|
||||
urldate = {2024-03-19},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/CJE3VI87/Matsubayashi and Corporation - Graphical User Interface Using Flutter in Embedded.pdf}
|
||||
}
|
||||
|
||||
@online{Metaraspberrypi,
|
||||
title = {[Meta-Raspberrypi]},
|
||||
url = {https://lore.kernel.org/all/CAFd=ocgvmSf1zyWWw3A1=+Hr=WeD0ixdf5xLAT-TWg3hhKTqXw@mail.gmail.com/T/},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/6N8SDSSI/T.html}
|
||||
}
|
||||
|
||||
@online{mickeyYoctoProjectCROPSdemetaraspberrypiwobirudo1642213142,
|
||||
title = {Yocto Project CROPSでmeta-raspberrypiをビルド},
|
||||
author = {{mickey}},
|
||||
@ -358,6 +741,34 @@
|
||||
file = {/Users/fabian/Zotero/storage/KYSU3P75/111902.html}
|
||||
}
|
||||
|
||||
@software{mikerydstromRydmikeFlex_color_picker2024,
|
||||
title = {Rydmike/Flex\_color\_picker},
|
||||
author = {{Mike Rydstrom}},
|
||||
date = {2024-03-13T10:02:06Z},
|
||||
origdate = {2020-10-25T19:50:10Z},
|
||||
url = {https://github.com/rydmike/flex_color_picker},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {A highly customizable Flutter color picker.},
|
||||
keywords = {accent-colors,color-pickers,dart,flex-family,flex-package,flutter,flutter-package,flutter-ui,hex-color,hsv-color-wheel,material-color,package}
|
||||
}
|
||||
|
||||
@online{MorseCodeProject,
|
||||
title = {Morse {{Code Project}}},
|
||||
url = {https://www.arduino.cc/education/morse-code-project/},
|
||||
urldate = {2024-03-18},
|
||||
file = {/Users/fabian/Zotero/storage/H2W6FFDU/morse-code-project.html}
|
||||
}
|
||||
|
||||
@software{mounirTajaouartReal_time_chart2024,
|
||||
title = {Tajaouart/Real\_time\_chart},
|
||||
author = {family=Mounir, given=TAJAOUART, given-i=TAJAOUART},
|
||||
date = {2024-01-12T05:22:25Z},
|
||||
origdate = {2023-02-09T09:27:06Z},
|
||||
url = {https://github.com/tajaouart/real_time_chart},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {A Real-Time Chart.}
|
||||
}
|
||||
|
||||
@article{oszutowska-mazurekAssociationsKnowledgeBehaviours2021,
|
||||
title = {The {{Associations}} between {{Knowledge}} and {{Behaviours Related}} to {{Touch Screens}} and {{Microbiological Threats}} among {{IT Students}}’},
|
||||
author = {Oszutowska-Mazurek, Dorota and Fastowicz, Jaroslaw and Mazurek, Przemyslaw},
|
||||
@ -378,6 +789,23 @@
|
||||
file = {/Users/fabian/Zotero/storage/4GH3EW8M/Oszutowska-Mazurek et al_2021_The Associations between Knowledge and Behaviours Related to Touch Screens and.pdf}
|
||||
}
|
||||
|
||||
@online{OverviewBitbakeDev,
|
||||
title = {Overview — {{Bitbake}} Dev Documentation},
|
||||
url = {https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-intro.html},
|
||||
urldate = {2024-03-19},
|
||||
file = {/Users/fabian/Zotero/storage/LBUUZA4Y/bitbake-user-manual-intro.html}
|
||||
}
|
||||
|
||||
@online{PackagesPackagesFlutter_adaptive_scaffold,
|
||||
title = {Packages/Packages/Flutter\_adaptive\_scaffold at Main · Flutter/Packages},
|
||||
url = {https://github.com/flutter/packages/tree/main/packages/flutter_adaptive_scaffold},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {A collection of useful packages maintained by the Flutter team - flutter/packages},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/TR3YT82K/flutter_adaptive_scaffold.html}
|
||||
}
|
||||
|
||||
@article{palKeypadMobilePhones2013,
|
||||
title = {Keypad Mobile Phones Are Associated with a Significant Increased Risk of Microbial Contamination Compared to Touch Screen Phones},
|
||||
author = {Pal, Pallavi and Roy, Ashoke and Moore, Ginny and Muzslay, Monika and Lee, Elaine and Alder, Sarah and Wilson, Peter and Powles, Tom and Wilson, Peter and Kelly, John},
|
||||
@ -397,6 +825,38 @@
|
||||
file = {/Users/fabian/Zotero/storage/44QLMR8K/Pal et al_2013_Keypad mobile phones are associated with a significant increased risk of.pdf}
|
||||
}
|
||||
|
||||
@online{paulAnswerGettingCpu2013,
|
||||
title = {Answer to "{{Getting}} Cpu Usage Realtime"},
|
||||
author = {Paul},
|
||||
date = {2013-05-20},
|
||||
url = {https://askubuntu.com/a/297978},
|
||||
urldate = {2024-03-22},
|
||||
organization = {Ask Ubuntu},
|
||||
file = {/Users/fabian/Zotero/storage/B8HNT3Z4/getting-cpu-usage-realtime.html}
|
||||
}
|
||||
|
||||
@software{PingbirdPuro2024,
|
||||
title = {Pingbird/Puro},
|
||||
date = {2024-03-16T13:14:05Z},
|
||||
origdate = {2022-10-12T23:52:50Z},
|
||||
url = {https://github.com/pingbird/puro},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {A powerful tool for installing and upgrading Flutter versions.},
|
||||
keywords = {dart,flutter}
|
||||
}
|
||||
|
||||
@online{publishedRaspberryPiCelebrates2024,
|
||||
title = {Raspberry {{Pi}} Celebrates 12 Years as Sales Break 61 Million Units},
|
||||
author = {{published}, Les Pounder},
|
||||
date = {2024-02-29T09:59:47Z},
|
||||
url = {https://www.tomshardware.com/raspberry-pi/raspberry-pi-celebrates-12-years-as-sales-break-61-million-units},
|
||||
urldate = {2024-03-11},
|
||||
abstract = {That is a lot of Pi!},
|
||||
langid = {english},
|
||||
organization = {Tom's Hardware},
|
||||
file = {/Users/fabian/Zotero/storage/N4E237UB/raspberry-pi-celebrates-12-years-as-sales-break-61-million-units.html}
|
||||
}
|
||||
|
||||
@online{Puro,
|
||||
title = {Puro},
|
||||
url = {https://puro.dev/},
|
||||
@ -406,6 +866,17 @@
|
||||
file = {/Users/fabian/Zotero/storage/GEQ4Q3EP/widget.html}
|
||||
}
|
||||
|
||||
@online{raspberrypiltd.RaspberryPiOS,
|
||||
title = {Raspberry {{Pi OS}}},
|
||||
author = {{Raspberry Pi Ltd.}},
|
||||
url = {https://www.raspberrypi.com/software/},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.},
|
||||
langid = {british},
|
||||
organization = {Raspberry Pi},
|
||||
file = {/Users/fabian/Zotero/storage/YZZW7CAB/software.html}
|
||||
}
|
||||
|
||||
@online{ReactiveManifesto,
|
||||
title = {The {{Reactive Manifesto}}},
|
||||
url = {https://www.reactivemanifesto.org/},
|
||||
@ -413,6 +884,13 @@
|
||||
file = {/Users/fabian/Zotero/storage/FJSMEDYJ/www.reactivemanifesto.org.html}
|
||||
}
|
||||
|
||||
@online{ReleasesYoctoProject,
|
||||
title = {Releases - {{Yocto Project}}},
|
||||
url = {https://wiki.yoctoproject.org/wiki/Releases},
|
||||
urldate = {2024-03-20},
|
||||
file = {/Users/fabian/Zotero/storage/342QAUHT/Releases.html}
|
||||
}
|
||||
|
||||
@online{ReleaseV0Rev,
|
||||
title = {Release v0.0.6: {{Rev}} Alpha Branch Version to 0.0.6, Flutter 0.0.26 (\#10010) · Flutter/Flutter},
|
||||
shorttitle = {Release v0.0.6},
|
||||
@ -432,6 +910,23 @@
|
||||
file = {/Users/fabian/Zotero/storage/4YEIHLEH/why-gnu-linux.en.html}
|
||||
}
|
||||
|
||||
@online{Roadmap,
|
||||
title = {Roadmap},
|
||||
url = {https://github.com/flutter/flutter/wiki/Roadmap},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {Flutter makes it easy and fast to build beautiful apps for mobile and beyond - flutter/flutter},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/WY6EUHZT/Roadmap.html}
|
||||
}
|
||||
|
||||
@article{roscaMasterThesisIntegrating2024,
|
||||
title = {Master Thesis: {{Integrating Wayland}} with {{Flutter}}},
|
||||
author = {Rosca, Alex-Manuel},
|
||||
date = {2024},
|
||||
publisher = {Université de Liège, Liège, Belgique}
|
||||
}
|
||||
|
||||
@online{RpifirmwareAddFirmware,
|
||||
title = {Rpi-Firmware: Add Firmware for Zero 2w by Classabbyamp · {{Pull Request}} \#39123 · Void-Linux/Void-Packages},
|
||||
url = {https://github.com/void-linux/void-packages/pull/39123},
|
||||
@ -439,6 +934,35 @@
|
||||
file = {/Users/fabian/Zotero/storage/QWUKGL4U/39123.html}
|
||||
}
|
||||
|
||||
@online{SamplesMaterial_3_demoLib,
|
||||
title = {Samples/Material\_3\_demo/Lib/Home.Dart at Main · Flutter/Samples},
|
||||
url = {https://github.com/flutter/samples/blob/main/material_3_demo/lib/home.dart},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {A collection of Flutter examples and demos. Contribute to flutter/samples development by creating an account on GitHub.},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/QXJKCUYT/material_3_demo.html}
|
||||
}
|
||||
|
||||
@software{sauerPeziDart_periphery2023,
|
||||
title = {Pezi/Dart\_periphery},
|
||||
author = {Sauer, Peter},
|
||||
date = {2023-10-17T19:10:56Z},
|
||||
origdate = {2021-02-07T05:14:50Z},
|
||||
url = {https://github.com/pezi/dart_periphery},
|
||||
urldate = {2024-03-18},
|
||||
abstract = {dart\_periphery is a Dart port of the native c-periphery library}
|
||||
}
|
||||
|
||||
@online{ServerpodFlutterBackend,
|
||||
title = {Serverpod – {{The Flutter Backend}}},
|
||||
url = {https://serverpod.com},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {Serverpod is an open-source, scalable app server, written in Dart for the Flutter community.},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/QARAXQU8/serverpod.dev.html}
|
||||
}
|
||||
|
||||
@online{SetEditor,
|
||||
title = {Set up an Editor},
|
||||
url = {https://docs.flutter.dev/get-started/editor},
|
||||
@ -458,6 +982,20 @@
|
||||
file = {/Users/fabian/Zotero/storage/NV4BSHXY/skia.org.html}
|
||||
}
|
||||
|
||||
@online{SonyFlutterembeddedlinuxEmbedded,
|
||||
title = {Sony/Flutter-Embedded-Linux: {{Embedded Linux}} Embedding for {{Flutter}}},
|
||||
url = {https://github.com/sony/flutter-embedded-linux},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/SIFJRZ5L/flutter-embedded-linux.html}
|
||||
}
|
||||
|
||||
@online{SparkFunLEDMatrixa,
|
||||
title = {{{SparkFun LED Matrix}} - {{Serial Interface}} - {{Red}}/{{Green}}/{{Blue}} - {{COM-00760}} - {{SparkFun Electronics}}},
|
||||
url = {https://www.sparkfun.com/products/retired/760},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/A2HYP9IJ/760.html}
|
||||
}
|
||||
|
||||
@online{stephanievannessRacingCESExciting2024,
|
||||
title = {Racing {{Toward CES}} with an {{Exciting New UI}} for {{Automotive Grade Linux IVI Demo}}},
|
||||
author = {{Stephanie Van Ness}},
|
||||
@ -479,6 +1017,13 @@
|
||||
file = {/Users/fabian/Zotero/storage/DZE53CBK/22.html}
|
||||
}
|
||||
|
||||
@online{TagesschauAPIOpenAPIa,
|
||||
title = {Tagesschau {{API}} - {{OpenAPI Documentation}}},
|
||||
url = {https://tagesschau.api.bund.dev/},
|
||||
urldate = {2024-03-18},
|
||||
file = {/Users/fabian/Zotero/storage/62FRQD5R/tagesschau.api.bund.dev.html}
|
||||
}
|
||||
|
||||
@online{TechnicalOverviewa,
|
||||
title = {Technical {{Overview}}},
|
||||
url = {https://www.yoctoproject.org/development/technical-overview/},
|
||||
@ -534,6 +1079,34 @@
|
||||
file = {/Users/fabian/Zotero/storage/BSNRLE6L/the-road-to-dart-3-afdd580fbefa.html}
|
||||
}
|
||||
|
||||
@online{TouchDisplayKit,
|
||||
title = {7″ {{Touch Display Kit}} for {{Raspberry Pi Zero}}, with {{IPS}} Display {{Expansion Board}}, 1024×600, 5-Point {{Capacitive Touch}} | {{Zero-DISP-7A}}},
|
||||
url = {https://www.waveshare.com/zero-disp-7a.htm},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/3NP5MWED/zero-disp-7a.html}
|
||||
}
|
||||
|
||||
@software{ToyotaconnectedIvihomescreen2024,
|
||||
title = {Toyota-Connected/Ivi-Homescreen},
|
||||
date = {2024-03-01T16:39:27Z},
|
||||
origdate = {2021-08-31T22:16:24Z},
|
||||
url = {https://github.com/toyota-connected/ivi-homescreen},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {Embedded Flutter runtime targeting Embedded Linux with Wayland},
|
||||
organization = {toyota-connected},
|
||||
keywords = {embedded-linux,flutter,flutter-embedder,linux,toyota,toyota-flutter,wayland}
|
||||
}
|
||||
|
||||
@online{UsingCustomEmbeddersa,
|
||||
title = {Using Custom Embedders with the {{Flutter CLI}}},
|
||||
url = {https://github.com/flutter/flutter/wiki/Using-custom-embedders-with-the-Flutter-CLI},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {Flutter makes it easy and fast to build beautiful apps for mobile and beyond - flutter/flutter},
|
||||
langid = {english},
|
||||
organization = {GitHub},
|
||||
file = {/Users/fabian/Zotero/storage/28FNIIGU/Using-custom-embedders-with-the-Flutter-CLI.html}
|
||||
}
|
||||
|
||||
@online{valleyWhatLinuxOverview2020,
|
||||
title = {What {{Is Linux}}: {{An Overview}} of the {{Linux Operating System}}},
|
||||
shorttitle = {What {{Is Linux}}},
|
||||
@ -554,6 +1127,37 @@
|
||||
abstract = {Annotation This short, free ebook from March 2012 describes the Dart language, libraries, and tools that help you develop structured, fast, and maintainable web apps that run in any modern browser.}
|
||||
}
|
||||
|
||||
@article{wasilewskiComparisonJavaFlutter2021,
|
||||
title = {A {{Comparison}} of {{Java}}, {{Flutter}} and {{Kotlin}}/{{Native Technologies}} for {{Sensor Data-Driven Applications}}},
|
||||
author = {Wasilewski, Kamil and Zabierowski, Wojciech},
|
||||
date = {2021-01},
|
||||
journaltitle = {Sensors},
|
||||
volume = {21},
|
||||
number = {10},
|
||||
pages = {3324},
|
||||
publisher = {Multidisciplinary Digital Publishing Institute},
|
||||
issn = {1424-8220},
|
||||
doi = {10.3390/s21103324},
|
||||
url = {https://www.mdpi.com/1424-8220/21/10/3324},
|
||||
urldate = {2023-11-14},
|
||||
abstract = {As a result of the continuous progress and fast-growing popularity of mobile technologies in recent years, the demand for mobile applications has increased rapidly. One of the most important decisions that its developers have to make is the choice of technology on which their application will be based. This article is devoted to the comparison of Java, Flutter, and Kotlin/Native technologies for applications based on processing and analyzing data from sensors. The main elements of the comparison are the efficiency and resource utilization of mobile applications for Android OS implemented in each of the aforementioned technologies.},
|
||||
issue = {10},
|
||||
langid = {english},
|
||||
keywords = {mobile applications,mobile frameworks,performance measures,programming language selection},
|
||||
file = {/Users/fabian/Zotero/storage/NIZ2S6GC/Wasilewski and Zabierowski - 2021 - A Comparison of Java, Flutter and KotlinNative Te.pdf}
|
||||
}
|
||||
|
||||
@online{WaylandWestonGitLab2024,
|
||||
title = {Wayland / Weston · {{GitLab}}},
|
||||
date = {2024-03-04},
|
||||
url = {https://gitlab.freedesktop.org/wayland/weston},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {A lightweight and functional Wayland compositor},
|
||||
langid = {english},
|
||||
organization = {GitLab},
|
||||
file = {/Users/fabian/Zotero/storage/QB9C5R9S/weston.html}
|
||||
}
|
||||
|
||||
@article{weiserComputer21stCentury1999,
|
||||
title = {The Computer for the 21st Century},
|
||||
author = {Weiser, Mark},
|
||||
@ -571,6 +1175,16 @@
|
||||
file = {/Users/fabian/Zotero/storage/8CCSE83J/Weiser - 1999 - The computer for the 21st century.pdf}
|
||||
}
|
||||
|
||||
@online{WhatEmbeddedLinux,
|
||||
title = {What Is Embedded {{Linux}}? {{Part I}}},
|
||||
shorttitle = {What Is Embedded {{Linux}}?},
|
||||
url = {https://ubuntu.com/blog/what-is-embedded-linux},
|
||||
urldate = {2024-02-13},
|
||||
abstract = {“Hello everybody out there using minix – ~I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones.~ […] It is NOT portable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that’s all I have :-(.” [1] The […]},
|
||||
langid = {english},
|
||||
organization = {Ubuntu}
|
||||
}
|
||||
|
||||
@online{WhatWouldYou,
|
||||
title = {What Would You like to See Most in Minix?},
|
||||
url = {https://groups.google.com/g/comp.os.minix/c/dlNtH7RRrGA/m/SwRavCzVE7gJ},
|
||||
@ -578,6 +1192,27 @@
|
||||
file = {/Users/fabian/Zotero/storage/6TCWJW3N/SwRavCzVE7gJ.html}
|
||||
}
|
||||
|
||||
@software{winklerArderaFlutterpi_tool2024,
|
||||
title = {Ardera/Flutterpi\_tool},
|
||||
author = {Winkler, Hannes},
|
||||
date = {2024-03-12T04:19:44Z},
|
||||
origdate = {2023-06-26T10:15:35Z},
|
||||
url = {https://github.com/ardera/flutterpi_tool},
|
||||
urldate = {2024-03-21},
|
||||
abstract = {A tool to make developing \& distributing flutter apps for https://github.com/ardera/flutter-pi easier.}
|
||||
}
|
||||
|
||||
@software{winklerArderaFlutterpi2024,
|
||||
title = {Ardera/Flutter-Pi},
|
||||
author = {Winkler, Hannes},
|
||||
date = {2024-03-10T23:46:18Z},
|
||||
origdate = {2019-06-05T11:10:56Z},
|
||||
url = {https://github.com/ardera/flutter-pi},
|
||||
urldate = {2024-03-12},
|
||||
abstract = {A light-weight Flutter Engine Embedder for Raspberry Pi that runs without X.},
|
||||
keywords = {digital-signage,embedded,flutter,flutter-pi,hacktoberfest,raspberry-pi}
|
||||
}
|
||||
|
||||
@online{WorkingJSONFlutter2021,
|
||||
title = {Working with {{JSON}} in {{Flutter While Using}} Json\_annotations and Json\_serializable {{Modules}} in 2022 | {{John Maeda}}’s {{Blog}}},
|
||||
date = {2021-06-22},
|
||||
@ -589,6 +1224,16 @@
|
||||
file = {/Users/fabian/Zotero/storage/ND8L5RU6/working-with-json-in-flutter-while-using-json_annotations-and-json_serializable-modules-in-2022.html}
|
||||
}
|
||||
|
||||
@software{YoctoprojectPoky2024,
|
||||
title = {Yoctoproject/Poky},
|
||||
date = {2024-03-19T13:56:11Z},
|
||||
origdate = {2021-11-25T16:47:30Z},
|
||||
url = {https://github.com/yoctoproject/poky},
|
||||
urldate = {2024-03-20},
|
||||
abstract = {Mirror of https://git.yoctoproject.org/poky/.},
|
||||
organization = {The Yocto Project}
|
||||
}
|
||||
|
||||
@online{yusukemitsukiHelperScriptRun,
|
||||
title = {The Helper Script to Run the Bitbake with Using {{CROPS}}.},
|
||||
author = {{Yusuke Mitsuki}},
|
||||
@ -597,6 +1242,30 @@
|
||||
file = {/Users/fabian/Zotero/storage/P8BGUI2I/2b9671f062de558f3312f7378ed3c240.html}
|
||||
}
|
||||
|
||||
@online{yusukemitsukiHelperScriptRuna,
|
||||
title = {The Helper Script to Run the Bitbake with Using {{CROPS}}.},
|
||||
author = {{Yusuke Mitsuki}},
|
||||
url = {https://gist.github.com/mickey-happygolucky/2b9671f062de558f3312f7378ed3c240},
|
||||
urldate = {2024-03-19},
|
||||
abstract = {The helper script to run the bitbake with using CROPS. - run\_crops.sh},
|
||||
langid = {english},
|
||||
organization = {Gist},
|
||||
file = {/Users/fabian/Zotero/storage/4F89ZRQE/2b9671f062de558f3312f7378ed3c240.html}
|
||||
}
|
||||
|
||||
@online{ZeroDISP7AWaveshareWiki,
|
||||
title = {Zero-{{DISP-7A}} - {{Waveshare Wiki}}},
|
||||
url = {https://www.waveshare.com/wiki/Zero-DISP-7A},
|
||||
urldate = {2024-03-21},
|
||||
file = {/Users/fabian/Zotero/storage/RHZ8PKDW/Zero-DISP-7A.html}
|
||||
}
|
||||
|
||||
@article{zindlFlutterWindowsDesktop2021,
|
||||
title = {Flutter on {{Windows Desktop}}: A Use Case Based Study},
|
||||
author = {Zindl, Stefan},
|
||||
date = {2021}
|
||||
}
|
||||
|
||||
@online{zotero-649,
|
||||
url = {https://tagesschau.api.bund.dev/openapi.yaml},
|
||||
urldate = {2024-03-03},
|
||||
|
BIN
assets/.DS_Store
vendored
BIN
assets/mermaid/NewsUMLDiagram.pdf
Normal file
BIN
assets/raspberry/.DS_Store
vendored
Normal file
BIN
assets/raspberry/hotReloadError.png
Normal file
After Width: | Height: | Size: 9.9 MiB |
BIN
assets/raspberry/imagerOptions.png
Normal file
After Width: | Height: | Size: 317 KiB |
BIN
assets/raspberry/raspi.png
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
assets/raspberry/raspi2.png
Normal file
After Width: | Height: | Size: 123 KiB |
BIN
assets/raspberry/raspi3.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
assets/raspberry/raspi4.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
assets/raspberry/reloadError.jpg
Normal file
After Width: | Height: | Size: 5.4 MiB |
BIN
assets/raspberry/rgbMatrix.jpg
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
assets/raspberry/waveshare.jpg
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
assets/raspberry/wiring.pdf
Normal file
1525
assets/raspberry/wiring.svg
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
assets/raspberry/zero.jpg
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
assets/screenshots/.DS_Store
vendored
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 207 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 244 KiB |
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 2.0 MiB |
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 356 KiB After Width: | Height: | Size: 320 KiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 164 KiB |
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 359 KiB After Width: | Height: | Size: 501 KiB |
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 157 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 187 KiB |
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 156 KiB |
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 101 KiB |
BIN
assets/screenshots/systemInfo.png
Normal file
After Width: | Height: | Size: 348 KiB |
BIN
assets/screenshotsShadow/.DS_Store
vendored
Normal file
BIN
assets/screenshotsShadow/benchmark.png
Normal file
After Width: | Height: | Size: 197 KiB |
BIN
assets/screenshotsShadow/benchmarkFlame.png
Normal file
After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 245 KiB After Width: | Height: | Size: 245 KiB |
BIN
assets/screenshotsShadow/benchmarkMap.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 950 KiB After Width: | Height: | Size: 950 KiB |
BIN
assets/screenshotsShadow/benchmarkSprite.png
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
assets/screenshotsShadow/benchmarkSpriteFinished.png
Normal file
After Width: | Height: | Size: 356 KiB |
BIN
assets/screenshotsShadow/benchmarkVideo.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
assets/screenshotsShadow/benchmarkVsync.png
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
assets/screenshotsShadow/home.png
Normal file
After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
BIN
assets/screenshotsShadow/material3.png
Normal file
After Width: | Height: | Size: 181 KiB |
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 161 KiB |
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 173 KiB |
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
BIN
assets/screenshotsShadow/matrix.png
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
assets/screenshotsShadow/matrixColor.png
Normal file
After Width: | Height: | Size: 164 KiB |
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
BIN
assets/screenshotsShadow/morse.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
assets/screenshotsShadow/morseInput.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
assets/screenshotsShadow/newsGrid.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
assets/screenshotsShadow/newsList.png
Normal file
After Width: | Height: | Size: 359 KiB |
BIN
assets/screenshotsShadow/settings.png
Normal file
After Width: | Height: | Size: 181 KiB |
BIN
assets/screenshotsShadow/settingsDark.png
Normal file
After Width: | Height: | Size: 199 KiB |
BIN
assets/screenshotsShadow/settingsMaterial2.png
Normal file
After Width: | Height: | Size: 178 KiB |
BIN
assets/screenshotsShadow/settingsWifiConnect.png
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
assets/screenshotsShadow/settingsWifiDetails.png
Normal file
After Width: | Height: | Size: 146 KiB |
BIN
assets/screenshotsShadow/settingsWifiList.png
Normal file
After Width: | Height: | Size: 143 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 163 KiB |
BIN
assets/skizzen/alle.pdf
Normal file
BIN
assets/toyota/.DS_Store
vendored
Normal file
BIN
assets/toyota/agl.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
@ -5,7 +5,7 @@ header-includes: |
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{snakes,arrows,shapes}
|
||||
\usetikzlibrary{snakes,arrows,shapes,shadows,calc}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{pgfplots}
|
||||
\usepackage{pgfplotstable}
|
||||
@ -17,7 +17,7 @@ header-includes: |
|
||||
\usepackage{graphicx}
|
||||
\usepackage{xcolor,stackengine}
|
||||
\usepackage{colortbl}
|
||||
\usepackage{tcolorbox}
|
||||
\usepackage[most]{tcolorbox}
|
||||
\usepackage{lastpage}
|
||||
\usepackage{subcaption}
|
||||
\usepackage{tabularx}
|
||||
@ -33,6 +33,7 @@ header-includes: |
|
||||
\usepackage{fontspec}
|
||||
\usepackage{dirtree}
|
||||
\usepackage{etoolbox}
|
||||
\usepackage{textpos}
|
||||
\setmainfont{Times New Roman}
|
||||
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,commandchars=\\\{\}}
|
||||
\newcommand{\hideFromPandoc}[1]{#1}
|
||||
@ -88,3 +89,43 @@ postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
|
||||
\newcommand{\mkbibnodate}{n\adddot d\adddot}
|
||||
|
||||
\setlength{\parindent}{0em}
|
||||
|
||||
\def\shadowshift{3pt,-3pt}
|
||||
\def\shadowradius{6pt}
|
||||
|
||||
\colorlet{innercolor}{black!60}
|
||||
\colorlet{outercolor}{gray!05}
|
||||
|
||||
\newcommand\drawshadow[1]{
|
||||
\begin{pgfonlayer}{shadow}
|
||||
\shade[outercolor,inner color=innercolor,outer color=outercolor] ($(#1.south west)+(\shadowshift)+(\shadowradius/2,\shadowradius/2)$) circle (\shadowradius);
|
||||
\shade[outercolor,inner color=innercolor,outer color=outercolor] ($(#1.north west)+(\shadowshift)+(\shadowradius/2,-\shadowradius/2)$) circle (\shadowradius);
|
||||
\shade[outercolor,inner color=innercolor,outer color=outercolor] ($(#1.south east)+(\shadowshift)+(-\shadowradius/2,\shadowradius/2)$) circle (\shadowradius);
|
||||
\shade[outercolor,inner color=innercolor,outer color=outercolor] ($(#1.north east)+(\shadowshift)+(-\shadowradius/2,-\shadowradius/2)$) circle (\shadowradius);
|
||||
\shade[top color=innercolor,bottom color=outercolor] ($(#1.south west)+(\shadowshift)+(\shadowradius/2,-\shadowradius/2)$) rectangle ($(#1.south east)+(\shadowshift)+(-\shadowradius/2,\shadowradius/2)$);
|
||||
\shade[left color=innercolor,right color=outercolor] ($(#1.south east)+(\shadowshift)+(-\shadowradius/2,\shadowradius/2)$) rectangle ($(#1.north east)+(\shadowshift)+(\shadowradius/2,-\shadowradius/2)$);
|
||||
\shade[bottom color=innercolor,top color=outercolor] ($(#1.north west)+(\shadowshift)+(\shadowradius/2,-\shadowradius/2)$) rectangle ($(#1.north east)+(\shadowshift)+(-\shadowradius/2,\shadowradius/2)$);
|
||||
\shade[outercolor,right color=innercolor,left color=outercolor] ($(#1.south west)+(\shadowshift)+(-\shadowradius/2,\shadowradius/2)$) rectangle ($(#1.north west)+(\shadowshift)+(\shadowradius/2,-\shadowradius/2)$);
|
||||
\filldraw ($(#1.south west)+(\shadowshift)+(\shadowradius/2,\shadowradius/2)$) rectangle ($(#1.north east)+(\shadowshift)-(\shadowradius/2,\shadowradius/2)$);
|
||||
\end{pgfonlayer}
|
||||
}
|
||||
|
||||
\pgfdeclarelayer{shadow}
|
||||
\pgfsetlayers{shadow,main}
|
||||
|
||||
\newsavebox\mybox
|
||||
\newlength\mylen
|
||||
|
||||
\newcommand\shadowimage[2][]{%
|
||||
\setbox0=\hbox{\includegraphics[#1]{#2}}
|
||||
\setlength\mylen{\wd0}
|
||||
\ifnum\mylen<\ht0
|
||||
\setlength\mylen{\ht0}
|
||||
\fi
|
||||
\divide \mylen by 120
|
||||
\def\shadowshift{\mylen,-\mylen}
|
||||
\def\shadowradius{\the\dimexpr\mylen+\mylen+\mylen\relax}
|
||||
\begin{tikzpicture}
|
||||
\node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[#1]{#2}};
|
||||
\drawshadow{image}
|
||||
\end{tikzpicture}}
|
||||
|
@ -6,24 +6,13 @@ Hochschule Rhein-Waal \\
|
||||
Fakultät Kommunikation und Umwelt \\
|
||||
Prof Dr.-Ing. Ido Iurgel \\
|
||||
Prof Dr. Kai Essig \\
|
||||
\vspace{3cm}
|
||||
\vspace{2cm}
|
||||
\Large \textbf{\textsc{Flutter als Entwicklungsplattform für eingebettete Linux Systeme: eine Fallstudie}} \\
|
||||
\vspace{2.0cm}
|
||||
\vspace{8.0cm}
|
||||
\normalsize Bachelorarbeit \\
|
||||
im Studiengang \\
|
||||
Medieninformatik \\
|
||||
Zur Erlangung des akademischen Grades \\
|
||||
\vspace{2.0cm}
|
||||
Bachelor of Science \\
|
||||
\vspace{2.0cm}
|
||||
\vspace{7.65cm}
|
||||
vorgelegt von\\
|
||||
Fabian Baldeau \\
|
||||
\vspace{1.5cm}
|
||||
Matrikelnummer: \\
|
||||
27516 \\
|
||||
\vspace{1.5cm}
|
||||
Abgabedatum: \\
|
||||
xx. xxxx 2024 \\
|
||||
\vspace{2cm}
|
||||
\end{center}
|
||||
|
||||
|
44
chapters/01_titel/00_titlepage2.md
Normal file
@ -0,0 +1,44 @@
|
||||
\pagebreak
|
||||
|
||||
\thispagestyle{empty}
|
||||
|
||||
\begin{titlepage}
|
||||
\begin{center}
|
||||
Hochschule Rhein-Waal \\
|
||||
Fakultät Kommunikation und Umwelt \\
|
||||
Prof Dr.-Ing. Ido Iurgel \\
|
||||
Prof Dr. Kai Essig \\
|
||||
\vspace{2cm}
|
||||
\Large \textbf{\textsc{Flutter als Entwicklungsplattform für eingebettete Linux Systeme: eine Fallstudie}} \\
|
||||
\vspace{2.0cm}
|
||||
\normalsize Bachelorarbeit \\
|
||||
im Studiengang \\
|
||||
Medieninformatik \\
|
||||
Zur Erlangung des akademischen Grades \\
|
||||
\vspace{1.5cm}
|
||||
Bachelor of Science \\
|
||||
\vspace{1.5cm}
|
||||
vorgelegt von\\
|
||||
Fabian Baldeau \\
|
||||
Schulstraße 84 \\
|
||||
47574 Goch \\
|
||||
\vspace{1.5cm}
|
||||
Matrikelnummer: \\
|
||||
27516 \\
|
||||
\vspace{1.5cm}
|
||||
Abgabedatum: \\
|
||||
22. März 2024 \\
|
||||
\vspace{2cm}
|
||||
\end{center}
|
||||
|
||||
\end{titlepage}
|
||||
|
||||
\pagenumbering{roman}
|
||||
\fancyhf{}
|
||||
|
||||
<!-- \fancyhead[C]{\thepage} -->
|
||||
|
||||
\fancyhead[C]{}
|
||||
\fancyfoot[R]{\thepage}
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\pagestyle{fancy}
|
@ -1,5 +1,7 @@
|
||||
\addtocounter{page}{1}
|
||||
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
|
||||
\begin{abstract}
|
||||
Die Integration von Flutter's plattformübergreifenden
|
||||
UI-Fähigkeiten mit der Anpassungsfähigkeit von Embedded
|
||||
@ -7,21 +9,19 @@ Linux verspricht die Rationalisierung der Entwicklung
|
||||
von Benutzeroberflächen (UIs) für eingebettete Systeme.
|
||||
Diese Arbeit untersucht die Eignung von Flutter in
|
||||
diesem Kontext durch eine Fallstudie: die Entwicklung
|
||||
eines Flutter App Prototyps auf einem Raspberry
|
||||
einer Demo Anwendung mit Flutter für einen Raspberry
|
||||
Pi mit einer angepassten eingebetteten Linux Distribution.
|
||||
Leistungsmesswerte, Benutzerfreundlichkeit und der
|
||||
Entwicklungsprozess werden bewertet. Die Ergebnisse
|
||||
zeigen, dass Flutter, wenn es angepasst wird,
|
||||
Leistungsmesswerte und der Entwicklungsprozess werden bewertet.
|
||||
Die Ergebnisse zeigen, dass Flutter, wenn es angepasst wird,
|
||||
erfolgreich zur Erstellung von attraktiven und benutzerfreundlichen
|
||||
eingebetteten Schnittstellen mit wenigen Kompromissen
|
||||
bei der Leistung genutzt werden kann.
|
||||
bei der Leistung genutzt werden kann. \\
|
||||
|
||||
Die Arbeit beschäftigt sich im Wesentlichen mit der Entwicklung einer
|
||||
prototypischen Anwendung mit Flutter für ein eingebettetes Linux System.
|
||||
Dabei wurde ein Konzept ausgearbeitet werden, dass zeigt wie Flutter in
|
||||
Dabei wurde ein Konzept ausgearbeitet, dass zeigt wie Flutter in
|
||||
eingebetteten Linux Systemen genutzt werden kann und es wurde anhand der
|
||||
prototypischen Anwendung untersucht, wie gut Flutter für diesen
|
||||
Verwendungszweck geeignet ist. Die Ergebnisse der Untersuchung
|
||||
zeigen ein großes Potential für die Nutzung von Flutter in eingebetteten
|
||||
Linux Systemen.
|
||||
Verwendungszweck geeignet ist. Es wurden dabei speziell die Embedder
|
||||
Flutter-Pi und Flutter-Auto genauer untersucht.
|
||||
\end{abstract}
|
||||
|
@ -9,21 +9,23 @@
|
||||
Die Entwicklung moderner und ansprechender Benutzeroberflächen (GUIs) für eingebettete
|
||||
Linux-Systeme ist eine Herausforderung. Herkömmliche GUI-Toolkits stoßen häufig an
|
||||
ihre Grenzen, wenn es um die Erfüllung der Anforderungen an Leistung,
|
||||
plattformübergreifende Kompatibilität und Design geht. Flutter [@googleinc.FutterBuildAny],
|
||||
plattformübergreifende Kompatibilität und Design geht. Flutter,
|
||||
ein quelloffenes Benutzerschnittstellen-Entwicklungs-Kit von Google,
|
||||
stellt eine vielversprechende Alternative dar. Es zeichnet sich durch native Kompilierung
|
||||
für hohe Performance und geringen Ressourcenverbrauch, eine flexible Architektur,
|
||||
stellt eine vielversprechende Alternative dar. Es zeichnet sich durch eine native Kompilierung
|
||||
für eine hohe Leistung und geringen Ressourcenverbrauch, einer flexiblen Architektur,
|
||||
die an verschiedene Plattformen angepasst werden kann, und seinen Fokus auf moderne
|
||||
und intuitive Benutzeroberflächen aus.
|
||||
und intuitive Benutzeroberflächen aus. Zudem ist Flutter durch seine BSD-Lizenz
|
||||
attraktiv für sowohl kommerzielle Anwendungen als auch Hochschul- und Hobbyprojekte,
|
||||
da es keine Lizenzgebühren oder Einschränkungen gibt.
|
||||
|
||||
## Relevanz
|
||||
## Relevanz und Zielsetzung
|
||||
|
||||
In dieser Arbeit wird der Einsatz von Flutter für die Entwicklung von GUIs für
|
||||
eingebettete Linux-Systeme untersucht. Die Arbeit leistet einen wichtigen Beitrag
|
||||
zu diesem Forschungsbereich, indem sie:
|
||||
|
||||
- die Leistungsmerkmale von Flutter auf eingebetteter Hardware detailliert untersucht
|
||||
und wertvolle Hinweise für die Auswahl des richtigen Toolkits liefert.
|
||||
und wertvolle Hinweise für die Auswahl der richtigen Toolkits liefert.
|
||||
- den Entwicklungsprozess detailliert beschreibt und Herausforderungen sowie
|
||||
bewährte Praktiken bei der Verwendung von Flutter in einem eingebetteten Linux-Kontext aufzeigt.
|
||||
- eine reale eingebettete GUI mit Flutter implementiert und dabei die Fähigkeiten und
|
||||
@ -33,19 +35,19 @@ Die Ergebnisse dieser Arbeit sind relevant für Entwickler
|
||||
im Bereich eingebetteter Systeme, die moderne,
|
||||
performante und ansprechende GUIs für Linux-basierte Geräte entwickeln möchten.
|
||||
|
||||
## Zielsetzung
|
||||
<!-- ## Zielsetzung
|
||||
|
||||
Ziel der Arbeit ist es, die Potenziale und Herausforderungen von
|
||||
Flutter im Bereich der GUI-Entwicklung für eingebettete Linux-Systeme
|
||||
zu beleuchten und Entwicklern wertvolle Hinweise für die Auswahl des
|
||||
richtigen Toolkits zu liefern.
|
||||
richtigen Toolkits zu liefern. -->
|
||||
|
||||
## Problemstellung
|
||||
|
||||
Beantwortet werden soll die Frage, inwieweit sich Flutter für die Entwicklung von GUIs
|
||||
für eingebettete Linux-Systeme eignet. Dazu wird in dieser Arbeit geklärt:
|
||||
Wie einfach und effizient ist die Entwicklung und Wartung von GUIs mit Flutter?
|
||||
Welche Auswirkungen hat Flutter auf die Performance und den Ressourcenverbrauch im
|
||||
Welche Auswirkungen hat Flutter auf die Leistung und den Ressourcenverbrauch im
|
||||
eingebetteten Kontext? Wie hoch ist der Lernaufwand für Entwickler? Welche Community
|
||||
und Support-Ressourcen stehen für Flutter-Entwickler zur Verfügung? Um diese Fragen
|
||||
zu beantworten wird die folgende Methodik angewendet.
|
||||
@ -54,19 +56,28 @@ zu beantworten wird die folgende Methodik angewendet.
|
||||
|
||||
Um die Forschungsfrage zu beantworten, wird eine Literaturrecherche,
|
||||
eine experimentelle Untersuchung und eine Auswertung der Untersuchung durchgeführt.
|
||||
In der Literaturrecherche werden aktuelle wissenschaftliche Quellen zu GUI-Entwicklung
|
||||
für eingebettete Systeme und Flutter ausgewertet. Die experimentelle Untersuchung
|
||||
umfasst die Implementierung einer realen eingebetteten GUI mit Flutter und die
|
||||
Bewertung der Performance, des Ressourcenverbrauchs und der Benutzerfreundlichkeit
|
||||
der GUI. Die Ergebnisse der Literaturrecherche und der experimentellen Untersuchung
|
||||
werden in einem Bewertungsschema zusammengefasst und abschließend bewertet. Basierend
|
||||
auf den Ergebnissen wird ein Leitfaden für die Entwicklung von GUIs für eingebettete
|
||||
Linux-Systeme mit Flutter erstellt.
|
||||
In der Literaturrecherche werden aktuelle Quellen zur Nutzung von Flutter außerhalb
|
||||
des klassischen App-Entwicklungskontexts, insbesondere für die
|
||||
Entwicklung von GUIs für eingebettete Systeme, gesucht und ausgewertet.
|
||||
Die experimentelle Untersuchung umfasst die Implementierung einer
|
||||
realen eingebetteten Anwendung mit Flutter und die
|
||||
Bewertung der Leistung, des Ressourcenverbrauchs und der Entwicklungserfahrung.
|
||||
In der Anwendung werden die Embedder "Flutter-Pi" und "Flutter-Auto" dazu
|
||||
genauer untersucht, diese ermöglichen die Ausführung von Flutter im eingebetteten Linux-Kontext.
|
||||
Die Ergebnisse der Untersuchung werden abschließend zusammengefasst und bewertet.
|
||||
Basierend auf den Ergebnissen wird ein Leitfaden für
|
||||
die Entwicklung von GUIs für eingebettete Linux-Systeme mit Flutter erstellt.
|
||||
|
||||
## Struktur der Arbeit
|
||||
|
||||
Zu ergänzen wenn Arbeit fertig ist...
|
||||
|
||||
## Problematik
|
||||
|
||||
Zu ergänzen falls nötig...
|
||||
Die Arbeit ist in acht Kapitel unterteilt. Nach der Einleitung folgt
|
||||
eine Einführung in die Grundlagen von Flutter und eingebetteten Linux-Systemen.
|
||||
Danach wird die Literaturrecherche durchgeführt und die Ergebnisse
|
||||
werden festgehalten. Anschließend wird die experimentelle Untersuchung,
|
||||
im diesen Fall die Fallstudie mit der Flutter Anwendung im eingebetteten
|
||||
Linux-Kontext, genauer erläutert und es wird erklärt, wie das Projekt geplant
|
||||
wurde und die Entwicklungsumgebung aufgebaut ist. Danach wird die Implementierung der
|
||||
Flutter Anwendung beschrieben und dann wird die Erstellung der
|
||||
angepassten Linux Distribution mit Yocto für die Nutzung der entwickelten Flutter
|
||||
Anwendung im eingebetteten Linux Bereich erklärt. Abschließend werden die Ergebnisse
|
||||
der Arbeit festgehalten und es wird eine Schlussfolgerung gezogen.
|
||||
|
@ -17,8 +17,6 @@ What constitutes "most used" gets tricky. Is it by volume of devices
|
||||
regardless of scale, or by developer preferences in recent projects?
|
||||
-->
|
||||
|
||||
\pagebreak
|
||||
|
||||
# Grundlagen
|
||||
|
||||
## Eingebettete Systeme
|
||||
@ -59,13 +57,11 @@ Betriebssystem ausgestattet sind, als eingebettete Systeme bezeichnet.
|
||||
Dazu gehört das Linux Betriebssystem, welches in vielen eingebetteten
|
||||
Systemen zum Einsatz kommt und auch Windows ist laut Ganssle in
|
||||
eingebetteten Systemen anzutreffen. Als weiteres Beispiel dazu
|
||||
nennt er das Handy, welches als es nur zum telefonieren genutzt wurde
|
||||
nennt er das Handy, welches, als es nur zum telefonieren genutzt wurde,
|
||||
klar als eingebettetes System bezeichnet werden konnte, doch heutzutage
|
||||
ist es ein vollwertiger Computer, der auch als solcher
|
||||
für eine Vielzahl von anderen Funktionen genutzt werden kann.
|
||||
|
||||
\pagebreak
|
||||
|
||||
In weiterer Literatur zu eingebetteten Systemen finden sich
|
||||
die folgenden Definitionen:
|
||||
|
||||
@ -80,9 +76,9 @@ Systemen nicht eindeutig ist. Da es sowohl eine Funktion oder eine Reihe von
|
||||
Funktionen steuern kann, als auch speziell ein System ist, das in ein Produkt
|
||||
eingebettet ist.
|
||||
|
||||
Ein eingebettetes System ist also meistens ein Computersystem, das spezialisiert
|
||||
ist auf eine bestimmte Funktion oder Aufgabe. Mittlerweile heißt das jedoch auch,
|
||||
dass es sich oft um Systeme handelt, welche eigentlich vollwertige Computer sind und
|
||||
Ein eingebettetes System ist also meistens ein Computersystem, welches spezialisiert
|
||||
ist auf eine bestimmte Funktion oder Aufgabe. In der heutigen Zeit heißt das,
|
||||
dass es sich dabei oft um Systeme handelt, welche eigentlich vollwertige Computer sind und
|
||||
daher viele Funktionen ausführen könnten, doch der Hersteller oder Entwickler das
|
||||
System auf gezielte Funktionen beschränkt. So würde ein Bankautomat mit eingebetteten Linux
|
||||
nur auf die speziellen Aufgaben beschränkt werden, welche ein Bankautomat zu erfüllen hat, obwohl er
|
||||
@ -114,29 +110,27 @@ Blog-Beitrag, dass es wichtig wäre, GNU zu erwähnen, da es viele
|
||||
der Kernkomponenten des Betriebssystems zusammen mit dem Linux-Kernel
|
||||
bildet und dass die Bezeichnung GNU/Linux diesen wichtigen Beitrag
|
||||
anerkennt. Zudem würde es dabei helfen, die Idee des GNU-Projekts
|
||||
und der Free Software Foundation zu verbreiten. [@richardstallmanWhyGNULinux]
|
||||
und der Free Software Foundation zu verbreiten [@richardstallmanWhyGNULinux].
|
||||
|
||||
In der Arbeit wird die Bezeichnung "Linux" für das Betriebssystem
|
||||
verwendet, da es sich um die allgemein gebräuchliche Bezeichnung
|
||||
handelt und die Bezeichnung "GNU/Linux" in der Literatur und im
|
||||
allgemeinen Sprachgebrauch nicht so verbreitet ist. Besonders im
|
||||
allgemeinen Sprachgebrauch wenig verbreitet ist. Besonders im
|
||||
eingebetteten Bereich wird es allgemein als "Eingebettetes Linux"
|
||||
bezeichnet und nicht als "Eingebettetes GNU/Linux".
|
||||
bezeichnet und fast nie als "Eingebettetes GNU/Linux".
|
||||
|
||||
Linux gehört zu den weltweit am weitesten verbreiteten Betriebssystemen
|
||||
und zählt zur Gruppe von "unixoide" oder unix-ähnlichen Betriebssystemen,
|
||||
da es Konzepte des 1969 von Bell Laboratories entwickelten Betriebssystems
|
||||
Unix aufgreift.
|
||||
|
||||
Nutzer von Linux verwendet oft eine sogenannte "Distribution" von Linux
|
||||
Unix aufgreift. Nutzer von Linux verwendet oft eine sogenannte "Distribution" von Linux
|
||||
wie Ubuntu. Eine Linux-Distribution, auch als Distro bezeichnet, ist ein vollständiges
|
||||
Betriebssystem, das auf dem Linux-Kernel aufbaut. Der Kernel ist das
|
||||
Herzstück des Betriebssystems. Zusätzlich zum Kernel gibt es weitere
|
||||
wichtige Bestandteile einer Distro, wie Systembibliotheken, Dienstprogramme
|
||||
wichtige Bestandteile einer Distribution, wie Systembibliotheken, Dienstprogramme
|
||||
und Softwareanwendungen. Die Auswahl dieser wird vom Ersteller der Distro
|
||||
getroffen. Distros gibt es in vielen Varianten, jede mit ihren eigenen
|
||||
Zielen, Zielgruppen und Softwareauswahl. Das bedeutet, dass es für viele
|
||||
verschiedene Anwendungsfälle eine passende Distro gibt. [@dikkyryanpratamaWhatLinuxDistribution]
|
||||
Zielen, Zielgruppen und Softwareauswahl. Das bedeutet, dass für viele
|
||||
verschiedene Anwendungsfälle eine passende Linux Distro erstellt werden kann. [@dikkyryanpratamaWhatLinuxDistribution]
|
||||
|
||||
### Eingebettetes Linux
|
||||
|
||||
@ -163,10 +157,14 @@ Methoden, die vor allem auf den Prinzipien der quellbasierten
|
||||
Linux-Distribution Gentoo basieren. Eine quellbasierte Distribution
|
||||
ist eine Linux-Distribution, die aus den Quellcodes der Software
|
||||
zusammengestellt wird. Das bedeutet, dass die Software auf dem
|
||||
Zielgerät aus den Quellcodes kompiliert wird und nicht aus
|
||||
vorkompilierten Binärdateien installiert wird. Dies ermöglicht
|
||||
Zielgerät aus dem Quellcode kompiliert wird und nicht
|
||||
vorkompilierte Binärdateien installiert werden. Dies ermöglicht
|
||||
eine hohe Flexibilität und Anpassbarkeit der Distribution und
|
||||
Software. Yocto erweitert dieses Prinzip speziell auf eingebettete
|
||||
Systeme. Es ist keine fertige Distribution, sondern ein Framework,
|
||||
mit dem eigene Distributionen speziell für eingebettete Systeme erstellt werden können.
|
||||
[@linuxfoundationYoctoProject162024]
|
||||
mit dem eigene Distributionen speziell für eingebettete Systeme erstellt werden können
|
||||
[@linuxfoundationYoctoProject162024]. In der Arbeit wird das Yocto Projekt
|
||||
für die Erstellung einer speziellen Linux-Distribution für
|
||||
die Nutzung von Flutter auf eingebetteten Systemen verwendet.
|
||||
In Kapitel \ref{yoctoChapter} wird die Erstellung einer solchen
|
||||
Distribution mit dem Yocto Projekt beschrieben.
|
||||
|
@ -9,7 +9,7 @@ Flutter ist ein von Google entwickeltes
|
||||
quelloffenes Benutzerschnittstellen-Entwicklungs-Kit,
|
||||
welches die effiziente Entwicklung ansprechender
|
||||
Benutzeroberflächen für mobile, Web- und
|
||||
Desktop-Anwendungen ermöglichen soll. Es wurde
|
||||
Desktop-Anwendungen ermöglichen soll [@googleinc.FutterBuildAny]. Es wurde
|
||||
2017 von Google veröffentlicht und ist
|
||||
BSD-lizenziert [@3ClauseBSDLicense2011].
|
||||
|
||||
@ -17,10 +17,11 @@ Die zunehmende Verbreitung mobiler Geräte und Betriebssysteme
|
||||
stellt die effiziente Anwendungsentwicklung vor Herausforderungen.
|
||||
Plattformübergreifende Frameworks wie Flutter zielen darauf ab,
|
||||
diese Herausforderungen zu mildern, indem sie ein einheitliches
|
||||
Toolset zum Erstellen von Benutzeroberflächen (GUIs) bereitstellen,
|
||||
Toolset zum Erstellen von Benutzeroberflächen bereitstellen,
|
||||
die nahtlos über verschiedene Plattformen hinweg funktionieren.
|
||||
Dieses Kapitel befasst sich mit der grundlegenden Architektur
|
||||
von Flutter.
|
||||
von Flutter, welche die Konzepte erklärt wie Flutter auch im
|
||||
eingebetteten Bereich genutzt werden kann.
|
||||
|
||||
### Flutters Architektur
|
||||
|
||||
@ -32,8 +33,6 @@ und die Möglichkeit, Framework-Komponenten nach Bedarf zu ersetzen. [@FlutterAr
|
||||
|
||||
Die folgende Abbildung \ref{flutterArch} zeigt die Architektur von Flutter:
|
||||
|
||||
\pagebreak
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
@ -68,9 +67,20 @@ Die niedrigste Ebene ist der Embedder, dessen Aufgabe es ist,
|
||||
die Rendering-Fläche bereitzustellen, die Eingaben zu verarbeiten
|
||||
und Zugriff zu Dart Anwendungs-Snapshots zu ermöglichen. [@gardeFlutterRaspberryPi2018]
|
||||
Die Flutter Engine hat hierzu eine C API, welche in einer einzelnen
|
||||
C Header-Datei definiert ist. [@theflutterauthorsEngineShellPlatform] Diese API Punkte müssen von dem
|
||||
C Header-Datei definiert ist. [@theflutterauthorsEngineShellPlatform]
|
||||
Diese API Punkte müssen von dem
|
||||
Embedder angesprochen werden.
|
||||
|
||||
Der modulare Aufbau mit der Trennung der Embedder-Ebene erlaubt es, dass
|
||||
jeder Entwickler einen eigenen Embedder für spezielle Verwendungszwecke
|
||||
von Flutter entwickeln kann. Es müssen nur diese API Punkte angesprochen
|
||||
werden und die komplette Flutter Engine mit allen plattformunabhängigen
|
||||
Funktionen könnte sofort genutzt werden. Im Laufe der Arbeit werden die Embedder
|
||||
"Flutter-Pi" und "Flutter-Auto" vorgestellt, welche in dem Projekt der
|
||||
Fallstudie genutzt und weiter untersucht worden sind. Beides sind spezielle Embedder, welche
|
||||
außerhalb von Google und für die Nutzung von Flutter mit eingebetteten Linux
|
||||
Systemen entwickelt worden sind.
|
||||
|
||||
<!-- ```{#test .dart .number-lines caption="Example Dart test" captionpos=t}
|
||||
import 'package:retry/retry.dart';
|
||||
|
||||
@ -83,7 +93,7 @@ final response = await retry(
|
||||
print(response.body);
|
||||
``` -->
|
||||
|
||||
### Deklarative Programmierung in Flutter
|
||||
<!-- ### Deklarative Programmierung in Flutter
|
||||
|
||||
Deklarative Programmierung ist ein Programmierparadigma, bei dem
|
||||
der Programmierer den gewünschten Endzustand der Anwendung
|
||||
@ -123,5 +133,4 @@ TextWidget(text);
|
||||
Falls nun die Variable `text` sich ändert, wird das `TextWidget`
|
||||
automatisch neu gerendert und der neue Text wird angezeigt.
|
||||
Der Entwickler muss sich also nicht darum kümmern, dass das Widget
|
||||
neu gerendert wird, das ist deklarative Programmierung in Flutter.
|
||||
Das Framework übernimmt das für den Entwickler automatisch.
|
||||
neu gerendert wird, das Framework übernimmt das für den Entwickler automatisch. -->
|
||||
|
@ -1,53 +1,48 @@
|
||||
\linebreak
|
||||
|
||||
## Dart
|
||||
|
||||
Dart ist die offizielle Programmiersprache für die Entwicklung von
|
||||
Flutter Apps und wurde in dieser Arbeit für die Entwicklung der
|
||||
Demo Anwendung verwendet. Dart ist eine objektorientierte, klassenbasierte
|
||||
Programmiersprache mit Garbage Collection und C-ähnlicher Syntax hat.
|
||||
Programmiersprache mit Garbage Collection und C-ähnlicher Syntax.
|
||||
Die Sprache wurde von Lars Bak und Kasper Lund entworfen und
|
||||
bei Google entwickelt. 2011 wurde sie veröffentlicht [@larsbakDartLanguageStructured2011].
|
||||
|
||||
Damals wurde Dart speziell für die Entwicklung von Webanwendungen
|
||||
entwickelt. Es sollte besonders dabei helfen komplexe und hochleistungsfähige
|
||||
Webanwendungen zu entwickeln. Google sah es aber explizit nicht als
|
||||
Ersatz für JavaScript, sondern als Ergänzung. Im Buch "What is Dart?" von
|
||||
den Google Entwicklern Kathy Walrath und Seth Ladd betonten diese 2012,
|
||||
dass Google nicht erwarten würde, dass Dart JavaScript ersetze, sondern
|
||||
dass Dart und JavaScript nebeneinander existieren könnten und Dart auch von
|
||||
JavaScript profitieren kann, da Dart Code in JavaScript transpiliert
|
||||
werden kann [@walrathkathyWhatDart2012, 1-2]. Hingegen der Erwartungen von Google
|
||||
wurde Dart jedoch nicht so populär wie erwartet. Google nutzte Dart
|
||||
zwar intern für einige Projekte, doch die Programmiersprache blieb
|
||||
weitesgehend unbekannt und wurde nur von wenigen Entwicklern genutzt.
|
||||
Genaue Gründe sind hierfür nicht bekannt, doch ein Grund könnte sein,
|
||||
entwickelt. Google sah es als eine Problemlösung
|
||||
für die Entwicklung von komplexen Webanwendungen, da JavaScript
|
||||
nicht die Leistung und Struktur bieten konnte, die Google für die
|
||||
Entwicklung von hochleistungsfähigen Webanwendungen erwartete. Es
|
||||
sollte als Ergänzung zu JavaScript für diese Anwendungsfälle genutzt werden [@walrathkathyWhatDart2012, 1-2].
|
||||
Hingegen der Erwartungen von Google
|
||||
wurde Dart jedoch nicht so populär wie erwartet und die Programmiersprache blieb
|
||||
weitestgehend unbekannt. Genaue Gründe sind hierfür nicht bekannt, doch ein Grund könnte sein,
|
||||
dass die JavaScript Community zu diesem Zeitpunkt
|
||||
schon sehr groß war und viele Entwickler nicht bereit waren, auf eine
|
||||
komplett neue Programmiersprache umzusteigen. Zudem wurde 2012 TypeScript von
|
||||
Microsoft veröffentlicht, welches ähnliche Probleme wie Dart löst, jedoch
|
||||
besser in die bestehende JavaScript-Community integriert werden konnte, da es JavaScript
|
||||
als Sprache erweitert und Entwickler so nicht eine komplett neue
|
||||
Sprache lernen mussten.
|
||||
komplett neue Programmiersprache umzusteigen.
|
||||
|
||||
Erst durch die Einführung von Flutter wurde Dart populärer, da es die
|
||||
offizielle Programmiersprache für die Entwicklung von Flutter Apps ist.
|
||||
Flutter wurde intern bei Google anfangs mit JavaScript entwickelt, doch
|
||||
dies führte zu Problemen, da JavaScript nicht die Performance und
|
||||
Stabilität bieten konnte, die Google für die Entwicklung von mobilen
|
||||
Apps erwartete. Daher wurde JavaScript durch Dart ersetzt und das
|
||||
Flutter und Dart Team haben eng zusammengearbeitet, um Dart so zu
|
||||
verbessern, dass es die Anforderungen von Flutter am besten erfüllt.
|
||||
offizielle Programmiersprache für die Entwicklung von Flutter Apps wurde.
|
||||
|
||||
Heute ist die neueste Version von Dart die Version 3.3.1. Dart ist
|
||||
eine der wenigen Programmiersprachen, die seit ihrer Veröffentlichung
|
||||
eine der Programmiersprachen, die seit ihrer Veröffentlichung
|
||||
sehr starke Veränderungen durchgemacht hat. So wurde zu der JIT (Just
|
||||
in Time) Kompilierung, die Dart ursprünglich verwendete, eine AOT (Ahead of
|
||||
Time) Kompilierung hinzugefügt, die es ermöglicht, Dart Code in nativen Code
|
||||
zu kompilieren. Dies war notwendig, um die Performance von Dart zu
|
||||
Time) Kompilierung hinzugefügt, die es ermöglicht, Dart in nativen Code
|
||||
zu kompilieren [@googleinc.FAQ]. Dies war notwendig, um die Leistung von Dart zu
|
||||
verbessern und um Dart für die Entwicklung von mobilen Apps zu
|
||||
optimieren, zusätzlich auch weil Apple keine JIT Kompilierung auf iOS
|
||||
Geräten erlaubt. Mit Version 3 wurde eine komplette Sound Null Safety
|
||||
optimieren. Mit Version 3 wurde eine komplette Sound Null Safety
|
||||
zu Dart hinzugefügt. Sound Null Safety bedeutet, dass der komplette
|
||||
Code und auch Code aus allen Bibliotheken vollständig null-sicher sein muss.
|
||||
Mit Version 3 ist dies auch eine Voraussetzung in Dart, nicht null-sicherer
|
||||
Code kann nicht mehr kompiliert werden [@googleinc.UnsoundNullSafety].
|
||||
Mit Version 3 ist dies eine Voraussetzung in Dart, nicht null-sicherer
|
||||
Code kann nicht mehr kompiliert werden [@googleinc.UnsoundNullSafety]
|
||||
und es wird einfacher Bugs zu verhindern, die durch Nullpointer
|
||||
Exceptions entstehen können.
|
||||
|
||||
Mit Projekten wie Serverpod [@ServerpodFlutterBackend] und Dart Frog [@DartFrog]
|
||||
macht Dart auch ein Comeback im Backend-Bereich. Hiermit wird es möglich, sowohl
|
||||
die Benutzeroberfläche mit Flutter und Dart zu programmieren und auch
|
||||
nötigen Servercode dazu mit Dart zu schreiben. Dies ermöglicht es, dass Entwickler
|
||||
effizienter in nur einer Programmiersprache entwickeln können um Projekte
|
||||
schneller umzusetzen.
|
||||
|
||||
# Stand der Technik
|
||||
|
180
chapters/04_stand_der_technik/01_related_work.md
Normal file
@ -0,0 +1,180 @@
|
||||
In diesem Kapitel wird der Stand der Technik in Bezug auf die
|
||||
Themenbereiche der Arbeit erläutert.
|
||||
|
||||
## Verwandte Arbeiten
|
||||
|
||||
Alex Rosca hat in seiner Masterarbeit (2024) die Integration von Wayland mit Flutter untersucht.
|
||||
Dazu hat er einen Wayland-Compositor entwickelt, welcher Flutter zum rendern der UI-Elemente
|
||||
und third-party Fenstern verwendet. Das besondere an dieser Arbeit ist, dass jede Anwendung
|
||||
ein Widget ist, welches Teil von Flutter ist. Dies ermöglicht es, dass third-party Anwendungen
|
||||
innerhalb von Flutter angezeigt werden können und in dem Desktop-System dadurch nicht nur
|
||||
Flutter Anwendungen gestartet werden können. Der entwickelte Compositor ist dabei speziell
|
||||
für ein Smartphone- oder Tablet-Interface entwickelt worden bei dem immer nur ein Fenster zur selben Zeit im Vordergrund
|
||||
angezeigt wird. Die Arbeit zeigt, dass es möglich ist, Flutter so tief in ein Wayland-System zu integrieren
|
||||
und damit ein vollständiges Desktop-System für Linux Smartphones und Tablets zu entwickeln [@roscaMasterThesisIntegrating2024].
|
||||
|
||||
Stefan Zindl hat in seiner Bachelorarbeit (2021) die Nutzung von Flutter für Windows Desktop Anwendungen untersucht.
|
||||
Er hat dazu eine Gallerie Anwendung jeweils in Flutter und WPF (Windows Presentation Foundation) mit .NET 5
|
||||
geschrieben und die Leistung und den Ressourcenverbrauch der beiden Anwendungen verglichen.
|
||||
Dabei kam er zu dem Ergebnis, dass die Flutter Anwendung mit 55\% weniger Code geschrieben werden konnte und
|
||||
die Anwendung 70 mal schneller starten konnte. Flutter hat dabei die meiste Zeit einen geringeren
|
||||
RAM Verbrauch gehabt, jedoch ist die CPU Auslastung im Vergleich zu WPF höher gewesen. Er merkt
|
||||
jedoch an, dass zum Zeitpunkt seiner Arbeit die Windows Unterstützung von Flutter noch in einem Beta Status war [@zindlFlutterWindowsDesktop2021].
|
||||
|
||||
<!-- Ferdi Armagan stellte in seiner Bachelorarbeit (2020) einen Vergleich zwischen Flutter und React Native an.
|
||||
In der Arbeit sollte generell die Frage beantwortet werden wie tauglich Cross-Platform-Frameworks
|
||||
für die Entwicklung von mobilen Anwendungen sind. -->
|
||||
|
||||
Wasilewski und Zabierowski führten eine Studie durch, in der sie Java, Flutter und
|
||||
Kotlin/Native Technologien für sensordatengesteuerte Anwendungen miteinander verglichen.
|
||||
Sie kamen zu dem Ergebnis, dass überall dort, wo es nicht darum ging Ressourcen zu sparen
|
||||
und die Ausführungszeit im Vordergrund steht, Flutter die natürliche Wahl ist. In einigen
|
||||
Tests hat sich Flutter auch hinsichtlich der CPU-Auslastung besser erwiesen, doch
|
||||
besonders in Anwendungen, welche stark von Datenbankoperationen abhängen, ist laut den Autoren Flutter
|
||||
nicht die beste Wahl. Als interessantes Ergebnis ist hier zu erwähnen, dass die Studie
|
||||
zeigt wie Flutter mit der Dart Programmiersprache in vielen Fällen gut mit dem sehr
|
||||
bekannten Java leistungstechnisch mithalten kann [@wasilewskiComparisonJavaFlutter2021].
|
||||
|
||||
## Nutzung von Flutter für eingebettetes Linux in der Industrie
|
||||
|
||||
### Toyota
|
||||
|
||||
Im Jahr 2021 wurde veröffentlicht, dass der japanische Autohersteller Toyota in
|
||||
Zukunft Flutter für die Entwicklung
|
||||
von Infotainmentsystemen in ihren Fahrzeugen nutzen wird. Daniel Hall, der Chief
|
||||
Engineer von Toyota Motor Nordamerika, begründete die Entscheidung damit, dass
|
||||
Flutter es Toyota ermöglicht, eine Benutzererfahrung zu schaffen, die sich anfühlt,
|
||||
wie Kunden es von ihren Smartphones gewohnt sind und erwarten. Obwohl Toyota keine
|
||||
Apps auf mehreren Plattformen veröffentlichen will, schätzt man die Vorteile wie
|
||||
die schnellere Entwicklung durch den Hot-Reload durch den man die Iterationszyklen
|
||||
verkürzen und sich schneller und öfter Feedback von Kunden einholen kann. Darüber
|
||||
hinaus bietet die Flutter Rendering Engine laut Toyota eine gute Leistung in
|
||||
Umgebungen mit begrenzten Ressourcen und Funktionen wie die AOT-Kompilierung
|
||||
gewährleisten zudem die Konsistenz, die Toyota in fahrzeug-internen
|
||||
Technologien anstrebt [@googleplayapps&gamesteamSeamlessMultiplatformApp2021].
|
||||
|
||||
Auf der CES 2024 konnte das von Toyota entwickelte System am Messestand von
|
||||
Automotive Grade Linux (AGL) begutachtet werden. Von einer Berichterstattung
|
||||
von Stephanie Van Ness ist zu entnehmen, dass für die Messe eine Demo App
|
||||
für einen 8GB Raspberry Pi und einem 7 Zoll Touchscreen im Portrait-Modus
|
||||
entwickelt wurde (siehe Abbildung \ref{toyota1}). Als Embedder wird standardmäßig Flutter-Auto
|
||||
genutzt, welcher von Toyota entwickelt wurde. Als alternative Option gibt es einen Embedder von Sony.
|
||||
Es wird auch erwähnt, dass die Demo App Riverpod als State
|
||||
Management Lösung nutzt [@stephanievannessRacingCESExciting2024].
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\caption{AGL Demo App von der CES 2024}
|
||||
\label{toyota1}
|
||||
\includegraphics[width=8cm]{./assets/toyota/agl.png}
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{
|
||||
```
|
||||
|
||||
Quelle: @stephanievannessRacingCESExciting2024
|
||||
|
||||
```{=latex}
|
||||
}
|
||||
\end{figure}
|
||||
```
|
||||
|
||||
#### Flutter-Auto
|
||||
|
||||
Flutter-Auto ist ein Wayland Embedder für Flutter, welcher von Toyota entwickelt wird.
|
||||
Der Embedder kann nur innerhalb einer Wayland Umgebung genutzt werden und hingegen
|
||||
des Namens kann er auch für andere eingebettete Systeme jeglicher Art genutzt werden.
|
||||
Besondere Merkmale des Embedders sind die Unterstützung von mehreren Bildschirmen, Integration Tests
|
||||
und Accessibility Features.
|
||||
Auf GitHub wird das Projekt noch "ivi-homescreen" genannt
|
||||
und es ist unter der Apache 2.0 Lizenz veröffentlicht worden
|
||||
[@ToyotaconnectedIvihomescreen2024].
|
||||
|
||||
### Sony
|
||||
|
||||
Neben Toyota arbeitet auch Sony als ein weiteres großes und bekanntes japanisches
|
||||
Unternehmen an einer Lösung für die Nutzung von Flutter in eingebetteten Systemen.
|
||||
Der Embedder von Sony basiert auf Flutter-Tizen, ein Projekt von Samsung,
|
||||
welches es ermöglicht Flutter Anwendungen für Tizen OS zu entwickeln [@FluttertizenFluttertizen2024].
|
||||
Tizen OS ist ein Linux basiertes Betriebssystem welches Samsung für verschiedene
|
||||
eingebettete Systeme und Smart-TVs nutzt.
|
||||
|
||||
Hidenori Matsubayashi, der Hauptentwickler des Sony Embedders, hat auf der
|
||||
Embedded Linux Conference Europe 2020 eine Präsentation gehalten, in der er
|
||||
erklärt, weshalb Sony in seinem Research und Development Bereich die Nutzung
|
||||
von Flutter für eingebettete Systeme erforscht. Er erwähnt, dass meistens
|
||||
Qt oder web basierte Technologien für die Entwicklung von eingebetteten
|
||||
Systemen genutzt werden (siehe Abbildung \ref{sony1}). Web basierte Technologien in
|
||||
diesem Kontext bedeuten: HTML und JavaScript in einer Webview wie die des
|
||||
Chromium Browsers. Matsubayashi erklärt, dass Webviews zwar einfach zu
|
||||
entwickeln sind, jedoch nicht die beste Leistung bieten und es oft erschwert
|
||||
ist Hardware direkt anzusprechen. Zu Qt erwähnt er nur die hohe Popularität
|
||||
und die duale Lizenzierung.
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\caption{Präsentations-Slide zu Beispielen für grafische Oberflächen von Sony}
|
||||
\label{sony1}
|
||||
\includegraphics[width=15cm]{./assets/pdf/sony1.pdf}
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{
|
||||
```
|
||||
|
||||
Quelle: @matsubayashiGraphicalUserInterface2020
|
||||
|
||||
```{=latex}
|
||||
}
|
||||
\end{figure}
|
||||
```
|
||||
|
||||
Als Hauptgründe für die Nutzung von Flutter in eingebetteten Systemen nennt
|
||||
Matsubayashi die einfache Entwicklung, die Cross-Plattform Unterstützung,
|
||||
die native Kompilierung mit guter Leistung und die Popularität von Flutter
|
||||
als Open Source Software. Außerdem erwähnt er, dass Flutter wenige
|
||||
Abhängigkeiten hat und nur OpenGL/EGL benötigt, es ein Custom Embedder API-Layer gibt
|
||||
welches es ermöglicht, Flutter auf spezifischen Plattformen auszuführen und
|
||||
dass Flutter unter der freizügigen BSD-Lizenz lizenziert ist (siehe Abbildung \ref{sony2}).
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[h]
|
||||
\caption{Präsentations-Slide von Sony zu den Gründen für die Nutzung von Flutter in eingebetteten Systemen}
|
||||
\label{sony2}
|
||||
\begin{center}
|
||||
\includegraphics[width=15cm]{./assets/pdf/sony2.pdf}
|
||||
\end{center}
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{
|
||||
```
|
||||
|
||||
Quelle: @matsubayashiGraphicalUserInterface2020
|
||||
|
||||
```{=latex}
|
||||
}
|
||||
\end{figure}
|
||||
```
|
||||
|
||||
<!-- \begin{figure}[h]
|
||||
\caption{This is a figure.}
|
||||
\begin{center}
|
||||
\includegraphics[width=15cm]{./assets/pdf/sony3.pdf}
|
||||
\end{center}
|
||||
\end{figure} -->
|
||||
|
||||
### Flutter-Pi
|
||||
|
||||
Flutter-Pi ist ein Projekt welches in einer Zusammenarbeit von Texas Instruments
|
||||
und KDAB enstanden ist [@krunalbhargavFAQAM625Flutter2023]. Der Hauptentwickler,
|
||||
Hannes Winkler, hat das Projekt auf GitHub unter der MIT Lizenz veröffentlicht [@winklerArderaFlutterpi2024].
|
||||
Die besondere Eigenschaft von Flutter-Pi ist, dass es ohne Wayland oder X11
|
||||
funktioniert und somit auch auf Systemen ohne Display Server genutzt werden kann.
|
||||
Es nutzt dafür den DRM (Direct Rendering Manager) und KMS (Kernel Mode Setting).
|
||||
Flutter-Pi kommt auch mit einem eigenen Build Tool _flutterpi_tool_ und der Entwickler
|
||||
hat ein spezielles _flutterpi_gstreamer_video_player_ Plugin entwickelt, welches
|
||||
es ermöglicht, Videos mit GStreamer in der Flutter Anwendung abzuspielen. Gstreamer
|
||||
ist ein Open Source Multimedia Framework mit dem hardwarebeschleunigt Videos
|
||||
dekodiert und gerendert werden können [@GStreamerOpenSource].
|
||||
|
||||
\pagebreak
|
32
chapters/04_stand_der_technik/02_beitrag.md
Normal file
@ -0,0 +1,32 @@
|
||||
## Beitrag
|
||||
|
||||
Da Flutter noch eine recht neue Technologie ist, gibt es
|
||||
noch viele Bereiche die dazu genauer erforscht werden können.
|
||||
Die verwandten Arbeiten und Projekte von Toyota,
|
||||
Sony und KDAB zeigen, dass es bereits viel Interesse
|
||||
zur Nutzung von Flutter außerhalb des klassischen
|
||||
App-Entwicklungs-Bereichs gibt. Die Zuversichtlichkeit
|
||||
von Toyota Flutter in den Infotainmentsystemen von Autos zu nutzen,
|
||||
stellt besonders die Frage auf, wie gut Flutter tatsächlich
|
||||
für eingebettete Linux Systeme geeignet ist. Diese
|
||||
Arbeit beschäftigt sich deswegen damit als Fallstudie
|
||||
eine Demo Anwendung für den Raspberry Pi 4 zu entwickeln und
|
||||
den kompletten Entwicklungsprozess dabei durchzugehen.
|
||||
Die Demo Anwendung wurde
|
||||
als Kochbuch konzipiert, welches als Grundlage für
|
||||
weitere Projekte mit Flutter auf eingebetteten Linux
|
||||
Systemen dienen kann. In der Arbeit konnte gezeigt
|
||||
werden, dass Flutter durchaus gut für eingebettete
|
||||
Linux Systeme geeignet ist. Dank der modernen Entwicklungsprinzipien
|
||||
von Flutter, ist es möglich, in relativ kurzer Zeit selbst komplexe
|
||||
Anwendungen mit Flutter für eingebettete Linux Systeme
|
||||
zu entwickeln.
|
||||
|
||||
Es wurden die Embedder "Flutter-Pi" und "Flutter-Auto" genauer
|
||||
untersucht. Das Projekt von Sony wurde nicht betrachtet, weil
|
||||
Sony für seinen Embedder eine veränderte Version der Flutter-Engine benutzt
|
||||
und somit nicht mit der offiziellen Flutter-Engine kompatibel ist [@SonyFlutterembeddedlinuxEmbedded].
|
||||
Es ist also deutlich weniger produktionsbereit und auch aus Gründen der
|
||||
Zeitoptimierung wurden nur die anderen beiden Embedder betrachtet.
|
||||
|
||||
# Fallstudie
|
@ -0,0 +1,3 @@
|
||||
<!-- ## Vollständigkeit der Linux Unterstützung von Flutter
|
||||
|
||||
### Flutter Embedder für eingebettetes Linux -->
|
@ -1,51 +0,0 @@
|
||||
\pagebreak
|
||||
|
||||
# Stand der Technik
|
||||
|
||||
In diesem Kapitel wird der Stand der Technik in Bezug auf die
|
||||
Themenbereiche der Arbeit erläutert.
|
||||
Dabei wird auf die Themenbereiche der
|
||||
Arbeit eingegangen und die aktuelle Situation
|
||||
in der Forschung und Entwicklung dargestellt.
|
||||
|
||||
## Toyota
|
||||
|
||||
- CES 2024 Automotive Linux mit Flutter [@stephanievannessRacingCESExciting2024]
|
||||
|
||||
## Sony
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\caption{Sony}
|
||||
\includegraphics[width=15cm]{./assets/pdf/sony1.pdf}
|
||||
\label{sony1}
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{
|
||||
```
|
||||
|
||||
Quelle: @matsubayashiGraphicalUserInterface2020
|
||||
|
||||
```{=latex}
|
||||
}
|
||||
\end{figure}
|
||||
```
|
||||
|
||||
\begin{figure}[h]
|
||||
\caption{This is a figure.}
|
||||
\begin{center}
|
||||
\includegraphics[width=15cm]{./assets/pdf/sony2.pdf}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
<!-- \begin{figure}[h]
|
||||
\caption{This is a figure.}
|
||||
\begin{center}
|
||||
\includegraphics[width=15cm]{./assets/pdf/sony3.pdf}
|
||||
\end{center}
|
||||
\end{figure} -->
|
||||
|
||||
## Texas Instruments
|
||||
|
||||
\pagebreak
|
@ -1,35 +0,0 @@
|
||||
\pagebreak
|
||||
|
||||
# Analyse und Design
|
||||
|
||||
## Hardware
|
||||
|
||||
### Hardware für die Demo Anwendung
|
||||
|
||||
- Raspberry Pi 4
|
||||
- Touchscreen 15 Zoll (1920x1080)
|
||||
- Raspberry Pi 0 2W
|
||||
- Touchscreen 7 Zoll (1024x600)
|
||||
- RGB Matrix
|
||||
- Led
|
||||
|
||||
### Build Hardware
|
||||
|
||||
- AMD 6800U mit 16GB RAM, Linux
|
||||
|
||||
\pagebreak
|
||||
|
||||
## Anforderungen
|
||||
|
||||
\Begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Skizzen der Anwendung}
|
||||
\centering
|
||||
{\includegraphics[width=4in]{./assets/skizzen/alle.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
lorem ipsum
|
||||
|
||||
\End{multicols}
|
@ -1,124 +0,0 @@
|
||||
\pagebreak
|
||||
|
||||
## Architektur
|
||||
|
||||
### Analyse
|
||||
|
||||
### Design
|
||||
|
||||
<!-- Flutter Entwicklung folgt einer unidirektionalen
|
||||
Datenflussarchitektur, die auf dem Modell-View-Controller
|
||||
(MVC)-Muster basiert. -->
|
||||
|
||||
Flutter gibt Entwicklern eine große Freiheit bei der
|
||||
Auswahl der Architektur für ihre Anwendungen. Es gibt
|
||||
keine festen Regeln oder Vorschriften zur Ordnerstruktur
|
||||
oder anderen Konventionen bezüglich der Architektur.
|
||||
|
||||
Als Architektur für die Anwendung
|
||||
wurde eine drei-schichtige Architektur gewählt.
|
||||
Eine Schichtenarchitektur ist nicht nur Teil der
|
||||
Architektur von Flutter selbst, sondern ist auch
|
||||
eine bewährte Architektur für die Entwicklung von
|
||||
Flutter Anwendungen. Die drei Haupt-Schichten
|
||||
der Architektur der Anwendung sind die Präsentationsschicht,
|
||||
die Geschäftsschicht und die Datenzugriffsschicht.
|
||||
In der Präsentationsschicht werden die Benutzeroberfläche
|
||||
und die Benutzerinteraktionen implementiert. Die Geschäftsschicht
|
||||
ist für die Implementierung der Geschäftslogik verantwortlich.
|
||||
Die Datenzugriffsschicht ist für den Zugriff auf die Datenbank
|
||||
und die Datenverarbeitung verantwortlich. Die drei Schichten
|
||||
|
||||
Die drei Schichten sind die **Präsentationsschicht**,
|
||||
die **Geschäftslogikschicht** und die **Datenzugriffsschicht**.
|
||||
Die Präsentationsschicht ist für die Darstellung der
|
||||
Benutzeroberfläche verantwortlich. Die Anwendungsschicht ist für die Geschäftslogik verantwortlich. Die Datenzugriffsschicht ist für den Zugriff auf die Datenbank verantwortlich. Die drei Schichten sind voneinander unabhängig und kommunizieren über definierte Schnittstellen. Die drei Schichten sind in der Abbildung 3.1 dargestellt.
|
||||
|
||||
- three-layer architecture [@hajianFlutterEngineering2024, 219]
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\caption{3-Schichtenarchitektur der Flutter Anwendung}
|
||||
\end{figure}
|
||||
|
||||
```{=latex}
|
||||
\begin{center}
|
||||
```
|
||||
|
||||
```{.mermaid loc=assets/mermaid caption="3-Schichtenarchitektur der Flutter Anwendung" #fig:reference-name}
|
||||
flowchart TD
|
||||
A[Präsentationsschicht] <--> B
|
||||
B[Geschäftslogikschicht] <--> C
|
||||
C[Datenzugriffsschicht]
|
||||
```
|
||||
|
||||
```{=latex}
|
||||
\end{center}
|
||||
```
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{Quelle: eigene Darstellung}
|
||||
\end{figure}
|
||||
|
||||
## Ordner Konventionen
|
||||
|
||||
### Layers-First Ordnerstruktur
|
||||
|
||||
- schneller und einfacher Start
|
||||
- einfach zu verstehen
|
||||
- sehr unübersichtlich, sobald die Anwendung wächst
|
||||
- zusammengehörende Dateien für ein Feature über das Projekt verteilt
|
||||
|
||||
### Feature-First Ordnerstruktur
|
||||
|
||||
- Dateien, die zu einem Feature gehören, sind an einem
|
||||
Ort zu finden
|
||||
- Layers in Feature
|
||||
- Einfache Kommunikation
|
||||
- Verständnis, was ein Feature ist, muss im Team trainiert werden
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 lib/.
|
||||
.2 common.
|
||||
.2 constants.
|
||||
.2 features.
|
||||
.3 benchmark.
|
||||
.3 home.
|
||||
.3 settings.
|
||||
.3 system\char`\_resources.
|
||||
.2 app.dart.
|
||||
.2 main.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\caption{Example caption}
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{Quelle: hier Quellangabe}
|
||||
\end{figure}
|
||||
|
||||
eine Klasse pro File, Ausnahmen eng zusammengehörige Klassen
|
||||
wie zB. Stateful Widgets
|
||||
|
||||
state Architektur
|
||||
|
||||
android architecture
|
||||
|
||||
### freezed package
|
||||
|
||||
generiert den notwendigen Code einer
|
||||
unveränderlichen Klasse:
|
||||
|
||||
- Konstruktor
|
||||
- toString, equlas, hashCode Methode
|
||||
- copyWith Methode
|
||||
- JSON Serialisierung
|
||||
|
||||
### State Management
|
||||
|
||||
Für das State Management wurde Riverpod gewählt.
|
63
chapters/05_fallstudie/00_planung.md
Normal file
@ -0,0 +1,63 @@
|
||||
In diesem Kapitel wird die Fallstudie vorgestellt, welche
|
||||
in dieser Bachelorarbeit umgesetzt wurde.
|
||||
|
||||
## Anforderungen
|
||||
|
||||
Um die Nutzbarkeit von Flutter für die Entwicklung von
|
||||
Anwendungen für eingebettete Linux Systeme zu testen,
|
||||
sollte eine Demo Anwendung entwickelt werden, welche
|
||||
möglichst alle wichtigen Aspekte solcher Anwendungen
|
||||
abdeckt. Zur Planung wurden kurz vor der Einreichung
|
||||
der Arbeit einfache Skizzen der Anwendung
|
||||
entwickelt, welche in Abbildung \ref{fig:skizzen} zu sehen sind,
|
||||
jede Skizze stellt eine Seite der Anwendung dar. Die
|
||||
Seiten sind nummeriert und werden im folgenden genauer
|
||||
erläutert.
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Skizzen der Anwendung}
|
||||
\label{fig:skizzen}
|
||||
\centering
|
||||
\includegraphics[width=5in]{./assets/skizzen/alle.pdf}
|
||||
\end{figure}
|
||||
|
||||
Die Startseite der Anwendung (1) ist freigelassen und soll nur
|
||||
ein Platzhalter sein von welchem aus die verschiedenen
|
||||
Funktionalitäten der Anwendung mithilfe eines Menüs
|
||||
erreicht werden können. In der Skizze wird dieses Menü durch
|
||||
den Hamburger Button oben links in den Fenstern dargestellt,
|
||||
dieser soll beim Klicken ein Auswahlmenü für die anderen Fenster öffnen.
|
||||
|
||||
Die folgende Tabelle \ref{skizzenTabelle} erläutert die Funktionen, die in den
|
||||
anderen Fenstern der Anwendung getestet werden sollen:
|
||||
|
||||
\begin{table}[H]
|
||||
\caption{Funktionen der Skizzen}
|
||||
\label{skizzenTabelle}
|
||||
\resizebox{\textwidth}{!}{%
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
Fenster mit Nummerierung & Funktionen, die hier getestet werden sollen \\ \hline
|
||||
Material 3 Widgets (2) & \begin{tabular}[c]{@{}l@{}}Anzeige von einer Auswahl von verschiedenen Material Widgets\\ zur Demonstration\end{tabular} \\ \hline
|
||||
Open API Tagesschau (3) & \begin{tabular}[c]{@{}l@{}}Anzeige einer endlos scrollbaren Liste, welche Nachrichten von\\ der öffentlich zugänglichen Tagesschau API anzeigt.\end{tabular} \\ \hline
|
||||
Video-Playback (4) & Test des Video-Playbacks. \\ \hline
|
||||
Morse Code (5) & \begin{tabular}[c]{@{}l@{}}In einer Texteingabe soll ein Text geschrieben werden können, \\ welcher dann auf einer am Raspberry Pi angeschlossen Led\\ als Morsecode abgespielt werden soll. Die Ansteuerung der Led\\ \\ Dient als Demo für GPIO Geräte, in diesem Fall ein Output.\\ Zusätzlich soll auch eine Möglichkeit zur Eingabe des Textes\\ implementiert werden, da Flutter im eingebetteten Linux Bereich\\ nicht automatisch eine Tastatur bereitstellt.\end{tabular} \\ \hline
|
||||
Pixel Matrix (6) & \begin{tabular}[c]{@{}l@{}}Auf einer 8x8 Pixel Matrix soll mit einer Farbauswahl durch\\ den Touch Input gemalt werden können. Das gemalte Bild soll\\ gleichzeitig auf eine RGB Matrix live übertragen werden,\\ welche über den SPI (Serial Peripheral Interface) angesprochen\\ wird.\end{tabular} \\ \hline
|
||||
System Informationen (7) & \begin{tabular}[c]{@{}l@{}}Zwei Graphen sollen jeweils die CPU-Auslast und den\\ RAM-Verbrauch des Raspberry Pis anzeigen. Die Auslesung\\ dieser Daten soll über Linux Terminal Befehle geschehen \\ und dies demonstrieren.\end{tabular} \\ \hline
|
||||
Einstellungen (8) & \begin{tabular}[c]{@{}l@{}}In den Einstellungen soll ein Nachtmodus aktiviert und\\ deaktiviert werden können, welcher das Design der kompletten\\ Anwendung live entsprechend verändert. Es soll auch das\\ WLAN des Raspberry Pis angesteuert werden können. Man soll\\ den Netzwerk Manager von Linux ansprechen und eine neue\\ Verbindung einrichten können.\end{tabular} \\ \hline
|
||||
OpenStreetMap (9) & \begin{tabular}[c]{@{}l@{}}Eine Weltkarte soll live als Raster-Karte geladen werden als\\ interaktiven Leistungstest mit Multi-Touch-Gesten. Man soll rein- und\\ rauszoomen können.\end{tabular} \\ \hline
|
||||
Videospiel (10) & \begin{tabular}[c]{@{}l@{}}Als Leistungstest soll ein Open Source Demo Spiel angezeigt \\ werden welches in Flutter implementiert wurde und die\\ Leistung der Render Engine von Flutter auf dem Gerät austestet. \\ Dieses soll nicht selber implementiert werden, \\ sondern es soll eines der Beispiele von Google genutzt werden.\end{tabular} \\ \hline
|
||||
\end{tabular}%
|
||||
}
|
||||
\end{table}
|
||||
|
||||
In der Implementierung der Anwendung wurden manche Inhalte
|
||||
der Seiten leicht abgeändert. Die größte Änderung ist die Untertrennung
|
||||
mehrerer Seiten auf eine "Benchmark" Seite in der sowohl das Videospiel,
|
||||
die OpenStreetMap und auch der Video-Player getestet werden können. Zusätzlich
|
||||
wurde ein VSync Test und ein weiterer Spiel-Benchmark hinzugefügt. Die
|
||||
fertige Anwendung ähnelt dem Plan jedoch noch stark und alle fertigen
|
||||
Seiten mit ihren implementierten Funktionen werden im Kapitel \ref{features}
|
||||
genauer erläutert.
|
||||
|
||||
## Verwendete Komponenten
|
177
chapters/05_fallstudie/01_hardware.md
Normal file
@ -0,0 +1,177 @@
|
||||
### Raspberry Pi 4
|
||||
|
||||
Für das Projekt wurde ein Raspberry Pi 4 verwendet,
|
||||
ein Einplatinencomputer, der von der Raspberry Pi Foundation
|
||||
in Zusammenarbeit mit Broadcom entwickelt wurde.
|
||||
Der Raspberry Pi wurde für das Projekt ausgewählt, da
|
||||
der er weltweit der bekannteste Einplatinencomputer
|
||||
ist und eine große Community hat. Die Leistungsmerkmale aller
|
||||
verschiedenen Modelle des Raspberry Pi sind daher
|
||||
online gut dokumentiert und Leser dieser Arbeit
|
||||
können leicht daran ausmachen, welche alternativen
|
||||
Einplatinencomputer mit ähnlichen Leistungsmerkmalen
|
||||
verwendet werden können für ein ähnliches Ergebnis oder
|
||||
welche Einplatinencomputer schneller oder langsamer
|
||||
sind.
|
||||
|
||||
Der Pi 4 wurde anstelle des neueren Pi 5 verwendet,
|
||||
weil der Pi 5 zum Zeitpunkt der Arbeit noch zu neu ist und
|
||||
es daher nicht viele Vergleichswerte gibt. In Abbildung
|
||||
\ref{raspberry1} ist ein Überblick über die für das Projekt
|
||||
relevante Hardware des Raspberry Pi 4 zu sehen. Dazu gehören
|
||||
der System-on-a-Chip (SoC) und der Arbeitsspeicher für
|
||||
die Leistungsmerkmale für den Leistungstest mit Flutter
|
||||
und die Multimediafähigkeiten für den Test zum Abspielen
|
||||
von Videos.
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Überblick über die Hardware des Raspberry Pi 4}
|
||||
\label{raspberry1}
|
||||
\begin{center}
|
||||
\begin{tcolorbox}[width=15cm]
|
||||
|
||||
\begin{tabular}{lll}
|
||||
System-on-a-Chip (Ein-Chip-System) & Broadcom BCM2711, \\
|
||||
& 4-Kern Cortex-A72 (ARM v8) 64-bit SoC \\
|
||||
& @ 1.8GHz \\
|
||||
Arbeitsspeicher & 4 GB LPDDR4-3200 SDRAM \\
|
||||
Multimedia & H.265 (4kp60 decode), \\
|
||||
& H.264 (1080p60 decode, 1080p30 encode) \\
|
||||
& OpenGL ES 3.1, Vulkan 1.0 \\
|
||||
\end{tabular}
|
||||
|
||||
\end{tcolorbox}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
### 15.6 Zoll WaveShare Display
|
||||
|
||||
Als Display wurde ein 15.6 Zoll IPS(QLED) Touchscreen Monitor
|
||||
von der Firma WaveShare verwendet. WaveShare hat sich auf die
|
||||
Herstellung von Hardware für eingebettete Systeme spezialisiert
|
||||
und die Treiber für den Touchscreen sind im Linux-Kernel
|
||||
enthalten und müssen nicht manuell installiert werden. [@156inchQLED]
|
||||
In Abbildung \ref{waveShare} ist zu sehen, wie der Raspberry Pi 4
|
||||
mit dem Display verbunden ist. Dieser Monitor dient als Anzeige
|
||||
für die Flutter Anwendung und wird über dem Touchscreen bedient.
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\caption{WaveShare 15.6 Zoll IPS(QLED) Monitor mit Raspberry Pi 4}
|
||||
\label{waveShare}
|
||||
\includegraphics[width=10cm]{./assets/raspberry/waveshare.jpg}
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{
|
||||
```
|
||||
|
||||
Quelle: @156inchQLED
|
||||
|
||||
```{=latex}
|
||||
}
|
||||
\end{figure}
|
||||
```
|
||||
|
||||
### Sparkfun RGB Led Matrix
|
||||
|
||||
Die Sparkfun RGB Led Matrix ist ein 8x8 LED-Panel, das
|
||||
über ein SPI-Interface mit dem Raspberry Pi verbunden
|
||||
wird. Die im Projekt genutzte Matrix wird mittlerweile
|
||||
nicht mehr hergestellt, was aber kein Problem darstellt,
|
||||
da andere SPI-LED-Panels von vielen anderen Herstellern
|
||||
ähnlich mit einem SPI-Interface angesprochen werden. Mit
|
||||
nur leichten Anpassungen im Code für unter anderem eine andere
|
||||
Auflösung des Panels sollten auch andere LED-Panels
|
||||
problemlos wie in dem Projekt genutzt werden können. In
|
||||
dem Projekt kommt es nur darauf an zu zeigen,
|
||||
wie das SPI-Interface des Raspberry Pis genutzt werden
|
||||
kann mit Flutter.
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\caption{Sparkfun RGB Led Matrix}
|
||||
\label{waveShare}
|
||||
\includegraphics[width=10cm]{./assets/raspberry/rgbMatrix.jpg}
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{
|
||||
```
|
||||
|
||||
Quelle: @SparkFunLEDMatrixa
|
||||
|
||||
```{=latex}
|
||||
}
|
||||
\end{figure}
|
||||
```
|
||||
|
||||
### Schaltplan des Projekts
|
||||
|
||||
In Abbildung \ref{schaltplan} ist der Schaltplan des Projekts zu sehen.
|
||||
Für den Morsecode-Übersetzer wird eine handelsübliche rote LED
|
||||
verwendet. Mehr Hardware wird nicht benötigt als in dem Schaltplan
|
||||
dargestellt.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\caption{Schaltplan des Raspberry Pi 4 mit der Led und Sparkfun RGB Led Matrix}
|
||||
\label{schaltplan}
|
||||
\includegraphics[width=10cm]{./assets/raspberry/wiring.pdf}
|
||||
\end{figure}
|
||||
|
||||
### Zusätzliches Testgerät
|
||||
|
||||
Als zusätzliches Testgerät wurde ein Raspberry Pi 0 2W verwendet
|
||||
mit dem Zero-DISP-7A Display von Waveshare, welches ein 7 Zoll
|
||||
Touchscreen Display mit einer Auflösung von 1024x600 Pixeln ist
|
||||
[@ZeroDISP7AWaveshareWiki]. Der Pi 0 2W wird direkt an dem
|
||||
Display angeschlossen und dieses Testgerät gilt als Referenz
|
||||
für einen Leistungstest mit der selben Flutter-Anwendung
|
||||
an einem leistungsschwächeren und kleineren eingebetteten System.
|
||||
|
||||
Dieses zusätzliche Testgerät wurde nur am Ende des Projekts mit
|
||||
der erstellten Linux Distribution getestet, welche dazu angepasst
|
||||
wurde auch den Pi 0 2W zu unterstützen. In Kapitel \ref{yoctoChapter} wird
|
||||
weiter darauf eingegangen. In Abbildung \ref{raspberry2} ist
|
||||
ein Überblick über die für das Projekt relevante Hardware des
|
||||
Raspberry Pi 0 2W zu sehen und in Abbildung \ref{waveShare}
|
||||
ist zu sehen, wie der Raspberry Pi 0 2W mit dem Display verbunden
|
||||
ist.
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Überblick über die Hardware des Raspberry Pi 0 2W}
|
||||
\label{raspberry2}
|
||||
\begin{center}
|
||||
\begin{tcolorbox}[width=15cm]
|
||||
|
||||
\begin{tabular}{lll}
|
||||
System-on-a-Chip (Ein-Chip-System) & Broadcom BCM2710A1, \\
|
||||
& 4-Kern Cortex-A53 (ARM v8) 64-bit SoC \\
|
||||
& @ 1GHz \\
|
||||
Arbeitsspeicher & 512 MB LPDDR2 \\
|
||||
Multimedia & H.264 (1080p30 decode, 1080p30 encode) \\
|
||||
& OpenGL ES 1.1, 2.0 \\
|
||||
\end{tabular}
|
||||
|
||||
\end{tcolorbox}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
```{=latex}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\caption{Raspberry Pi 0 2W mit Zero-DISP-7A Display von Waveshare}
|
||||
\label{zero}
|
||||
\includegraphics[width=14cm]{./assets/raspberry/zero.jpg}
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
\caption*{
|
||||
```
|
||||
|
||||
Quelle: @TouchDisplayKit
|
||||
|
||||
```{=latex}
|
||||
}
|
||||
\end{figure}
|
||||
```
|
140
chapters/05_fallstudie/02_architektur.md
Normal file
@ -0,0 +1,140 @@
|
||||
## Architektur
|
||||
|
||||
<!-- Flutter Entwicklung folgt einer unidirektionalen
|
||||
Datenflussarchitektur, die auf dem Modell-View-Controller
|
||||
(MVC)-Muster basiert. -->
|
||||
|
||||
Flutter gibt Entwicklern eine große Freiheit bei der
|
||||
Auswahl der Architektur für ihre Anwendungen. Es gibt
|
||||
keine festen Regeln oder Vorschriften zur Ordnerstruktur
|
||||
oder anderen Konventionen bezüglich der Architektur.
|
||||
Als Architektur für die Demo Anwendung der Fallstudie
|
||||
wurde eine drei-schichtige Architektur gewählt.
|
||||
Eine Schichtenarchitektur ist nicht nur Teil der
|
||||
Architektur von Flutter selbst, sondern ist auch
|
||||
eine bewährte Architektur für die Entwicklung von
|
||||
Flutter Anwendungen, sowie auch generell in der Software Entwicklung.
|
||||
Die drei Schichten der Architektur sind die Präsentationsschicht,
|
||||
die Geschäftsschicht und die Datenzugriffsschicht.
|
||||
In der Präsentationsschicht wird die Benutzeroberfläche
|
||||
mit den Flutter Widgets erstellt. Die Geschäftsschicht
|
||||
ist für die Implementierung der Geschäftslogik verantwortlich und
|
||||
die Datenzugriffsschicht für den Zugriff auf die Datenbank
|
||||
und die Datenverarbeitung [@hajianFlutterEngineering2024, 219].
|
||||
Die drei Schichten sind voneinander unabhängig und kommunizieren nur
|
||||
jeweils mit der nächstliegenden Schicht wie in Abbildung \ref{schichten} dargestellt.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\caption{3-Schichtenarchitektur der Flutter Anwendung}
|
||||
\label{schichten}
|
||||
\end{figure}
|
||||
|
||||
```{=latex}
|
||||
\begin{center}
|
||||
```
|
||||
|
||||
```{.mermaid loc=assets/mermaid caption="3-Schichtenarchitektur der Flutter Anwendung" #fig:reference-name}
|
||||
flowchart TD
|
||||
A[Präsentationsschicht] <--> B
|
||||
B[Geschäftslogikschicht] <--> C
|
||||
C[Datenzugriffsschicht]
|
||||
```
|
||||
|
||||
```{=latex}
|
||||
\end{center}
|
||||
```
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\end{figure}
|
||||
|
||||
<!-- ### Layers-First Ordnerstruktur
|
||||
|
||||
- schneller und einfacher Start
|
||||
- einfach zu verstehen
|
||||
- sehr unübersichtlich, sobald die Anwendung wächst
|
||||
- zusammengehörende Dateien für ein Feature über das Projekt verteilt
|
||||
|
||||
### Feature-First Ordnerstruktur
|
||||
|
||||
- Dateien, die zu einem Feature gehören, sind an einem
|
||||
Ort zu finden
|
||||
- Layers in Feature
|
||||
- Einfache Kommunikation
|
||||
- Verständnis, was ein Feature ist, muss im Team trainiert werden -->
|
||||
|
||||
## Ordner Konventionen
|
||||
|
||||
Für die 3-Schichtenarchitektur wurde eine
|
||||
Feature-First Ordnerstruktur gewählt. Die Ordnerstruktur
|
||||
der fertigen Anwendung ist in Abbildung \ref{ordnerstruktur}
|
||||
dargestellt.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\caption{Die Ordnerstruktur der Flutter eLinux Anwendung}
|
||||
\label{ordnerstruktur}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 lib/.
|
||||
.2 common.
|
||||
.2 constants.
|
||||
.2 features.
|
||||
.3 benchmark.
|
||||
.3 home.
|
||||
.3 material\char`\_demo.
|
||||
.3 matrix\char`\_rgb.
|
||||
.3 news\char`\_api.
|
||||
.3 settings.
|
||||
.3 system\char`\_resources.
|
||||
.2 app.dart.
|
||||
.2 main.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
Im Hauptverzeichnis der Anwendung befinden sich die Ordner `common`,
|
||||
`constants`, `features` und die Dateien `app.dart` und `main.dart`.
|
||||
Der Einstiegspunkt der Anwendung ist die `main.dart` Datei, diese
|
||||
wird von Dart aufgerufen und startet die `MaterialApp` welche in
|
||||
der `app.dart` Datei definiert ist. Die `common` und `constants`
|
||||
Ordner enthalten allgemeine Klassen und Konstanten, die in der
|
||||
gesamten Anwendung verwendet werden. Der `features` Ordner
|
||||
enthält die einzelnen Features der Anwendung als Unterordner.
|
||||
Jedes Feature ist hierbei eines der verschiedenen Fenster,
|
||||
welches die Demo App besitzt und welche zuvor in den Anforderungen
|
||||
beschrieben worden sind. Innerhalb jedes Features wird
|
||||
die 3-Schichtenarchitektur umgesetzt mit den Ordnern `presentation`,
|
||||
`business` und `data`. Nicht alle Features benötigen dabei alle Schichten,
|
||||
je nach Komplexität des Features.
|
||||
|
||||
Diese Struktur ermöglicht es, dass jedes Fenster der Demo Anwendung
|
||||
modular und unabhängig von den anderen Fenstern entwickelt wurde
|
||||
und der Code für ein Feature an einem Ort zu finden ist. Dadurch
|
||||
wird die Wartbarkeit und Erweiterbarkeit der Anwendung verbessert
|
||||
und der Code ist leichter zu verstehen.
|
||||
Für die Demo App ist dies besonders wichtig, da die Anwendung als
|
||||
Einstiegspunkt so später umstrukturiert werden kann für andere
|
||||
Anwendungen, die auf der Demo App aufbauen.
|
||||
|
||||
<!-- eine Klasse pro File, Ausnahmen eng zusammengehörige Klassen
|
||||
wie zB. Stateful Widgets
|
||||
|
||||
state Architektur
|
||||
|
||||
android architecture -->
|
||||
|
||||
<!-- ### freezed package
|
||||
|
||||
generiert den notwendigen Code einer
|
||||
unveränderlichen Klasse:
|
||||
|
||||
- Konstruktor
|
||||
- toString, equlas, hashCode Methode
|
||||
- copyWith Methode
|
||||
- JSON Serialisierung
|
||||
|
||||
### State Management
|
||||
|
||||
Für das State Management wurde Riverpod gewählt. -->
|
452
chapters/05_fallstudie/03_entwicklungsumgebung.md
Normal file
@ -0,0 +1,452 @@
|
||||
## Entwicklungsumgebung
|
||||
|
||||
In diesem Kapitel wird die Entwicklungsumgebung
|
||||
für die Implementierung der Fallstudie beschrieben.
|
||||
Hierbei wird erklärt wie das Flutter Projekt
|
||||
aufgesetzt wurde und wie man es zur Entwicklung
|
||||
mit eingebetteten Linux Systemen wie dem Raspberry Pi
|
||||
konfiguriert.
|
||||
|
||||
In der Entwicklungsumgebung wird davon ausgegangen, dass
|
||||
entweder ein Linux oder macOS System genutzt wird, weil
|
||||
Windows zu diesem Zeitpunkt nicht unterstützt wird (genauer
|
||||
erläutert in Kapitel \ref{raspberrySetup}). In
|
||||
Windows sollten die Schritte mit WSL (Windows Subsystem
|
||||
for Linux) nachvollzogen werden. WSL erlaubt es eine
|
||||
vollwertige Linux Distribution in Windows zu nutzen [@InstallWSL2023].
|
||||
Die Nutzung von WSL wurde jedoch nicht getestet, das Projekt
|
||||
wurde nur mit Linux und macOS durchgeführt. Es ist also
|
||||
möglich, dass es zu Probleme bei der Nutzung von Windows kommen kann.
|
||||
|
||||
### Visual Studio Code
|
||||
|
||||
Für die Implementierung wurde die
|
||||
plattformübergreifende Open-Source-Entwicklungsumgebung
|
||||
Visual Studio Code (VS Code) von Microsoft verwendet.
|
||||
VS Code ist eine sehr beliebte Entwicklungsumgebung
|
||||
für die Entwicklung von Webanwendungen, mobilen
|
||||
Anwendungen und Desktopanwendungen. Die Entwicklungsumgebung
|
||||
bietet eine Vielzahl von Erweiterungen, die die
|
||||
Entwicklung von Anwendungen in verschiedenen
|
||||
Programmiersprachen und Frameworks unterstützen.
|
||||
|
||||
#### Genutzte Erweiterungen
|
||||
|
||||
In dem Reiter "Erweiterungen" (Strg + Shift + X in Windows/Linux, Command + Shift + X in macOS)
|
||||
in VS Code wurden die folgenden Erweiterungen installiert:
|
||||
|
||||
- dart-code.dart-code
|
||||
- dart-code.flutter
|
||||
- circlecodesolution.css-flutter-color
|
||||
- djbkwon.flutter-dependency-docs
|
||||
- pkief.material-icon-theme
|
||||
- alejandro-fa.vscode-theme-dartpad
|
||||
|
||||
Dazu gehören die offiziellen Erweiterungen für Flutter und Dart
|
||||
von Google (dart-code.dart-code und dart-code.flutter), ein Plugin
|
||||
für die Anzeige von Farben in Editor bei Dart Code (circlecodesolution.css-flutter-color),
|
||||
ein Plugin für die Anzeige der Links zu den Dokumentationen der
|
||||
Abhängigkeiten in der pubspec.yaml Datei (djbkwon.flutter-dependency-docs)
|
||||
und zwei Plugins für die Anpassung des Themes von VS Code (pkief.material-icon-theme, alejandro-fa.vscode-theme-dartpad).
|
||||
Bei der Icon Theme "Material Icon Theme" empfiehlt es sich den Befehl "Material Icons: Change Folder Theme" auszuführen und "None" auszuwählen,
|
||||
damit die Ordnerstruktur des Projektes besser dargestellt wird. Das Theme "DartPad Candy" ist zusätzlich auch
|
||||
zu empfehlen, da es die Farben des Editors zu denen vom DartPad anpasst. DartPad
|
||||
ist ein Online-Editor für Flutter und Dart, welcher von Google entwickelt wurde [@DartPad].
|
||||
Das Farbdesign ist dadurch angenehmer als das Standarddesign von VS Code
|
||||
für die Entwicklung von Flutter Anwendungen, da es speziell für die Dart
|
||||
Programmiersprache angepasst ist.
|
||||
|
||||
Mit Windows die Erweiterung "ms-vscode-remote.remote-wsl" installiert werden,
|
||||
mit der das WSL System in VS Code integriert wird. Danach sollte man
|
||||
zu diesem WSL System wechseln.
|
||||
|
||||
### Flutter Versionsverwaltung
|
||||
|
||||
Das Versionsmanagement von Flutter ist standardmäßig
|
||||
sehr einfach gehalten. Es gibt nur eine globale
|
||||
Installation von Flutter, die manuell auf dem System
|
||||
installiert wird. Diese globale Installation
|
||||
arbeitet mit Git und nutzt verschiedene Branches
|
||||
für die verschiedenen Versionen von Flutter,
|
||||
diese Branches nennt Google Channels. Die
|
||||
Channels sind _stable_, _beta_ und _master_.
|
||||
Die _stable_ Version ist immer die aktuellste
|
||||
stabile Version von Flutter, diese wird für die
|
||||
Produktion und für die meisten Entwickler empfohlen.
|
||||
Die _beta_ Version ist die neueste stabile Version
|
||||
von Flutter, welche neue Features beinhalten kann und
|
||||
nicht für die Produktion empfohlen wird. Diese Version
|
||||
wird später zur nächsten _stable_ Version höhergestuft
|
||||
und wird von Google jedoch auch bereits extensiv getestet
|
||||
und sollte sehr stabil sein. Die _master_ Version ist die neueste
|
||||
Entwicklungsversion von Flutter, diese Version ist
|
||||
nicht stabil und wird nicht für die Produktion
|
||||
empfohlen. Diese Version beinhaltet alle neuesten
|
||||
Commits welche von Entwicklern in das Flutter
|
||||
Repository gepusht wurden [@googleinc.UpgradingFlutter].
|
||||
|
||||
Hierbei gibt es jedoch einige Probleme, die
|
||||
durch die globale Installation von Flutter
|
||||
entstehen. Die globale Installation von Flutter
|
||||
ist nicht für die Arbeit mit verschiedenen
|
||||
Projekten und verschiedenen Versionen von Flutter
|
||||
ausgelegt. Es gibt keine Möglichkeit, verschiedene
|
||||
Versionen von Flutter zu installieren und zu
|
||||
verwalten. Außerdem gibt es keine einfache Möglichkeit,
|
||||
eine bestimmte Version von Flutter zu installieren,
|
||||
es wird immer die neueste _stable_, _beta_ oder
|
||||
_master_ Version installiert. So wurde in der
|
||||
Entwicklung der Anwendung von der Fallstudie Flutter Version 3.19.2
|
||||
verwendet, welche jedoch zu einem späteren Zeitpunkt
|
||||
nicht mehr aktuell ist.
|
||||
|
||||
Zur Lösung dieser Probleme wurde in dem Projekt
|
||||
Puro verwendet. Puro ist ein in Dart geschriebenes
|
||||
CLI (Command Line Interface, dt. Kommandozeile) Tool, welches es ermöglicht,
|
||||
verschiedene Versionen von Flutter zu installieren
|
||||
und zu verwalten. Dazu bietet Puro eine Integration
|
||||
mit den Entwicklungsumgebungen VS Code und IntelliJ.
|
||||
Puro ist Open-Source und auf GitHub verfügbar [@PingbirdPuro2024].
|
||||
Im folgenden wird erklärt wie Puro genutzt wird um Flutter
|
||||
zu installieren und wie es im Projekt konfiguriert wird.
|
||||
|
||||
#### Puro Installation
|
||||
|
||||
Unter MacOS und Linux kann Puro mit dem folgenden
|
||||
CLI-Befehl installiert werden:
|
||||
|
||||
```bash
|
||||
curl -o- https://puro.dev/install.sh | PURO_VERSION="1.4.5" bash
|
||||
```
|
||||
|
||||
Puro unterstützt hierbei unter Linux und Windows zur Zeit
|
||||
der Arbeit nur die AMD64 Architektur (Intel und AMD Prozessoren).
|
||||
Unter macOS wird neben AMD64 auch die ARM64 Architektur (Apple Silicon Prozessoren)
|
||||
unterstützt.
|
||||
|
||||
#### Installation von Flutter mit Puro
|
||||
|
||||
Puro arbeitet mit Umgebungen (Environments) um die verschiedenen
|
||||
Versionen von Flutter zu verwalten.
|
||||
In der Anwendung der Fallstudie wurde die Umgebung
|
||||
auf "_bachelor_elinux_" gesetzt, diese Umgebung
|
||||
muss folgendermaßen erstellt werden:
|
||||
|
||||
```{.bash .number-lines caption="Erstellung der Puro Umgebung" captionpos=t label=CreateBachelor}
|
||||
puro create bachelor_elinux 3.19.2
|
||||
```
|
||||
|
||||
Nachdem die Umgebung erstellt wurde, kann diese
|
||||
mit dem Befehl im Pfad des Projekts genutzt werden:
|
||||
|
||||
```{.bash .number-lines caption="Nutzung der Puro Umgebung im Pfad" captionpos=t label=UseBachelor}
|
||||
puro use bachelor_elinux
|
||||
```
|
||||
|
||||
Puro erstellt dann eine _.puro.json_ Datei
|
||||
und passende Einstellungen in _.vscode/settings.json_
|
||||
in dem Pfad des Projektes. Dadurch nutzt VS Code
|
||||
automatisch die richtige Version von Flutter
|
||||
wenn das Flutter Projekt gestartet wird.
|
||||
|
||||
<!-- MacOS und Linux
|
||||
|
||||
```bash
|
||||
curl -o- https://puro.dev/install.sh | PURO_VERSION="1.4.4" bash
|
||||
```
|
||||
|
||||
Windows
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "https://puro.dev/builds/1.4.4/windows-x64/puro.exe" -OutFile "$env:temp\puro.exe"; &"$env:temp\puro.exe" install-puro --promote
|
||||
```
|
||||
|
||||
Puro Optimierungen:
|
||||
|
||||
- parallel git clone and engine download
|
||||
- global cache for git history
|
||||
- global cache for engine versions
|
||||
|
||||
With other approaches, each Flutter repository is in its own folder, requiring you to download and store the git history, engine, and framework of each version:
|
||||
|
||||
Puro implements a technology similar to GitLab's object deduplication to avoid downloading the same git objects over and over again. It also uses symlinks to share the same engine version between multiple installations:
|
||||
|
||||
```bash
|
||||
puro use -g stable
|
||||
```
|
||||
|
||||
```bash
|
||||
puro create bachelor_elinux 3.19.0
|
||||
```
|
||||
|
||||
```bash
|
||||
puro use bachelor_elinux
|
||||
```
|
||||
|
||||
`.puro.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"env": "bachelor_elinux"
|
||||
}
|
||||
```
|
||||
|
||||
`.vscode/settings.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"dart.flutterSdkPath": "/Users/pi/.puro/envs/bachelor_elinux/flutter",
|
||||
"dart.sdkPath": "/Users/pi/.puro/envs/bachelor_elinux/flutter/bin/cache/dart-sdk"
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
puro flutter --version
|
||||
```
|
||||
|
||||
```bash
|
||||
Flutter 3.19.0 • channel stable • https://github.com/flutter/flutter.git
|
||||
Framework • revision bae5e49bc2 (6 days ago) • 2024-02-13 17:46:18 -0800
|
||||
Engine • revision 04817c99c9
|
||||
Tools • Dart 3.3.0 • DevTools 2.31.1
|
||||
```
|
||||
|
||||
## Setup von Raspberry Pi -->
|
||||
|
||||
### Einrichtung des Raspberry Pis als Entwicklungsplattform {#raspberrySetup}
|
||||
|
||||
In diesem Kapitel wird die Einrichtung des Raspberry Pi
|
||||
als Entwicklungsplattform für die Implementierung der Flutter Anwendung
|
||||
beschrieben.
|
||||
|
||||
#### Raspberry Pi Imager
|
||||
|
||||
Mit dem Programm _Raspberry Pi Imager_ kann das offizielle
|
||||
und auf Debian basierte Betriebssystem _Raspberry Pi OS_
|
||||
auf eine SD-Karte geschrieben werden [@raspberrypiltd.RaspberryPiOS]. In dem Programm
|
||||
kann man dazu unter "Advanced Options" den SSH Zugriff
|
||||
aktivieren und den öffentlichen SSH Schlüssel hinzufügen.
|
||||
Die Informationen der Benutzeroberfläche machen es hier nicht
|
||||
ganz klar, aber damit ist gemeint, dass der Schlüssel des
|
||||
Gerätes von dem aus der Imager genutzt wird, in dem
|
||||
Raspberry Pi OS vorkonfiguriert wird. Es wird also erwartet,
|
||||
dass das Gerät, von dem aus der Imager genutzt wird, auch
|
||||
zum Zugriff auf den Pi per SSH genutzt wird. Diese Option
|
||||
sorgt dafür, dass man sich von dem PC, auf dem der Imager genutzt
|
||||
wurde, ohne Passwort-Eingabe per SSH mit dem Pi verbinden kann.
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Ausgewählte Optionen im Raspberry Pi Imager}
|
||||
\label{newsList}
|
||||
\centering
|
||||
{\shadowimage[width=7cm]{./assets/raspberry/imagerOptions.png}}
|
||||
\end{figure}
|
||||
|
||||
Im Imager muss zusätzlich auch die Version vom Raspberry Pi OS
|
||||
mit Desktop ausgewählt werden. Es wird empfohlen diese Version
|
||||
zu nutzen, weil hier sicher ist, dass alle Grafikkarten und Eingabegeräte Treiber
|
||||
und Bibliotheken wie Schriftarten installiert sind. Diese werden
|
||||
für die Flutter Anwendung benötigt.
|
||||
|
||||
#### Deaktivierung des Desktops
|
||||
|
||||
Der Desktop von Raspberry Pi OS ist nicht notwendig und
|
||||
muss in dem "raspi-config" Kommandozeilen-Programm deaktiviert werden:
|
||||
|
||||
```{.bash .number-lines caption="Starten von raspi-config" captionpos=t label=raspiConfig}
|
||||
sudo raspi-config
|
||||
```
|
||||
|
||||
In Raspi-Config muss dann unter "System Options" und "Boot / Auto Login"
|
||||
die Option "Console" ausgewählt werden und der Raspberry muss neugestartet werden.
|
||||
Dies ist notwendig da Flutter-Pi ohne Desktop-Server genutzt werden muss.
|
||||
|
||||
<!-- #### Tailscale
|
||||
|
||||
```bash
|
||||
curl -fsSL https://tailscale.com/install.sh | sh
|
||||
``` -->
|
||||
|
||||
#### Installation Flutter-Pi
|
||||
|
||||
Danach kann Flutter-Pi nach der offiziellen Anleitung
|
||||
aus der README Datei des Projekts auf GitHub installiert
|
||||
werden [@winklerArderaFlutterpi2024]. Im Folgenden werden die
|
||||
notwendigen Befehle dazu gelistet:
|
||||
|
||||
```{.bash .number-lines caption="Installation von Flutter-Pi" captionpos=t label=FlutterPiInstallation}
|
||||
# Installation aller Abhängigkeiten
|
||||
sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev ttf-mscorefonts-installer fontconfig libsystemd-dev libinput-dev libudev-dev libxkbcommon-dev
|
||||
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-alsa
|
||||
# Aktualisierung der Schriftarten
|
||||
sudo fc-cache
|
||||
# Installation von Flutter-Pi
|
||||
git clone https://github.com/ardera/flutter-pi
|
||||
cd flutter-pi
|
||||
mkdir build && cd build
|
||||
cmake ..
|
||||
make -j`nproc`
|
||||
sudo make install
|
||||
```
|
||||
|
||||
Flutter-Pi kommt mit einem eigenen Build-Tool, welches
|
||||
genutzt werden muss um die Flutter Anwendungen für Flutter-Pi
|
||||
zu kompilieren. Dieses Tool kann mit dem folgenden Befehl
|
||||
installiert werden:
|
||||
|
||||
```{.bash .number-lines caption="Installation von flutterpi_tool" captionpos=t label=FlutterPiTool}
|
||||
puro flutter pub global activate flutterpi_tool
|
||||
```
|
||||
|
||||
Das Build-Tool von Flutter-Pi funktioniert momentan nur auf Linux und
|
||||
macOS Systemen.
|
||||
|
||||
#### Hinzufügen des Raspberry Pis als Custom Device
|
||||
|
||||
Zuletzt muss der Raspberry Pi als "Custom Device" (dt. Angepasste Geräte) zu
|
||||
der Flutter Konfiguration auf dem PC hinzugefügt werden,
|
||||
auf dem vorher der Imager genutzt wurde und VS Code und Puro
|
||||
installiert wurden. In der GitHub Wiki von Flutter wird
|
||||
erklärt wie man "Custom Embedder" als "Custom Devices" zur
|
||||
lokalen Flutter Installation hinzufügen kann [@UsingCustomEmbeddersa].
|
||||
Die Informationen sind jedoch sehr spärlich und vieles musste
|
||||
durch Ausprobieren herausgefunden werden.
|
||||
|
||||
Zuerst müssen die Custom Devices aktiviert werden:
|
||||
|
||||
```{.shell .number-lines caption="Installation von Flutter-Pi" captionpos=t label=customDevicesEnable}
|
||||
puro flutter config --enable-custom-devices
|
||||
```
|
||||
|
||||
Durch die Ausführung des Befehls wird die Datei _~/.config/flutter/custom_devices.json_ erstellt
|
||||
und für die lokale Flutter Installation wurde aktiviert, dass Custom Devices aus dieser
|
||||
Datei ausgelesen werden können.
|
||||
|
||||
In der Datei _custom_devices.json_ wird dann der Raspberry Pi
|
||||
hinzugefügt werden. Da die Dokumentationen dazu sehr spärlich
|
||||
sind, folgt hier die komplette Konfiguration für den Raspberry Pi 4
|
||||
welche auch in dem Projekt verwendet wurde:
|
||||
|
||||
```{.json .number-lines caption="Beispiel Konfiguration von custom_devices.json" captionpos=t label=customDevicesJson}
|
||||
{
|
||||
"custom-devices": [
|
||||
{
|
||||
"id": "rpi",
|
||||
"label": "Raspberry Pi 4",
|
||||
"sdkNameAndVersion": "rpi4",
|
||||
"platform": null,
|
||||
"enabled": true,
|
||||
"ping": ["ping", "-c", "1", "raspberrypi"],
|
||||
"pingSuccessRegex": null,
|
||||
"postBuild": ["flutterpi_tool", "build", "--arch=arm64", "--cpu=pi4"],
|
||||
"install": [
|
||||
"scp",
|
||||
"-r",
|
||||
"-o",
|
||||
"BatchMode=no",
|
||||
"${localPath}",
|
||||
"pi@raspberrypi:/tmp/${appName}"
|
||||
],
|
||||
"uninstall": [
|
||||
"ssh",
|
||||
"-o",
|
||||
"BatchMode=no",
|
||||
"pi@raspberrypi",
|
||||
"rm -rf \"/tmp/${appName}\""
|
||||
],
|
||||
"runDebug": [
|
||||
"ssh",
|
||||
"-o",
|
||||
"BatchMode=no",
|
||||
"pi@raspberrypi",
|
||||
"flutter-pi /tmp/${appName}"
|
||||
],
|
||||
"stopApp": [
|
||||
"ssh",
|
||||
"-o",
|
||||
"BatchMode=no",
|
||||
"pi@raspberrypi",
|
||||
"pkill",
|
||||
"flutter-pi"
|
||||
],
|
||||
"forwardPort": [
|
||||
"ssh",
|
||||
"-o",
|
||||
"BatchMode=no",
|
||||
"-o",
|
||||
"ExitOnForwardFailure=yes",
|
||||
"-L",
|
||||
"127.0.0.1:${hostPort}:127.0.0.1:${devicePort}",
|
||||
"pi@raspberrypi",
|
||||
"echo 'Port forwarding success'; read"
|
||||
],
|
||||
"forwardPortSuccessRegex": "Port forwarding success",
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Im Quellcode von Flutter konnte zu der _custom-devices.json_ Datei die
|
||||
Schema-Datei _custom-devices.schema.json_ gefunden werden, welche
|
||||
als Referenz und Hilfe für die Konfiguration genutzt wurde.
|
||||
|
||||
In der Beispielkonfiguration von Auflistung \ref{customDevicesJson} wird
|
||||
der Raspberry Pi 4 als Custom Device mit dem Label "Raspberry Pi 4"
|
||||
und der ID "rpi" hinzugefügt. Der "ping" Befehl wird genutzt um zu
|
||||
überprüfen ob das Gerät erreichbar ist und wenn es ist, wird es
|
||||
bei der Ausführung von Flutter mit dem definierten Label
|
||||
und der ID in der Geräteliste angezeigt.
|
||||
|
||||
Im "postBuild" Befehl wird das
|
||||
Flutter-Pi Build-Tool mit den Parametern "--arch=arm64" und "--cpu=pi4"
|
||||
genutzt um die Anwendung für den Pi 4 und der ARM64 Architektur zu
|
||||
kompilieren. Aus der Dokumentation des Flutter-Pi Build-Tools kann entnommen werden,
|
||||
dass es beim "cpu" Parameter nur die Optionen "pi3" und "pi4" gibt, welche
|
||||
spezielle Optimierungen für den Raspberry Pi 3 und 4 beinhalten. Für alle anderen
|
||||
Geräte kann der Parameter weg gelassen werden und nur der passende "arch" Parameter
|
||||
zur Prozessorarchitektur ist wichtig mit den Optionen "arm", "arm64" und "x64".
|
||||
Es werden alle Geräte mit diesen Prozessortypen unterstützt [@winklerArderaFlutterpi_tool2024].
|
||||
|
||||
Mit dem "install" Befehl wird die Anwendung
|
||||
mit dem _scp_ Kommandozeilen-Befehl (OpenSSH Secure Copy)
|
||||
vom lokalen PC auf den Raspberry Pi kopiert. Dank des SSH Schlüssels,
|
||||
welcher im Imager hinzugefügt wurde, ist keine Passwort-Eingabe
|
||||
notwendig wie auch bei allen anderen folgenden SSH Befehlen aus
|
||||
der Konfiguration. Als Ordner wird ein temporärer Ordner auf dem
|
||||
Pi genutzt, in Linux wird dazu das _/tmp_ Verzeichnis genutzt.
|
||||
Alle Dateien darin werden nach einem Neustart des Geräts gelöscht.
|
||||
|
||||
Der "uninstall" Befehl löscht dann die Anwendung wieder manuell vom Raspberry Pi
|
||||
und der "runDebug" Befehl startet die Anwendung auf dem Pi mit dem _flutter-pi_
|
||||
Befehl. Der "stopApp" Befehl stoppt die Anwendung auf dem Pi manuell
|
||||
mit dem _pkill_ Befehl.
|
||||
Im "forwardPort" Befehl wird ein Port auf dem Pi auf einen Port auf dem
|
||||
lokalen PC weitergeleitet, dies ist notwendig um die Anwendung auf dem
|
||||
Pi zu debuggen.
|
||||
|
||||
Nach der Konfiguration kann der Raspberry Pi beim Ausführen der
|
||||
Flutter Anwendung ausgewählt werden und die Anwendung kann auf dem
|
||||
Raspberry Pi gestartet werden, während der Code auf dem lokalen PC
|
||||
in VS Code geschrieben und debuggt werden kann. Dabei funktioniert
|
||||
auch das Hot-Reload Feature von Flutter.
|
||||
|
||||
Im Test funktioniert diese Konfiguration gut, es gibt aber ein paar Probleme.
|
||||
Beim Beenden der Anwendung wird der _stopApp_ Befehl nicht ausgeführt, der
|
||||
Befehl in der Konfiguration kann aber manuell ausgeführt werden und funktioniert
|
||||
dann. Zusätzlich funktioniert der Hot-Reload nicht beim ersten Mal und es
|
||||
wird der Fehler aus Abbildung angezeigt. Es kann dann ein Hot-Restart
|
||||
durchgeführt werden und danach funktioniert auch das Hot-Reload Feature
|
||||
wie erwartet. Ein paar Mal kam es aber auch vor, dass die App dabei abstürzte.
|
||||
Es funktioniert also gut, ist aber noch instabil.
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Die Fehlernachricht beim ersten Hot-Reload}
|
||||
\label{newsList}
|
||||
\centering
|
||||
{\includegraphics[width=10cm]{./assets/raspberry/hotReloadError.png}}
|
||||
\end{figure}
|
||||
|
||||
Der Fehler tritt wahrscheinlich auf, weil die Anwendung nicht den Einstiegspunkt
|
||||
in der "_MaterialApp_" richtig neuladen kann. Es ist aber unklar wieso
|
||||
es nur beim ersten Mal passiert und die Fehlernachricht hilft in diesem
|
||||
Fall nicht weiter.
|
@ -1,144 +0,0 @@
|
||||
# Implementierung
|
||||
|
||||
Im folgenden Kapitel wird die Implementierung des Projektes
|
||||
beschrieben. Dabei wird auf die Entwicklungsumgebung, die
|
||||
Verwendung von Flutter und Dart, die Einrichtung des Raspberry
|
||||
Pi und die Implementierung der Software eingegangen.
|
||||
|
||||
## Entwicklungsumgebung
|
||||
|
||||
### Visual Studio Code
|
||||
|
||||
Für die Implementierung der Fallstudie wurde die
|
||||
plattformübergreifende Open-Source-Entwicklungsumgebung
|
||||
Visual Studio Code (VS Code) von Microsoft verwendet.
|
||||
VS Code ist eine sehr beliebte Entwicklungsumgebung
|
||||
für die Entwicklung von Webanwendungen, mobilen
|
||||
Anwendungen und Desktopanwendungen. Die Entwicklungsumgebung
|
||||
bietet eine Vielzahl von Erweiterungen, die die
|
||||
Entwicklung von Anwendungen in verschiedenen
|
||||
Programmiersprachen und Frameworks unterstützen.
|
||||
|
||||
### Flutter Versionsverwaltung
|
||||
|
||||
Das Versionsmanagement von Flutter ist standardmäßig
|
||||
sehr einfach gehalten. Es gibt nur eine globale
|
||||
Installation von Flutter, die manuell auf dem System
|
||||
installiert wird. Diese globale Installation
|
||||
arbeitet mit Git und nutzt verschiedene Branches
|
||||
für die verschiedenen Versionen von Flutter,
|
||||
diese Branches nennt Google Channels. Die
|
||||
Channels sind **stable**, **beta** und **master**.
|
||||
Die **stable** Version ist immer die aktuellste
|
||||
stabile Version von Flutter, diese wird für die
|
||||
Produktion und für die meisten Entwickler empfohlen.
|
||||
Die **beta** Version ist die neueste stabile Version
|
||||
von Flutter, welche neue Features beinhalten kann und
|
||||
nicht für die Produktion empfohlen wird. Diese Version
|
||||
wird später zur nächsten **stable** Version höhergestuft
|
||||
und wird von Google jedoch auch bereits extensiv getestet
|
||||
und sollte sehr stabil sein. Die **master** Version ist die neueste
|
||||
Entwicklungsversion von Flutter, diese Version ist
|
||||
nicht stabil und wird nicht für die Produktion
|
||||
empfohlen. Diese Version beinhaltet alle neuesten
|
||||
Commits welche von Entwicklern in das Flutter
|
||||
Repository gepusht wurden.
|
||||
|
||||
Hierbei gibt es jedoch einige Probleme, die
|
||||
durch die globale Installation von Flutter
|
||||
entstehen. Die globale Installation von Flutter
|
||||
ist nicht für die Arbeit mit verschiedenen
|
||||
Projekten und verschiedenen Versionen von Flutter
|
||||
ausgelegt. Es gibt keine Möglichkeit, verschiedene
|
||||
Versionen von Flutter zu installieren und zu
|
||||
verwalten. Außerdem gibt es keine einfache Möglichkeit,
|
||||
eine bestimmte Version von Flutter zu installieren,
|
||||
es wird immer die neueste **stable**, **beta** oder
|
||||
**master** Version installiert. So wurde in der
|
||||
Entwicklung der Fallstudie Flutter Version 3.19.2
|
||||
verwendet, welche jedoch zu einem späteren Zeitpunkt
|
||||
nicht mehr aktuell ist.
|
||||
|
||||
Zur Lösung dieser Probleme gibt es verschiedene
|
||||
Versionsverwaltungs-Tools für Flutter. Die bekanntesten
|
||||
sind FVM (Flutter Version Management) und Puro.
|
||||
|
||||
FVM ist ein simples CLI-Tool, welches es ermöglicht,
|
||||
verschiedene Versionen von Flutter zu installieren
|
||||
und zu verwalten. Puro dahingegen ist ein weiteres
|
||||
CLI-Tool, welches neben der Versionsverwaltung von
|
||||
Flutter auch eine Integration mit den bekannten
|
||||
Entwicklungsumgebungen VS Code und IntelliJ bietet.
|
||||
|
||||
In der Fallstudie wurde Puro verwendet und das
|
||||
Projekt ist so konfiguriert, dass es die Version
|
||||
3.19.2 von Flutter verwendet.
|
||||
|
||||
<!-- MacOS und Linux
|
||||
|
||||
```bash
|
||||
curl -o- https://puro.dev/install.sh | PURO_VERSION="1.4.4" bash
|
||||
```
|
||||
|
||||
Windows
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "https://puro.dev/builds/1.4.4/windows-x64/puro.exe" -OutFile "$env:temp\puro.exe"; &"$env:temp\puro.exe" install-puro --promote
|
||||
```
|
||||
|
||||
Puro Optimierungen:
|
||||
|
||||
- parallel git clone and engine download
|
||||
- global cache for git history
|
||||
- global cache for engine versions
|
||||
|
||||
With other approaches, each Flutter repository is in its own folder, requiring you to download and store the git history, engine, and framework of each version:
|
||||
|
||||
Puro implements a technology similar to GitLab's object deduplication to avoid downloading the same git objects over and over again. It also uses symlinks to share the same engine version between multiple installations:
|
||||
|
||||
```bash
|
||||
puro use -g stable
|
||||
```
|
||||
|
||||
```bash
|
||||
puro create bachelor_elinux 3.19.0
|
||||
```
|
||||
|
||||
```bash
|
||||
puro use bachelor_elinux
|
||||
```
|
||||
|
||||
`.puro.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"env": "bachelor_elinux"
|
||||
}
|
||||
```
|
||||
|
||||
`.vscode/settings.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"dart.flutterSdkPath": "/Users/fabian/.puro/envs/bachelor_elinux/flutter",
|
||||
"dart.sdkPath": "/Users/fabian/.puro/envs/bachelor_elinux/flutter/bin/cache/dart-sdk"
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
puro flutter --version
|
||||
```
|
||||
|
||||
```bash
|
||||
Flutter 3.19.0 • channel stable • https://github.com/flutter/flutter.git
|
||||
Framework • revision bae5e49bc2 (6 days ago) • 2024-02-13 17:46:18 -0800
|
||||
Engine • revision 04817c99c9
|
||||
Tools • Dart 3.3.0 • DevTools 2.31.1
|
||||
```
|
||||
|
||||
## Setup von Raspberry Pi -->
|
||||
|
||||
### Raspberry Pi OS
|
||||
|
||||
- Einrichtung als Entwicklungsbetriebssystem mit Flutter Hot-Reload
|
||||
- für rapide Entwicklung und Testen
|
@ -1,571 +0,0 @@
|
||||
<!-- Core Principles
|
||||
|
||||
Lightweight Embedder: flutter-pi acts as a custom Flutter engine
|
||||
embedder tailored for the Raspberry Pi. This means it provides the
|
||||
essential interface layer between Flutter's primarily C++ engine
|
||||
and the embedded Linux environment (like on a Raspberry Pi).
|
||||
|
||||
No X11 Required: Notably, flutter-pi achieves this feat without
|
||||
the graphical overhead of a system like X11 (common in desktop
|
||||
Linux). This aligns better with resource-constrained embedded
|
||||
devices.
|
||||
|
||||
Direct Rendering:
|
||||
flutter-pi interacts with lower-level graphics APIs within the
|
||||
Raspberry Pi (e.g., Broadcom's VideoCore, EGL) to handle rendering
|
||||
of the Flutter UI onto the display hardware.
|
||||
|
||||
Key Responsibilities
|
||||
|
||||
Initialization:
|
||||
Sets up the Flutter engine, loads appropriate libraries, and
|
||||
gets everything ready for the Flutter application to run.
|
||||
|
||||
Event Handling: Manages input events (touch via touchscreen,
|
||||
keyboard, mouse, etc.) and routes them from the embedded Linux
|
||||
system to the Flutter framework for processing.
|
||||
|
||||
Rendering Loop: Coordinates requesting the next Flutter UI fram
|
||||
e in response to events or state changes, communicates with the
|
||||
rendering backends, and facilitates displaying the content.
|
||||
|
||||
Platform Channels: (Likely) Provides mechanisms for the Flutter
|
||||
app to communicate with the underlying embedded Linux system.
|
||||
This enables the app to potentially access device-specific
|
||||
sensors, hardware control, and features outside the scope of
|
||||
Flutter's core framework.
|
||||
|
||||
How to Utilize It
|
||||
|
||||
Prepare Environment: You'll need a Raspberry Pi running an
|
||||
embedded Linux distribution and a toolchain suitable for
|
||||
cross-compilation.
|
||||
|
||||
Obtain/Build flutter-pi: Refer to the project's GitHub repository
|
||||
for build instructions.
|
||||
|
||||
Develop Flutter App: Structure your Flutter app normally, being
|
||||
mindful of platform interactions that might need platform channels
|
||||
(step 4).
|
||||
|
||||
Integrate & Compile: Follow flutter-pi's instructions to compile
|
||||
your Flutter app code while linking against the flutter-pi embedder
|
||||
you obtained/built.
|
||||
|
||||
Deploy & Run: Transfer the compiled output to your Raspberry Pi
|
||||
and execute it with appropriate flutter-pi settings.
|
||||
|
||||
Caveats
|
||||
|
||||
Experimental: Not considered production-ready for every use-case (as might be expected with projects pushing Flutter’s boundaries).
|
||||
Limited APIs: Compared to mainstream platforms, Flutter’s full suite of plugins and packages might not be compatible without extra platform channel work on your end.
|
||||
-->
|
||||
|
||||
<!-- Introduction:
|
||||
|
||||
- Clearly describe what your Flutter application does and its main functionality.
|
||||
|
||||
Architecture:
|
||||
|
||||
- Diagram and explain your app's structure (state management approach, key widgets, navigation).
|
||||
- Consider using visual aids to make this section more engaging.
|
||||
|
||||
Key Design Concepts:
|
||||
|
||||
- Challenges solved by your design choices.
|
||||
- Did you address performance optimizations for embedded systems?
|
||||
- How did you make the UI fit for the embedded target? -->
|
||||
|
||||
## Implementierung der Features
|
||||
|
||||
Im Folgenden wird die Implementierung der
|
||||
einzelnen Features des Projektes beschrieben.
|
||||
|
||||
\pagebreak
|
||||
|
||||
### Home Feature
|
||||
|
||||
Das Home-Feature ist die Startseite der App. Es
|
||||
besteht aus einem einfachen Screen, der
|
||||
nur den Text "Flutter on Embedded Linux" anzeigt.
|
||||
|
||||
\Begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Ordnerstruktur des Home-Features}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 home/.
|
||||
.2 presentation/.
|
||||
.3 home\char`\_screen.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/home.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\End{multicols}
|
||||
|
||||
\pagebreak
|
||||
|
||||
### Material Demo Feature
|
||||
|
||||
Das Material Demo Feature zeigt eine Auswahl
|
||||
von Material Design Widgets. Es besteht aus
|
||||
einem Screen, der eine Liste von Widgets
|
||||
anzeigt.
|
||||
|
||||
\Begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Ordnerstruktur des Material Demo Features}
|
||||
\centering
|
||||
\begin{minipage}{10cm}
|
||||
\dirtree{%
|
||||
.1 material\char`\_demo/.
|
||||
.2 presentation/.
|
||||
.3 material\char`\_demo\char`\_screen.dart.
|
||||
.3 widgets/.
|
||||
.4 component\char`\_decoration.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Material Demo Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/material3.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\End{multicols}
|
||||
|
||||
<!-- \begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/material3Dialog.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure} -->
|
||||
|
||||
\pagebreak
|
||||
|
||||
### Benchmark
|
||||
|
||||
Das Benchmark Feature zeigt verschiedene
|
||||
Benchmarks, die die Leistungsfähigkeit von
|
||||
Flutter auf Embedded Linux demonstrieren.
|
||||
|
||||
\begin{figure}[h]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 benchmark/.
|
||||
.2 business/.
|
||||
.3 flame/.
|
||||
.4 rogue\char`\_shooter/.
|
||||
.4 sprite\char`\_renderer/.
|
||||
.2 data/.
|
||||
.3 models/.
|
||||
.4 benchmark.dart.
|
||||
.4 ember.dart.
|
||||
.3 benchmarks\char`\_list.dart.
|
||||
.2 presentation/.
|
||||
.3 widgets/.
|
||||
.4 benchmark\char`\_card.dart.
|
||||
.3 benchmark\char`\_screen.dart.
|
||||
.3 map\char`\_benchmark\char`\_screen.dart.
|
||||
.3 rogue\char`\_shooter\char`\_screen.dart.
|
||||
.3 sprite\char`\_benchmark\char`\_screen.dart.
|
||||
.3 video\char`\_benchmark\char`\_screen.dart.
|
||||
.3 vsync\char`\_benchmark\char`\_screen.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmark.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmarkSprite.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmarkSpriteFinished.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmarkFlame.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmarkFlame2.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmarkVsync.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmarkVideo.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/benchmarkMap.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\pagebreak
|
||||
|
||||
### News
|
||||
|
||||
Das News Feature zeigt eine Liste von Nachrichten
|
||||
der Tagesschau.
|
||||
|
||||
\Begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 news\char`\_api/.
|
||||
.2 business/.
|
||||
.3 news\char`\_controller.dart.
|
||||
.3 scroll\char`\_state\char`\_controller.dart.
|
||||
.2 data/.
|
||||
.3 models/.
|
||||
.4 news.dart.
|
||||
.4 region\char`\_news.dart.
|
||||
.4 teaser\char`\_image\char`\_url.dart.
|
||||
.4 teaser\char`\_image.dart.
|
||||
.3 repository/.
|
||||
.4 news\char`\_repository.dart.
|
||||
.2 presentation/.
|
||||
.3 widgets/.
|
||||
.4 news\char`\_grid\char`\_item.dart.
|
||||
.4 news\char`\_grid.dart.
|
||||
.4 news\char`\_list\char`\_item.dart.
|
||||
.4 news\char`\_list.dart.
|
||||
.3 news\char`\_screen.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/newsList.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/newsGrid.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\End{multicols}
|
||||
|
||||
\pagebreak
|
||||
|
||||
#### Freezed
|
||||
|
||||
wurde verwendet, um die Modelle zu generieren.
|
||||
|
||||
\lstinputlisting[language=Java, caption=Implementierung der News Klasse, linerange={0-20}, captionpos=t]
|
||||
{code/flutter_elinux/lib/features/news_api/data/models/news.dart}
|
||||
|
||||
\lstinputlisting[language=Java, caption=Implementierung des News Controllers, captionpos=t]
|
||||
{code/flutter_elinux/lib/features/news_api/data/repository/news_repository.dart}
|
||||
|
||||
\lstinputlisting[language=Java, caption=Implementierung des News Controllers, captionpos=t]
|
||||
{code/flutter_elinux/lib/features/news_api/business/news_controller.dart}
|
||||
|
||||
\pagebreak
|
||||
|
||||
### Led Morse
|
||||
|
||||
\begin{figure}[ht]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 morse\char`\_led/.
|
||||
.2 business/.
|
||||
.3 service/.
|
||||
.4 morse\char`\_service.dart.
|
||||
.2 presentation/.
|
||||
.3 led\char`\_screen.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/morse.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/morseInput.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\lstinputlisting[language=Java, caption=Implementierung des Morse Service, captionpos=t]
|
||||
{code/flutter_elinux/lib/features/morse_led/business/service/morse_service.dart}
|
||||
|
||||
\pagebreak
|
||||
|
||||
### Matrix
|
||||
|
||||
\begin{figure}[ht]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 matrix\char`\_rgb/.
|
||||
.2 business/.
|
||||
.3 service/.
|
||||
.4 matrix\char`\_service.dart.
|
||||
.3 utils/.
|
||||
.4 find\char`\_closest\char`\_color\char`\_index.dart.
|
||||
.2 data/.
|
||||
.3 models/.
|
||||
.4 pixel.dart.
|
||||
.2 presentation/.
|
||||
.3 widgets/.
|
||||
.4 pixel\char`\_painter.dart.
|
||||
.3 matrix\char`\_screen.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/matrix.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/matrixInput.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/matrixColor.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/matrixColorWheel.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\lstinputlisting[language=Java, caption=Implementierung des Matrix Service, captionpos=t]
|
||||
{code/flutter_elinux/lib/features/matrix_rgb/business/service/matrix_service.dart}
|
||||
|
||||
\pagebreak
|
||||
|
||||
### System Informationen
|
||||
|
||||
\Begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 system\char`\_resources/.
|
||||
.2 business/.
|
||||
.3 service/.
|
||||
.4 memory\char`\_service.dart.
|
||||
.3 utils/.
|
||||
.4 get\char`\_cpu\char`\_usage\char`\_percentage.dart.
|
||||
.2 presentation/.
|
||||
.3 system\char`\_resources\char`\_screen.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/systemResources.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\End{multicols}
|
||||
|
||||
\lstinputlisting[language=Java, caption=Implementierung des Memory Service, captionpos=t]
|
||||
{code/flutter_elinux/lib/features/system_resources/business/service/memory_service.dart}
|
||||
|
||||
\pagebreak
|
||||
|
||||
### Einstellungen
|
||||
|
||||
\Begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 settings/.
|
||||
.2 business/.
|
||||
.3 wifi\char`\_controller.dart.
|
||||
.2 presentation/.
|
||||
.3 settings\char`\_screen/.
|
||||
.4 widgets/.
|
||||
.5 color\char`\_seed\char`\_button.dart.
|
||||
.4 settings\char`\_screen.dart.
|
||||
.3 wifi\char`\_settings\char`\_screen/.
|
||||
.4 widgets/.
|
||||
.5 ap\char`\_pw\char`\_dialog.dart.
|
||||
.5 ap\char`\_tile\char`\_demo.dart.
|
||||
.5 ap\char`\_tile.dart.
|
||||
.5 wifi\char`\_bar\char`\_icon.dart.
|
||||
.4 accesspoint\char`\_screen.dart.
|
||||
.4 wifi\char`\_settings\char`\_screen.dart.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/settings.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/settingsDark.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\End{multicols}
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/settingsWifiList.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/settingsWifiDetails.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/settingsWifiConnect.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/settingsWifiPasswordInput.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\end{multicols}
|
||||
|
||||
\begin{figure}[H]
|
||||
\caption{Home Screen}
|
||||
\centering
|
||||
{\includegraphics[width=8cm]{./assets/screenshots/settingsMaterial2.png}}
|
||||
\label{fig:screeplot}
|
||||
\end{figure}
|
||||
|
||||
\pagebreak
|
||||
|
||||
\lstinputlisting[language=Java, caption=Implementierung des Wifi Controllers, captionpos=t]
|
||||
{code/flutter_elinux/lib/features/settings/business/wifi_controller.dart}
|
@ -1,172 +0,0 @@
|
||||
\pagebreak
|
||||
|
||||
## Yocto Project
|
||||
|
||||
Kein source-code, nur meta daten.
|
||||
Die Regeln, wie der Source-Code gebaut wird, werden in Rezepten festgelegt.
|
||||
|
||||
docker als build-umgebung.
|
||||
https://hub.docker.com/r/crops/poky
|
||||
|
||||
poky = yocto.
|
||||
Yocto Project basierend auf Poky Linux.
|
||||
Ausgesprochen "Pocky" wie das japanische Knabberzeug.
|
||||
|
||||
Alle 6 Monate neue Version.
|
||||
Alle 2 Jahre Long-Term-Support Version.
|
||||
|
||||
Distro: How I want to put my system together.
|
||||
Machine: the board i want to build for.
|
||||
Image: the selection of packages i want.
|
||||
|
||||
build cross-compiler.
|
||||
tools for build time.
|
||||
compile code for target machine.
|
||||
|
||||
### Layers
|
||||
|
||||
Layer contains bunch of recipes.
|
||||
|
||||
3 layers:
|
||||
bsp: board support package
|
||||
defines a machine and related board-specific packages
|
||||
contains conf/machine/[MACHINE].conf
|
||||
|
||||
distribution: defines a DISTRO such as Poky
|
||||
contains conf/distro/[DISTRO].conf
|
||||
|
||||
Software: everything else
|
||||
contains neither conf/machine/[MACHINE].conf nor conf/distro/[DISTRO].conf
|
||||
libraries, e.g. qt5
|
||||
languages, e.g. Java
|
||||
tools, e.g. virtualisation or selinux
|
||||
|
||||
### Recipes
|
||||
|
||||
contain instructions on how to fetch, configure, compile and install a software component
|
||||
the body contains BitBake metadata (assignment of variables, mostly); the tasks are written
|
||||
in shell script or Python
|
||||
Recipe files have a suffix .bb
|
||||
may be extended with append recipes with .bbappend suffix
|
||||
|
||||
majority of recipes produce packages.
|
||||
/tmp/deploy/rpm/..
|
||||
often one recipe produces several packages.
|
||||
|
||||
IMAGE_INSTALL:append
|
||||
|
||||
### Images
|
||||
|
||||
core-image-base: A console-only image that fully supports the target device hardware.
|
||||
core-image-full-cmdline: A console-only image with more full-featured Linux system functionality installed.
|
||||
core-image-minimal: A small image just capable of allowing a device to boot.
|
||||
core-image-weston: A very basic Wayland image with a terminal. This image provides the
|
||||
Wayland protocol libraries and the reference Weston compositor. For more information,
|
||||
see the “Using Wayland and Weston” section in the Yocto Project Development Tasks Manual.
|
||||
|
||||
\begin{center}
|
||||
\begin{table}[h]
|
||||
\caption{Example caption}
|
||||
\resizebox{\textwidth}{!}{%
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
Meta-Layer & Branch \\ \hline
|
||||
https://github.com/kraj/meta-clang & 312ff1c39b1bf5d35c0321e873417eb013cea477 \\ \hline
|
||||
https://github.com/meta-flutter/meta-flutter & 82e167a7f13161a4ee9c5a426f13df79987d1055 \\ \hline
|
||||
https://github.com/openembedded/meta-openembedded & fda737ec0cc1d2a5217548a560074a8e4d5ec580 \\ \hline
|
||||
https://github.com/agherzan/meta-raspberrypi & 9dc6673d41044f1174551120ce63501421dbcd85 \\ \hline
|
||||
https://github.com/jwinarske/meta-vulkan & ceb47bd0ed2a9f657fdae48a901e8a41ba697e74 \\ \hline
|
||||
https://codeberg.org/flk/meta-wayland & cb22939f751c74baa51d9474ba6e8ba647e99756 \\ \hline
|
||||
\end{tabular}%
|
||||
}
|
||||
\end{table}
|
||||
\end{center}
|
||||
|
||||
\begin{figure}[h]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 crops-yocto/.
|
||||
.2 build/.
|
||||
.3 conf/.
|
||||
.4 bblayers.conf.
|
||||
.4 local.conf.
|
||||
.2 poky/.
|
||||
.2 run\char`\_crops.sh.
|
||||
.2 Makefile.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{7cm}
|
||||
\dirtree{%
|
||||
.1 poky/.
|
||||
.2 meta/.
|
||||
.2 meta-poky/.
|
||||
.2 meta-yocto-bsp/.
|
||||
.2 meta-selftest/.
|
||||
.2 meta-skeleton/.
|
||||
.2 mea-clang/.
|
||||
.2 meta-flutter/.
|
||||
.2 meta-flutter-apps/.
|
||||
.2 meta-flutter-elinux/.
|
||||
.2 meta-openembedded/.
|
||||
.2 meta-raspberrypi/.
|
||||
.2 meta-wayland/.
|
||||
.2 meta-vulkan/.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{10cm}
|
||||
\dirtree{%
|
||||
.1 meta-flutter-apps/.
|
||||
.2 recipes-graphics/.
|
||||
.3 flutter-apps/.
|
||||
.4 third-party/.
|
||||
.5 flutter-elinux\char`\_git.bb/.
|
||||
.5 flutter-wonders\char`\_git.bb/.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h]
|
||||
\caption{Example caption}
|
||||
\centering
|
||||
\begin{minipage}{10cm}
|
||||
\dirtree{%
|
||||
.1 meta-flutter-elinux/.
|
||||
.2 recipes-core/.
|
||||
.3 custom-scripts/.
|
||||
.4 files/.
|
||||
.5 flutter-auto-launch/.
|
||||
.4 flutter-auto-launch\char`\_1.00.bb.
|
||||
.3 flutter-elinux-rules/.
|
||||
.4 files/.
|
||||
.5 90-interfaces.rules.
|
||||
.4 flutter-elinux-rules\char`\_1.00.bb.
|
||||
.3 flutter-user/.
|
||||
.4 flutter-user\char`\_1.00.bb.
|
||||
.3 systemd/.
|
||||
.4 files/.
|
||||
.5 flutter-auto.service.
|
||||
.5 flutter-pi.service.
|
||||
.4 flutter-auto-service\char`\_1.00.bb.
|
||||
.4 flutter-pi-service\char`\_1.00.bb.
|
||||
.4 systemd\char`\_\%.bbappend.
|
||||
.3 systemd-conf/.
|
||||
.4 files/.
|
||||
.5 en.network.
|
||||
.5 eth.network.
|
||||
.5 wlan.network.
|
||||
.4 systemd-conf\char`\_\%.bbappend.
|
||||
}
|
||||
\end{minipage}
|
||||
\end{figure}
|