Run all your Linux graphical apps on Android πŸ’–βœ¨βœ¨βœ¨

Related tags

Mobile waylovely
Overview

Waylovely

Run all your Linux graphical apps on Android πŸ’– ✨ ✨ ✨

The Android windowing system is different than those in desktop operating systems. In the desktop, windowing systems allow applications to open as much windows as the hardware able to run. However this is not the case in Android!! Android is intended to be oriented towards mobile devices, which has less powerful hardware than desktops, so it will do things like only allowing an app to get one EGLSurface!!

This makes porting windowing toolkits (and UI toolkits too!) to Android a bit difficult, most windowing toolkits like GLFW or GDK are built around the idea of having multiple. Not only that, but for GDK in particular, the developers are quite too short-handed to work on things that aren't prioritized, so obviously maintaining yet another GDK backend would be troublesome!!

Waylovely attempts to bridge the gap between Android and Linux applications by bringing interfaces found in desktop Linux systems, packaged as an Android app!!

Development

The development is splitted up in different repositories!!

  • Smithay - The Waylovely Project contributes a backend in Smithay for use in Android applications!! Here is our PR!
  • xdg-desktop-portal-android - Xdg Desktop Portal implementation for Android. This is also useful for SDL-based applications!! SDL actually can render without the need of a Wayland compositor but the app might depend on Portals.
  • simple-and-kawaii - A custom build system for boostrapping a large chunk of dependencies!! Not a package manager.
  • waylovely-build - A repository of libraries needed by Waylovely and friends!!

Related Things

AOSP backend for Weston - Pekka Paalanen

Back in 2012-2013, Collabora's Pekka Paalanen was working to have a fork of AOSP that uses Wayland as its display server!! However since there aren't any work anymore on that, it was removed a few months later.

I wonder if I should explore the mythical lands of getting Wayland inside of today's AOSP, but I think that's not the MVP requirement!

Why Wayland on Android is a hard problem - Jason Ekstrand

Jason Ekstrand is a developer for libhydris, a library used by "Linux on mobile phones" projects to have a great support for Android OEMs!! In this article, he lays out the technical differences between the windowing systems and EGL support in Android and Wayland, and why it's quite hard to make them talk to each other nicely, I feel in particular, actually making Wayland clients talk to Android with some compatibility layers (akin to DXVK or MetalVK)!!

Why Wayland on Android is a hard problem - Jason Ekstrand

Comments
  • Bionic-linked dependencies

    Bionic-linked dependencies

    Soo, in order for us to actually have a working apk, we would need to get FFI dependencies that are linked to the Bionic libc instead of glibc 😊

    Soo our options are:

    • Build and patch FFI dependencies on the Bionic libc
    • Orr get pre-built binaries of them!! 😊
    opened by fianathedevgirl 4
  • Tracking for the Xdp portals implementation!

    Tracking for the Xdp portals implementation!

    • [ ] org.freedesktop.portal.Account β€” Portal for obtaining information about the user
    • [ ] org.freedesktop.portal.Background β€” Portal for requesting autostart and background activity
    • [ ] org.freedesktop.portal.Camera β€” Camera portal
    • [ ] org.freedesktop.portal.Device β€” Portal for device access
    • [ ] org.freedesktop.portal.Documents β€” Document portal
    • [ ] org.freedesktop.portal.DynamicLauncher β€” Portal for installing application launchers
    • [ ] #10
    • [ ] org.freedesktop.portal.FileChooser β€” File chooser portal
      • [ ] OpenFile
      • [ ] OpenFolder
    • [ ] org.freedesktop.portal.FileTransfer β€” Portal for transferring files between apps
    • [ ] org.freedesktop.portal.Flatpak.UpdateMonitor
    • [ ] org.freedesktop.portal.Flatpak β€” Flatpak portal
    • [ ] org.freedesktop.portal.GameMode β€” Portal for accessing GameMode
    • [ ] org.freedesktop.portal.Inhibit β€” Portal for inhibiting session transitions
    • [ ] org.freedesktop.portal.Location β€” Portal for obtaining information about the location
    • [ ] org.freedesktop.portal.MemoryMonitor β€” Memory monitoring portal
    • [ ] org.freedesktop.portal.NetworkMonitor β€” Network monitoring portal
    • [ ] org.freedesktop.portal.Notification β€” Portal for sending notifications
    • [x] org.freedesktop.portal.OpenURI β€” Portal for opening URIs
    • [ ] org.freedesktop.portal.PowerProfileMonitor β€” Power Profile monitoring portal
    • [ ] org.freedesktop.portal.Print β€” Portal for printing
    • [ ] org.freedesktop.portal.ProxyResolver β€” Proxy information
    • [ ] org.freedesktop.portal.Realtime β€” Portal for setting threads to realtime
    • [ ] org.freedesktop.portal.RemoteDesktop β€” Remote desktop portal
    • [ ] org.freedesktop.portal.Request β€” Shared request interface
    • [ ] org.freedesktop.portal.ScreenCast β€” Screen cast portal
    • [ ] org.freedesktop.portal.Screenshot β€” Portal for taking screenshots
    • [ ] #8
    • [ ] org.freedesktop.portal.Session β€” Shared session interface
    • [ ] org.freedesktop.portal.Settings β€” Settings interface
    • [ ] org.freedesktop.portal.Trash β€” Portal for trashing files
    • [ ] org.freedesktop.portal.Wallpaper β€” Portal for setting the desktop's Wallpaper
    opened by fianathedevgirl 0
  • org.freedesktop.impl.portal.Secret implementation:  Portal for retrieving application secret

    org.freedesktop.impl.portal.Secret implementation: Portal for retrieving application secret

    This is perhaps the hardest Portal to implement!!

    There are some Rust crates that we could get some inspirations from https://crates.io/crates/oo7

    I wonder how to map this to Android SDK.

    opened by fianathedevgirl 0
  • portals: org.freedesktop.impl.portal.Settings implementation

    portals: org.freedesktop.impl.portal.Settings implementation

    We can get the color-scheme key from Configuration#uiMode! We can get Configuration from Resources#getConfiguration from Application#getResources!!

    int currentNightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK;
    switch (currentNightMode) {
        case Configuration.UI_MODE_NIGHT_NO:
            // Night mode is not active, we're using the light theme
            break;
        case Configuration.UI_MODE_NIGHT_YES:
            // Night mode is active, we're using dark theme
            break;
    }
    
    opened by fianathedevgirl 0
  • End game tracking

    End game tracking

    Hii ^^

    This is the lovely end-game tracking issue for Waylovely. 😊

    Here's a lovely progress report/devblog thread! https://twitter.com/lovelyy_fiaa/status/1537964829444820993

    • [x] Make Anvil and Smithay pass cargo check on x86_64-linux-android
      • [x] Disable non-winit backends
      • [x] Switch to an alternative of memfd, since it's not available on Bionic libc (done by 9d41e3b94d707d0c5b234bd650eee234d403b0d5)
      • [x] Implement the backend for Android (done by e4bfc4fa8d3ea3b2785d857450a73871d73ef6d2)
    • [x] Implement packaging
      • [x] waylovely-project/waylovely#2
      • [x] Package them in an Apk!
    • [x] Running Waylovely on real Android device

    Issues we encounter during QA:

    • [x] Xkbcommon needs the lovely X11 folder path
      • [x] pass $cache/x11 to the configuration
      • Copy the x11 resources from the APK to the cache folder at first run
      • [ ] Create a good bindings library for the SDK to do that!! See waylovely-project/arabica

    Then we can ship a Proof of Concept app with the GTK and Libadwaita demo! Then we need to make this production ready! The tracking are:

    • [x] Make the compositor a library that can be shared by apps! (since Waylovely and its dependencies should be quite big ☺️)
    • [ ] Perhaps make an app that allows people to install apps from Flatpak? Soo the idea is that with this, people can run desktop apps in Android "natively"!
    opened by fianathedevgirl 0
Owner
Waylovely Project
Waylovely Project
Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and battery life of your device.

Universal Android Debloater GUI DISCLAIMER: Use it at your own risk. I am not responsible for anything that could happen to your phone. This software

w1nst0n 7k Jan 7, 2023
Glue between Rust and Android

deprecated in favor of https://github.com/rust-windowing/android-ndk-rs which works with winit master Android Glue Usage With Docker The easiest way t

Rust Windowing 898 Dec 15, 2022
Android / iOS app with shared Rust logic

Rust core for native Android and iOS apps [TODO iOS badge] This is an example that shows how to use a shared Rust core in native Android and iOS apps.

Ivan SchΓΌtz 193 Dec 5, 2022
Android-related tools for building and developing applications πŸ› 

Rust Android Tools Android-related tools for building and developing applications: Name Description Status aapt2 Android Asset Packaging Tool βœ… bundle

DodoRare 6 Dec 31, 2022
android-pathfinding

android-pathfinding Android pathfinding dependencies { implementation 'com.github.planet0104:android-pathfinding:1.0.0' } int[][] grid = new i

Jia Ye 1 Dec 17, 2021
πŸ€–πŸ¦€ A rust native replacement for Android's `sdkmanager`

???? A rust native replacement for Android's `sdkmanager`

Traverse Research 13 Dec 13, 2022
Android resource file parsing & writing

arsc arsc is a Rust library that provides the ability to parse and write Android resource file (arsc) [dependencies] arsc = "0.1" Compiler support: ru

Yaxin Cheng 7 Dec 25, 2022
An Android application for ruffle.rs

This is a native Android application for Ruffle. It is in a very early stage. Prebuilt APKs The latest (successful) Actions run (here) should have a d

TΓ–RΓ–K Attila 28 Dec 21, 2022
Android / iOS app with shared Rust logic

Rust core for native Android and iOS apps [TODO iOS badge] This is an example that shows how to use a shared Rust core in native Android and iOS apps.

null 193 Dec 5, 2022
Tokio based client library for the Android Debug Bridge (adb) based on mozdevice

forensic-adb Tokio based client library for the Android Debug Bridge (adb) based on mozdevice for Rust. Documentation This code has been extracted fro

null 6 Mar 31, 2023
Advanced Fuzzing Library - Slot your Fuzzer together in Rust! Scales across cores and machines. For Windows, Android, MacOS, Linux, no_std, ...

LibAFL, the fuzzer library. Advanced Fuzzing Library - Slot your own fuzzers together and extend their features using Rust. LibAFL is written and main

Advanced Fuzzing League ++ 1.2k Dec 29, 2022
Advanced Fuzzing Library - Slot your Fuzzer together in Rust! Scales across cores and machines. For Windows, Android, MacOS, Linux, no_std, ...

LibAFL, the fuzzer library. Advanced Fuzzing Library - Slot your own fuzzers together and extend their features using Rust. LibAFL is written and main

Advanced Fuzzing League ++ 1.2k Jan 6, 2023
Scan the symbols of all ELF binaries in all Arch Linux packages for usage of malloc_usable_size

Scan the symbols of all ELF binaries in all Arch Linux packages for usage of malloc_usable_size (-D_FORTIFY_SOURCE=3 compatibility)

null 3 Sep 9, 2023
Android Device Pool - A tool to run device tests against a pool of devices.

adp (Android Device Pool) What is this? A tool to run device tests against a pool of devices. It will 'checkout' a device to run your tests against an

Evan Tatarka 1 Oct 21, 2021
Rust implementation of NearbyShare/QuickShare from Android for Linux.

rquickshare NearbyShare/QuickShare for Linux (WIP) How to use rquickshare offers two options for using its file sharing capabilities: command line (CM

Martin AndrΓ© 3 Feb 28, 2024
Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and battery life of your device.

Universal Android Debloater GUI DISCLAIMER: Use it at your own risk. I am not responsible for anything that could happen to your phone. This software

w1nst0n 7k Jan 7, 2023
Helps cargo build and run apps for iOS

cargo-xcodebuild Helps cargo build and run apps for iOS. ?? βš™οΈ ?? Setup You need to install Xcode (NOT just Command Line Tools!), xcodegen, cargo-xcod

Igor Shaposhnik 29 Nov 22, 2022
Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json file and discord webhook.

minecraft-honeypot Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json f

Cleo 19 Jan 4, 2023
Bongo Copy Cat wants to be involved in everything you do but instead just imitates you hitting your keyboard all day. After all it's just a cat.

Bongo Copy Cat Introduction Bongo Copy Cat wants to be involved in everything you do but instead just imitates you hitting your keyboard all day. Afte

Abhijeet Singh 4 Jan 23, 2023
Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transactions of your non-custodial wallets on a provider of your choice, all while respecting your privacy

Bitcoin Push Notification Service (BPNS) Description Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transacti

BPNS 1 May 2, 2022