DSU-Sideloader - A simple app made to help users easily install GSIs via DSU's Android feature

Overview

DSU Sideloader

A simple app made to help users easily install GSIs via DSU's Android feature.

preview

Requirements

  • Android 10 or higher
  • Unlocked Bootloader
  • Device with Dynamic Partitions
  • A GSI you want to use!

Community GSIs: https://github.com/phhusson/treble_experimentations/wiki/Generic-System-Image-%28GSI%29-list

Google GSIs: https://developer.android.com/topic/generic-system-image/releases

*Remember to use GSIs compatible with your architeture, vndk implementation..

You don't need root to use this app, however, running on non-rooted devices, requires adb (you will be prompted to run a shell script to invoke DSU installation activity)

Rooted devices via Magisk, should be running Magisk v24 or higher, older versions may break DSU feature.

We highly recommend using this app with Stock ROM, Custom ROMs aren't supported.

How to use?

  1. Install app

  2. When opening for the first time, you need to give read/write permission to a folder, create a new folder and allow access

    *this folder will be used to store temporary files, like extracted GSIs from compressed files)

  3. Select a GSI to install

    *accepted formats are: gz, xz and img

  4. You can customize installation as you want

    *like changing userdata size for dynamic system

    *changing gsi file size is not recommended (let app do it automatically)

  5. Tap on "Install GSI via DSU"

  6. Wait until finishes! (it may take a some time)

  7. Once it finishes, next step may vary:

    • On rooted devices, DSU screen will appear, prompting you to confirm installation, after that, check your notifications, DSU should start installing GSI
    • On non-rooted devices, you will be prompted to run a command in adb, once you run, DSU screen will appear asking you to confirm installation, after that, DSU should start installing GSI
  8. Once dynamic system is ready, you can boot it through notifications

Other information

  • DSU feature may be broken in some ROMs.
  • gsid does not let you install GSIs via DSU when you have less than 40% of free storage.
  • gsid checks if selected GSI size is multiple of 512 (preventing corrupted system images).
  • If you have disabled/debloated system apps, make sure "Dynamic System Updates" app is not disabled.
  • To use "ADB mode" on rooted device, deny root permission.

About DSU

DSU (Dynamic System Updates), is a feature introduced on Android 10, that let developers boot GSIs without touching current system partition, this is done by creating new partitions to hold a GSI and a separated userdata, to boot on them when desired.

Unfortunelly, DSU depends on Dynamic Partitions (your device need to support, otherwise, won't work), and most GSIs requires unlocked bootloader to get them booting properly (since only OEM-Signed GSIs are allowed to boot on locked bootloader).

GSIs can be installed via DSU without root access, using ADB, running some commands, you can read more about installation process here: https://developer.android.com/topic/dsu

Once installation finishes, Android creates a persistent notification allowing you to boot into "Dynamic System" (GSI installed via DSU), and you can boot into installed GSI, without touching your system partition, or breaking the "real userdata" partition.

After booting Dynamic System, you can try and test whatever you want, when you need to switch back to device's original system image, everything you need to do, is just, a simple reboot!

When doing a long test, that may requires lots of reboots, this can be a pain, however, is possible to enable "sticky mode", that enforces dynamic system, instead of device's original system image, once tests are done, you can disable sticky mode and return to original system image.

That is basically a quickly explanation about DSU, a amazing feature, like a "dual-boot" solution, limited, however, very safe (since no read-only partition will be modified, and if GSI does not boot, just a simple reboot will return you to the original device's system image).

You can read more about DSU here: https://source.android.com/devices/tech/ota/dynamic-system-updates

How to enable Sticky Mode?

Reboot to Dynamic System, and:

  • use this command on adb: adb shell gsi_tool enable
  • or from local adb shell: gsi_tool enable
  • or from local rooted shell (eg. Termux on rooted GSI): su -c 'gsi_tool enable'

When sticky mode is enabled, device will always boot into dynamic system, instead of device's original system image.

To disable, use the same command, instead of enable , use disable

Why creating this app?

Since this process can be done without any app, using adb, why creating a app to do that?

Well, to be honest, i think the same, however, having a app that can automate the "installation" process, and making DSUs more easier for end-user, would be a nice thing, also, i want to learn some kotlin, so, i've made this app!

Comments
  • App suddenly crash when click install

    App suddenly crash when click install

    The app stops working when I click on install button, no matter wich GSI Rom or compression I choose. No logs or error messages.

    For this case, I'm trying to install Google GSI for Android 12.

    My environment:

    • A Samsung Galaxy S20FE g970g/ds
    • Stock OneUi 4 (android 12)
    • Magisk 24.1
    • Device supports dynamic partitions
    • 96GB free on storage

    I created a Roms folder in my internal memory and put permissions there. After that, I picked the rom on downloads folder and let everything else by default on app, and when I click on install, the app crashes.

    I don't know how to provide more informations or logs, but let me know if there is something I can do.

    opened by outrowender 9
  • file permission errors on hisense firmware

    file permission errors on hisense firmware

    Hey all as stated in title on the hisense q5 I'm receiving some sort of a file error when trying to use this app. 3-08 16:23:35.520 11667 11669 E gsid : failed to create or open /data/gsi/dsu/userdata_gsi.img 03-08 16:23:35.520 11667 11669 E gsid : Could not create userdata image: /data/gsi/dsu/userdata_gsi.img 03-08 16:23:35.397 12192 12192 I chatty : uid=1000(system) com.hmct.eye.remind identical 12 lines 03-08 16:23:35.461 12192 12192 D EyeReminding: light can not show! 03-08 16:23:35.522 12498 12523 W System.err: java.io.IOException: Failed to start installation with requested size: 6964084736 03-08 16:23:35.523 12498 12523 W System.err: at com.android.dynsystem.InstallationAsyncTask.doInBackground(InstallationAsyncTask.java:130) 03-08 16:23:35.523 12498 12523 W System.err: at com.android.dynsystem.InstallationAsyncTask.doInBackground(InstallationAsyncTask.java:36) 03-08 16:23:35.523 12498 12523 W System.err: at android.os.AsyncTask$3.call(AsyncTask.java:378) 03-08 16:23:35.523 12498 12523 W System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266) 03-08 16:23:35.523 12498 12523 W System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) 03-08 16:23:35.523 12498 12523 W System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 03-08 16:23:35.523 12498 12523 W System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 03-08 16:23:35.523 12498 12523 W System.err: at java.lang.Thread.run(Thread.java:919) 03-08 16:23:35.523 12498 12498 D InstallationAsyncTask: onPostExecute(), URL: file:///storage/emulated/0/Download/workspace_dsuhelper/system-squeak-arm64-ab-gapps.img.gz, result: 2

    opened by J3rr1ck 6
  • "Installed failed" on Pixel 3 (blueline) unlocked bootloader

    Hi, I can't seem to install any GSIs with this app; I have the latest version of Magisk, my bootloader is unlocked, and I have tried the stock ROM as well as various different custom ROMs but they all fail to install. I even flashed vbmeta per this comment https://github.com/VegaBobo/DSU-Sideloader/issues/18#issuecomment-1146674953 and did a factory reset but the issue persists. Attached is the most recent logfile.

    Any assistance would be appreciated!

    logs.txt .

    opened by litbeep 5
  • Notification doesn't comes after running adb command

    Notification doesn't comes after running adb command

    I downloaded the GSI file and normally followed the instructions. App said to run the adb command to start installation I ran the command, A popup appeared in my phone for asking the password, I entered the password, some commands ran and nothing happened!

    Device Poco C3 (MIUI 12.0.16.0) Based on Android 10

    Thanks in Advance

    opened by Creation2283 5
  • Magisk Installation

    Magisk Installation

    Hello, how could I flash Magisk on it? After booting to recovery I flash same with main rom version (24.1) but after installation Magisk manager shows its not installed (on DSU rom) Or how could I edit system files from DSU rom?

    opened by TheArtyomMDev 4
  • Resurrection Remix OS GSI version reboots into stock recovery

    Resurrection Remix OS GSI version reboots into stock recovery

    Hello,

    I tried using a GSI version of Resurrection Remix OS (compressed gapps) with this app, didn't get an error from within the app, but rather it rebooted into stock recovery with an error at the bottom saying something about locales and Odin (which was what i used to flash Magisk onto this device). Can provide a picture if needbe.

    Device is a Samsung Galaxy Tab A7 (SM-T500) running stock Android 11 with magisk

    Is it just the GSI rom or could it be something else?

    Thanks in advance

    opened by Roshi617 3
  • Dynamic System Updates (Install Failed) on my infinix hot 11s

    Dynamic System Updates (Install Failed) on my infinix hot 11s

    Hello I am new with this, I just used your sideloader to test some gsi, but when the download of DSU start the progress move in the middle and turns into "Installation failed" is there ways to fix this?

    opened by infinixuer9323232 3
  • Activity Class does not exist

    Activity Class does not exist

    When running the latest version of the app, it all seems successful until it gets to the point of running a command through ADB. It always gives an error of Error type 3 Error: Activity class {com.android.dynsystem/com.android.dynsystem.VerificationActivity} does not exist. Despite then showing that the installation has started, no notification appears. Device is an Xperia 5 III US model running the latest android 12 update with a locked bootloader.

    opened by aliquis0001 2
  • Restart does not switch to GSI rom

    Restart does not switch to GSI rom

    I installed it to Lenovo Xiaoxin PadPro 2021. Its an Android 11 system with DSU support. The default Android 12 GSI runs fine with buildin option.

    I installed this app (non root) and installed GSI rom, but upon restart, it just restarted to original rom. The option is still there at notification bar to ask me to "discard" or "restart". Tried restart many times, all reboot back to mainos.

    opened by mcdull 2
  • License question

    License question

    Thanks for making this app available! May I ask what license you're putting it under? Without any license, it's "all rights reserved" and thus not "truly free" :wink:

    opened by IzzySoft 2
  • Is it possible to run a gsi image with an android version that's lower to the android version on my device?

    Is it possible to run a gsi image with an android version that's lower to the android version on my device?

    I have unlocked bootloader and disabled vbmeta. My device's android version is 12.1. Now I need to try a gsi which android version is lower than 12.1. But I can't boot to it after finishing installing the gsi,it will go into the bootloader. Is there any way to solve the problem?

    opened by yejunjie10311031 1
  • ADB Command Now Working - Fixed

    ADB Command Now Working - Fixed

    Given adb command in the app - adb shell ' sh "/storage/emulated/0/GSI/workspace_dsuhelper/install" '

    this gives error /system/bin/sh: sh /storage/emulated/0/GSI/workspace_dsuhelper/install : inaccessible or not found

    Removing ' worked. Command - adb shell sh "/storage/emulated/0/GSI/workspace_dsuhelper/install"

    Device Information: Samsung A52s 5G OneUI 5.0 (Android 13) API 33

    opened by theghostkill 0
  • DSU Installation failed on STG H10

    DSU Installation failed on STG H10

    I have an STG H10 (MT6737M) running Android 10 Go (ARM64 (32 Bit Mode)) trying to install LineageOS 20 a64 from Andy Yan's repo using DSUv2, my installation fails at the 60-70% mark, here are the logs.

    opened by MerGr 1
  • Invalid Partition Metadata Header Table Size

    Invalid Partition Metadata Header Table Size

    Adb logcat shows the following error. I've tried installing half a dozen GSIs with different sizes on a OnePlus Nord N20 5G. Bootloader is unlocked and the key was changed. I am using the latest DSU Sideloader version, October Security Update, Android 11. Please let me know what you think. Thank you!

    [liblp]Invalid partition metadata header table size. 11-12 19:52:11.495 10973 10976 E gsid : Could not read metadata file /metadata/gsi/dsu/dsu/lp_metadata 11-12 19:52:11.495 1901 7313 I DynamicSystemService: Failed to install userdata 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: java.io.IOException: Failed to start installation with requested size: 42949672960 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: java.io.IOException: Failed to start installation with requested size: 42949672960 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at com.android.dynsystem.InstallationAsyncTask.installUserdata(InstallationAsyncTask.java:334) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at com.android.dynsystem.InstallationAsyncTask.doInBackground(InstallationAsyncTask.java:186) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at com.android.dynsystem.InstallationAsyncTask.doInBackground(InstallationAsyncTask.java:46) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at android.os.AsyncTask$3.call(AsyncTask.java:394) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at java.util.concurrent.FutureTask.run(FutureTask.java:266) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 11-12 19:52:11.498 10567 10965 E InstallationAsyncTask: at java.lang.Thread.run(Thread.java:923) 11-12 19:52:11.501 10973 10976 E gsid : [liblp]Invalid partition metadata header table size. 11-12 19:52:11.501 10973 10976 E gsid : Could not read metadata file /metadata/gsi/dsu/dsu/lp_metadata 11-12 19:52:11.508 10567 10567 D InstallationAsyncTask: onPostExecute(), URL: file:///storage/emulated/0/dsu/workspace_dsuhelper/lineage-20.0-20221111-UNOFFICIAL-arm64_bvS.img.gz, result: 3 11-12 19:52:11.509 10567 10567 D DynSystemInstallationService: status=NOT_STARTED, cause=ERROR_IO, detail=java.io.IOException: Failed to start installation with requested size: 42949672960

    opened by oromis995 6
  • Broken User Interface

    Broken User Interface

    Add small asterisk with Select a GSI to install **accepted formats are: gz, xz, img and zip (only DSU packages)

    Or

    Check if it is a DSU Package or just a zip file with hairy

    opened by xx1182 0
  • DSU sideloader install fail

    DSU sideloader install fail

    Using OnePlus 8 pro. Before using DSU sideloader, I used the inbuilt system DSU loader to install and successfully boot googles latest gsi but as soon as I try to use the sideloader app, that fails and then even the system inbuilt loader fails too. I don't understand as it used to work just fine. V1 didn't but v2 did but not anymore. Logs attached logs.txt

    opened by SiCole180421 6
Releases(2.01)
  • 2.01(Oct 12, 2022)

    DSU Sideloader v2 is out!

    • Switched to Jetpack Compose
    • New app design (thanks for @WSTxda, he helped me a lot with some design references, and he also created the new app icon, so, thank you man!)
    • Shizuku support (installation via adb commands is still supported)
    • New operation modes (For more info, check README.md).
    • Installation progress tracking (Available in some operation modes)
    • Installation diagnostics (read logcat and warn user about common errors on DSU installation)
    • Built-in DSU installer (still experimental)
    • Updater (Check about screen)
    • Faster gz installation (Thanks to @Claudemirovsky)
    • Added simplified chinese translations (Thanks to @YuKongA and @AngelaCooljx)
    • Added portuguese (Brazil) translations (Thanks to Hitalo and Dan)
    • Lots of fixes

    For more information, check README.md, i've updated it with latest app changes!

    Attachments

    • app-release.apk: DSU Sideloader application, recommended, support both, rooted and unrooted devices.
    • module_DSU_Sideloader.zip: Magisk module, that enables DSU Sideloader's system operation mode.
    • module_DSU_Sideloader-gsid.zip: Same as Magisk module, but comes with a custom gsid binary, that may fix DSU installation in some devices.

    To know more about operation modes, i highly recommend reading README.md. TLDR: First, try to install the apk only, if that works well for you, nice, keep using it! if you have some issues with DSU installation, try to install Magisk module that includes gsid.

    Unfortunatelly, the v2 changed a lot of stuff, and all translations recieved on v1 have been discountinued, however, translations are still accepted! Feel free to translate, also, i've made a Crowdin, for those who want to translate, check it: Crowdin

    This new version should work as expected, but if you experience any issues, feel free to open a issue, you can also, downgrade to the v1 version.

    Enjoy this new version!

    Source code(tar.gz)
    Source code(zip)
    app-release.apk(6.11 MB)
    module_DSU_Sideloader-gsid.zip(4.56 MB)
    module_DSU_Sideloader.zip(2.49 MB)
  • 1.04(Oct 12, 2022)

    What's Changed

    • Doesn't crash when selected user folder is deleted
    • German translation added by @manfred-mueller in https://github.com/VegaBobo/DSU-Sideloader/pull/17
    • Speed-up a operation with GZIP and add KtLint by @Claudemirovsky in https://github.com/VegaBobo/DSU-Sideloader/pull/27

    This is the latest v1 version, we highly recommend you to migrate to DSU Sideloader v2.

    This version was build after: #27 merge, after that, newer commits belongs to version 2.

    Source code(tar.gz)
    Source code(zip)
    app-debug.apk(10.68 MB)
  • 1.03(Feb 20, 2022)

  • 1.02(Feb 19, 2022)

    DSU Sideloader 1.02

    Changelog:

    • Added Japanese translation (thanks @AndroPlus-org)
    • Support for DSU packages (zip files, for reference)
    • Various improvements (on installation script, debugging and bug fixes)

    Also, DSU Sideloader got a XDA post:

    • https://www.xda-developers.com/dsu-sideloader-boot-custom-android-gsi/

    Thanks for everyone, when i created this app, i never thought it will become so popular, so, i just want to thank you all!

    Diagnosing errors on installation process with this version:

    1. Enable "Debug installation" on app preferences
    2. Install any GSI you like
    3. After DSU installation activity has started, it should start logging!
      • on rooted devices, a new activity will start, showing logs, with a option to export them to internal storage
      • on non-rooted devices, once you run adb command, it should start logging everything to "logcat_dsu.txt" file inside internal storage
    Source code(tar.gz)
    Source code(zip)
    app-debug.apk(10.50 MB)
    app-release.apk(2.64 MB)
  • 1.01(Feb 3, 2022)

Owner
null
BindsAdapter is an Android library to help you create and maintain Adapter class easier via ksp( Kotlin Symbol Processing).

BindsAdapter BindsAdapter is an Android library to help you create and maintain Adapter class easier via ksp( Kotlin Symbol Processing). Installation

Jintin 5 Jul 30, 2022
Simple FOSS android app to help you plan and manage your savings goals easily and establish the habit of saving money.

GreenStash GreenStash is a simple FOSS android app to help you plan and manage your savings goals easily and establish the habit of saving money. ?? S

Pool-Of-Tears 112 Dec 3, 2022
LinkHub is a simple and effective link management application that can help you to easily manage your app with no ads!

LinkHub LinkHub is a simple and effective link management application that can help you to easily manage your own links with no ads! Download Screensh

Amr Hesham 71 Dec 17, 2022
Web Container: A simple web container library for Android to help fellow developer to open WebView easily

WebContainer Description Web Container is a simple web container library for And

Achmad Ichsan Thaib 8 Nov 22, 2022
Therapeutic is a platform to help easily connect patients or generally anyone struggling to get through tough times with motivating content and professional therapists.

Therapeutic Apk - https://github.com/develNerd/Therapeutic/blob/main/androidApp/release/androidApp-release6.apk Therapeutic is a Kotlin Mobile Multipl

Isaac Akakpo 1 Nov 23, 2022
Backend aio - A project made to help all newbie programmers that are approaching backend development

BackendAIO A ktor based ready to use backend BackendAIO is a project made to hel

Fabrizio Scarponi 4 Feb 1, 2022
FragmentContainerViewIdBugDemo - minimal repro project demonstrating a bug in FragmentContainerView's id check logic in the context of a dynamic feature module

FragmentContainerViewIdBugDemo minimal reproduce project demonstrating an apparent bug in FragmentContainerView's id check logic in the context of a d

null 0 Jan 5, 2022
A simple tool used to check the users you follow that do not follow you back.

instafbchecker - Instagram no life guide Current Release: v1.0.1 (30/08/2022) A command line tool used to check which users dont follow you back on In

Nathan 2 Aug 30, 2022
Example project for using the Selenium toolkit with Kotlin, Maven, TestNg and the config is managed via a property file.

Selenium-Java-Toolkit-TestNg-Playground This is the sample-Project and show you how to use the Selenium-Toolkit. The Selenium-Toolkit is a Java based

Selenium Consulting 0 Dec 15, 2021
Demo Spting REST Service on Kotlin. Works with PostgreSQL via Spring Data. Data initialization provided by liquibase

Spring Boot REST API with Kotlin Spring Boot REST API service. Spring Data with PostgreSQL. Data initialization with Liquibase. Swagger UI Reference D

null 0 Jun 10, 2022
A deep learning based mobile application for the multi-class classification of pneumonia into three categories via Chest X-rays

PneumoniaClassifier A deep learning based mobile application for the multi-class classification of pneumonia into three categories via Chest X-rays. W

Timilehin Aregbesola 2 Dec 15, 2021
A very simple Android app which shows you random memes with the help of meme-api which you can share with your friends!

Meme Share A very simple Android app which shows you random memes with the help of meme-api which you can share with your friends! Tech stack 100% wri

Stɑrry Shivɑm 8 Aug 10, 2022
This prototype app provides a list of events to be held under an organization (school, college, club, etc.) and the users can manually set event reminders at their scheduled time so that they do not miss an event.

E-CELL NITS Sample App This prototype app provides a list of events to be held under E-Cell NIT Silchar (for example, Srijan 2.0) and the users can ma

Ritam Nath 1 Nov 7, 2021
The app features real-time chatting between different users on daily topics

DailyDiscuss The app features real-time chatting between different users on daily topics. The app comes with 2 types of user interface: Admin who crea

null 1 Dec 20, 2021
Github User App for searching Github Users and get several information from it.

GithubUserApp Github User App for searching Github Users and get several information from it. This code implement with Coroutines, Retrofit, Architect

Wahyu Hendiarto W. 0 Apr 16, 2022
Simple App made for a test to Studio Sol Company

Studio Sol Test - Guess the Number Simple App made for a test to Studio Sol Company. #What you'll see in this project: ViewBinding Navigation Animatio

Philippe Muniz 1 Nov 19, 2021
A simple ToDo Task Manager App made in Kotlin using Room DataBase.

ToDo List App ?? About A simple To-Do List Management App that helps you get things done. Built with Kotlin, it helps the user to add their task. User

Tanya Gupta 17 Dec 12, 2022
ABCTingle is a simple app that i made over the weekend. Clicking each alphabets from letter 'A' to 'Z' plays the tranditional ABC song

I made ABCTingle over the weekend just for fun. Clicking each alphabets from letter A to Z plays the tranditional ABC song. I'm sure kids would enjoy their day with this app.

Gana Ebenezer 2 Feb 21, 2022