yashsingh1/xdaforums huggingface dataset:
[Android Software Development] sdeft:
[MENTION=4544860]osm0sis[/MENTION]

I am trying to unpack and repack a recovery image but when repacking it the size is half the original one.

Tried to repack with ./repackimg.sh --original --level0 but I get the same. Do I have to specify some other parameter when repacking ?
[Android Software Development] ashyx:
Pleas read the thread before posting. It has been repeated countless times the possible reason for this.

If your recovery image is pulled from the device then it will contain padding which is removed when repacking. Perfectly normal.
[Android Software Development] sdeft:
I was not asking whether this was normal or not but rather whether I can repack the img as per original size.
[Android Software Development] osm0sis:
You can pad it back to full partition size again using the truncate Linux command line utility. I'll add an optional feature to AIK for the next version to automate this, since I am told some bootloaders don't wipe with fastboot flash and then don't boot unless the rest of the partition is properly zeroed.
[Android Software Development] sdeft:
Would be nice to have this in AIK.

So it is as simple as below then, correct ?

truncate -s 67108864 image-new.img
[Android Software Development] mss020:
i have a boot image which has both dhtb and also avb1 or 2 don't know which one it's 256 bytes long. (btw the dhtb sha256sum is in footer)

looks like the tool only checks if there's one signature in my case only dhtb magic.

is it possible to make it check more than one signature.

energizer 241s basic phone
[Android Software Development] osm0sis:
The 256 byte one is Samsung's and there's no way to re-sign since it's impossible to reverse-engineer, so we can only do the DHTB header signature and the SEANDROIDENFORCE tag, both of which get handled at repack by my dhtbsign tool.
[Android Software Development] mss020:
thank you for the fast response

I'm new here but this is an Energizer phone not a samsung and i beleive they use test-keys.

note the dhtb sha256 is from block 0xA4134C to 0xA4136B unlike all other dhtb which are in header, whilst the part of dhtb amount of bytes is shown twice in 0x300 and 0xA412100 (or with 240 0xa41228)

the 256 bytes which looks to me like avb is from 0xA4136c 0xA41493

thank you very much
[Android Software Development] osm0sis:
Is that the stock boot.img? It looks like the old fake DHTB header people used before I developed my dhtbsign tool, since there's no payload sha256sum checksum. Then there's another chunk of data on the end, which, you're right does appear somewhat similar to AVBv1 at first glance since it's got the partition name "/boot" in it, but then it doesn't have any of the other AVBv1 signing data (signer name, company, address, etc.), leading me to believe it's some other custom signing tool.

The usual advice is to try copying that chunk of data over to the repacked image-new.img whole. Since you don't need the SEANDROIDENFORCE string that usually accompanies the DHTB header, just replace it with the data from the original.
[Android Software Development] jahidinbedod:
sir if just remove "-Xnodex2oat" on repackimg.sh still failed for signing .img, because core-oj.jar, core-libart.jar, etc this file not find in /system/framework/

but this .jar file in /apex

then I tried change "dalvikvm -Xbootclasspath:/system/framework/core-oj.jar:/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/bouncycastle.jar -Xnodex2oat -Xnoimage-dex2oat"

to :

"dalvikvm -Xbootclasspath:/apex/com.android.runtime/javalib/apache-xml.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.runtime/javalib/bouncycastle.jar -Xnoimage-dex2oat"

and I see this works for signing .img on A10

Idk if different devices

but i'm still here for wait new AIK mobile fully working on A10 :)
[Android Software Development] osm0sis:
You must be running it in recovery? BOOTCLASSPATH on booted Android 10 is set automatically with all needed jars:

:/ $ set
ANDROID_ASSETS=/system/app
ANDROID_BOOTLOGO=1
ANDROID_DATA=/data
ANDROID_ROOT=/system
ANDROID_RUNTIME_ROOT=/apex/com.android.runtime
ANDROID_SOCKET_usap_pool_secondary=21
ANDROID_SOCKET_zygote_secondary=20
ANDROID_STORAGE=/storage
ANDROID_TZDATA_ROOT=/apex/com.android.tzdata
ASEC_MOUNTPOINT=/mnt/asec
BASHPID=28582
BOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/qcnvitems.jar:/system/framework/oneplus_sdk_utils.jar:/system/framework/oneplus_sdk_wrapper.jar:/system/framework/oneplus-framework.jar:/system/framework/QPerformance.jar:/system/framework/UxPerformance.jar:/system/framework/WfdCommon.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar
COLUMNS
DEX2OATBOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/qcnvitems.jar:/system/framework/oneplus_sdk_utils.jar:/system/framework/oneplus_sdk_wrapper.jar:/system/framework/oneplus-framework.jar:/system/framework/QPerformance.jar:/system/framework/UxPerformance.jar:/system/framework/WfdCommon.jar
DOWNLOAD_CACHE=/data/cache
EPOCHREALTIME=1580217481.330474
EXTERNAL_STORAGE=/sdcard
HOME=/data/user/0/jackpal.androidterm/app_HOME
IFS=$' \t\n'
KSHEGID=10323
KSHGID=10323
KSHUID=10323
KSH_VERSION='@(#)MIRBSD KSH R57 2019/03/01 Android'
LINES
OPTIND=1
PATH=/sbin:/system/sbin:/product/bin:/apex/com.android.runtime/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin
PATHSEP=:
PGRP=28582
PIPESTATUS[0]=1
PPID=28548
PS1=$'${|\n\tlocal e=$?\n\n\t(( e )) && REPLY+="$e|"\n\n\treturn $e\n}$HOSTNAME:${PWD:-?} $ '
PS2='> '
PS3='#? '
PS4='[$EPOCHREALTIME] '
PWD=/
RANDOM=4580
SECONDS=2
SHELL
SYSTEMSERVERCLASSPATH=/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar:/system/framework/com.android.location.provider.jar:/system/framework/oneplus-services.jar:/system/framework/oneplus-coreservices.jar
TERM=screen
TMOUT=0
USER_ID=10323
_=set
:/ $
[Android Software Development] jahidinbedod:
Idk with it sir, i'm just running on terminal like on pie

my device op5 with custom rom A10

:/ $ set
ANDROID_ASSETS=/system/app
ANDROID_BOOTLOGO=1
ANDROID_CACHE=/cache
ANDROID_DATA=/data
ANDROID_ROOT=/system
ANDROID_RUNTIME_ROOT=/apex/com.android.runtime
ANDROID_SOCKET_usap_pool_secondary=20
ANDROID_SOCKET_zygote_secondary=19
ANDROID_STORAGE=/storage
ANDROID_TZDATA_ROOT=/apex/com.android.tzdata
ASEC_MOUNTPOINT=/mnt/asec
BASHPID=25046
BOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/system/framework/org.ifaa.android.manager.jar:/system/framework/ims-ext-common_system.jar:/system/framework/telephony-ext.jar:/system/framework/WfdCommon.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar
COLUMNS
DEX2OATBOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/system/framework/org.ifaa.android.manager.jar:/system/framework/ims-ext-common_system.jar:/system/framework/telephony-ext.jar:/system/framework/WfdCommon.jar
DOWNLOAD_CACHE=/data/cache
EPOCHREALTIME=1580219230.400775
EXTERNAL_STORAGE=/sdcard
HOME=/data/user/0/jackpal.androidterm/app_HOME
IFS=$' \t\n'
KSHEGID=10187
KSHGID=10187
KSHUID=10187
KSH_VERSION='@(#)MIRBSD KSH R57 2019/03/01 Android'
LINES
OPTIND=1
PATH=/sbin:/apex/com.android.runtime/bin:/system/bin:/system/xbin:/vendor/bin:/vendor/xbin
PATHSEP=:
PGRP=25046
PIPESTATUS[0]=1
PPID=25018
PS1=$'${|\n\tlocal e=$?\n\n\t(( e )) && REPLY+="$e|"\n\n\treturn $e\n}$HOSTNAME:${PWD:-?} $ '
PS2='> '
PS3='#? '
PS4='[$EPOCHREALTIME] '
PWD=/
RANDOM=3597
SECONDS=3
SHELL
SYSTEMSERVERCLASSPATH=/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar:/system/framework/com.android.location.provider.jar
TERM=xterm-256color
TERMINFO=/system/etc/terminfo
TMOUT=0
USER_ID=10187
_=set
:/ $
[Android Software Development] ciki777:
Thanks for sharing the good tool.

I have a one question.

When I tried to unpack with A10's boot.img, I see the done message. But there was no init.rc and /sbin folder. just only init file and some folder. even if I used well on PIE.

What did I do wrong?

Android Image Kitchen - UnpackImg Script

by osm0sis @ xda-developers

Supplied image: boot.img

Setting up work folders . . .

Image type: AOSP

Footer with "SEAndroid" type detected.

Splitting image to "split_img/" . . .

BOARD_KERNEL_CMDLINE console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x3F androidboot.bootdevice=msm_sdcc.1 androidboot.selinux=permissive buildvariant=userdebug

BOARD_KERNEL_BASE 00000000

BOARD_NAME

BOARD_PAGE_SIZE 2048

BOARD_HASH_TYPE sha1

BOARD_KERNEL_OFFSET 00008000

BOARD_RAMDISK_OFFSET 02900000

BOARD_SECOND_OFFSET 00f00000

BOARD_TAGS_OFFSET 02700000

BOARD_OS_VERSION 10.0.0

BOARD_OS_PATCH_LEVEL 2020-01

BOARD_DT_SIZE 1058816

Unpacking ramdisk to "ramdisk/" . . .

Compression used: gzip

3413 blocks
[Android Software Development] osm0sis:
Nothing. Sounds like your device is either A-only Legacy-SAR, so no ramdisk in boot.img by default, and then when rooted by Magisk created a simple one with init and /.backup, or, A-only 2SI-SAR with a simple ramdisk that just then loads the system partition ones.

2SI (2-stage init) is Google's current spec recommendation for SAR (system-as-root), and some kind of SAR is needed for Android 10, so people will need to get used to this.
[Android Software Development] GabrielSousa:
error on signing nexus 6p kernel

how can i fix this ?

EDIT:

my bad, new computer forgot to install the java :D
[Android Software Development] Vyrrus2k9:
how do I install the mobile version without flashing the zip? armv7, android 4.2.2
[Android Software Development] osm0sis:
No recovery? You could flash it in Magisk, FlashFire or FKM even.
[Android Software Development] Vyrrus2k9:
Thanks for the quick response. I meant could I do it manually without flashing AT ALL. Like just copy the binaries, etc. To their proper directories. I do have Xposed installed, but I haven't tried to see if magisk or flashfire will work on it. It's some cheap Chinese tablet(rooted). I will try to install one of those but would still like to know if I could manually install it without flashing.
[Android Software Development] osm0sis:
Yeah you could. Copy the data/local/AIK-mobile directory from the zip to /data/local then unpack the bin/*.tar.xz for your device's architecture to /data/local/AIK-mobile/bin then finally run /data/local/AIK-mobile/bin/aik --restore if you want it to add the helper aik script to your device.

Same goes for Fla****, but less complicated since it doesn't have bin/*.tar.xz to contend with.
[Android Software Development] Vyrrus2k9:
Thanks! Will do.
[Android Software Development] Vyrrus2k9:
Any idea why it can't see the boot.img when it's clearly in the directory?
[Android Software Development] osm0sis:
All those not found errors suggest your device's shell is severely limited and missing basic functionality (dirname and readlink are pretty fundamental). You should install busybox.

You also shouldn't need to run it through sh once permissions have been set, ./unpackimg.sh should work, and when you've run the aik shortcut first then they will also be on the path so even just unpackimg.sh will work.
[Android Software Development] Spaceminer:
Use Termux and you won't have any problems. You can find it on fdroid. Android Terminal Emulator is very outdated.
[Android Software Development] Vyrrus2k9:
Unfortunately the tablet has Jelly Bean 4.2.2 so I can't use Termux. Thanks though.

Edit; on the trail of a down-port copy now. Thanks again.
[Android Software Development] Spaceminer:
In that case I would try installing busybox like osm0sis suggested. (Install it to /xbin or /bin, not /sbin.)
[Android Software Development] twinnfamous:
Works great on HD1925

Just stopped by to confirm aik mobile works great on OnePlus 7t pro 5G McLaren.
[Android Software Development] rcmpayne:
So I have been using AIK on Linux for a while now but the mods I've been doing seem to work on Nexus 5x but not a Pixel 2. On a 5x (Android 8 and 8.1) I've been unpacking the boot.img, adding some setprop commands to get adb and some additional logging in OOBE. This is not working with a Pixel 2 and I can't figure out why.

1. Unpack the boot.img

2. Add the below changes

3. Repack the boot.img

4. Load the boot image alone and or with a factory firmware flash-all.bat

fastboot flash boot <MOdded_boot.img>

5. Boot the Pixel 2 to OOBE

6. abd is not working

7. Skip OOBE and enable developer mode and run adb shell getprop and the additional items are not listed.

This works for Nexus 5x at 8.1.0 bit not a Pixel 2 @ 8.1.0, 9 or 10

```

Ensure default.prop

ro.secure=1

ro.adb.secure=1

ro.debuggable=0

persist.sys.usb.config=mtp,adb

Ensure Init.rc

# Disable adb security

setprop ro.adb.secure 1

#Optional Items to add to default.prop

persist.logd.size=1048576

log.tag.dpcsupport=VERBOSE

log.tag.Auth=VERBOSE

```
[Android Software Development] JRJ442:
[MENTION=4544860]osm0sis[/MENTION] I mentioned you in a thread asking about if it was possible to de-loki a TWRP img so it may split properly. Maybe he'll know something. Its here if ya wanna keep an eye on it. http://xdaforums.com/showthread.php?t=2469995
[Android Software Development] hanzoo1504:
Not build CWM. Fail one
[Android Software Development] osm0sis:
As I told you in PM, this tool does not build CWM for you if it doesn't already exist for your device. That's not what it's for.
[Android Software Development] DoctorQMM:
[MENTION=4544860]osm0sis[/MENTION]: thanks for this tool. I successfully repacked my TWRP v2631 recovery.img with a custom TWRP curtain, and reflashed recovery partition on phone... all working perfectly. You can add "Samsung Galaxy Note 2 [ATT-I317]" to your list of "Known Working Devices" list in Post #2.
[Android Software Development] anko184:
Thanks osmOsis, great tool.. Worked like charm!!!
[Android Software Development] xenix96:
Thanks [MENTION=4544860]osm0sis[/MENTION] :good:

Please add the Samsung Galaxy S4 LTE+ GT-I9506 to "Known Working Devices"

I successfully unpacked - modified - repacked - flashed the recovery.img with your tool!

Question: you do later a Linux version of your great tool too ?

Cheers :)
[Android Software Development] osm0sis:
Interesting suggestion, but there are at least 10 other Linux/PERL split_img and ramdisk repack script packages and tutorials already out there, a few of which are where I originally got the methods. Windows had nothing of the kind which is why I put this together.

Also people running Linux are generally able to figure this stuff out for themselves, but yeah, I might once I get a Linux box running; it's pretty far down on my to-do list though. ;)
[Android Software Development] Codename13:
This tool works great for the Samsung Galaxy Ace II X (GT-S7560M). I'd have been still trying to figure out how to repack a boot.img together if it wasn't for this, so thank you.
[Android Software Development] ars0n:
Alright VS980 owners I have not forgotten about you!!

MR Os,

Just tried something, going to flash in a few and see if it works. But details below -

Wootever created a flashable zip for the TWRP 2.6.3.4 http://xdaforums.com/showthread.php?t=2469995

This zip has a loki patcher in it, meaning, it doesnt actually loki the image until AFTER you run it in recovery.

I just downloaded the above link for VS980 twrp 2.6.3.4 and was able to decompile it with your newest update and everything extracted correctly.

I am going to make my edits and see if I can implement the recovery image back into the zip and reflash..

My idea -

You should already have TWRP 2.6.3.3 installed, then flash the themed image of 2.6.3.4 that I am going to make or that you edit from WOOTEVERS recovery images.

Going to cross my fingers and see if it works. Will post up shortly. Worst that could happen is that I would need to reflash recovery 2.6.3.2 like I did when I first got phone then reflash the unmodified WOOTEVER twrp zip. So make sure to keep both copies of the update on your phone =D..
[Android Software Development] JRJ442:
Curious. I tried this already with Wootever's zip. I was gonna port over the custom curtains I made in the VZW S3 themes and apps forum. The new zip failed to flash. I only tried once and I could've borked something on my own when I rezipped it. Post results please. :)
[Android Software Development] ars0n:
IT WORKS!!!!!!!!!!!!!!!!!!!!!!

Make sure to use 7zip when extracting and readding the recovery image!
[Android Software Development] JRJ442:
Were you on the official TWRP first then flashed your modified Wootever zip? I think I may have been already on Wootevers then flashed the modified one. That may have been why it failed. Not sure. I think I'm gonna wait til the tool can work with official Loki'd img's first before I make any releases.
[Android Software Development] ars0n:
I was already on the wootever update and flashed it right ontop.
[Android Software Development] osm0sis:
Nice! Good to hear you guys have at least figured out a workaround for the Loki problem. As I said, the Loki package provided by the original author recommends the zip flashing method, so I don't know why we're getting all these pre-loki'd images floating around. :good:
[Android Software Development] JRJ442:
Hmmm. I'll try again this weekend with it and see if it'll work. I may have just messed something up
[Android Software Development] ars0n:
Hella, lemme know! Ill try to help where I can!
[Android Software Development] osm0sis:
Conversation from PM:

Well yes, the only way to add a feature to a kernel is to recompile, but without having it specific to your device I wouldn't try.

Hold on though, I tried your boot.img and it does NOT extract the ramdisk, so you were mistaken there. In fact my tool specifically says "Error!" when it tries. Looking at the image in a hex editor there is something stupid they did to the standard where they basically put "labels" on each section. So when it goes to extract the kernel the first thing in that section is "ˆ.ˆXX–..KERNEL.." and for ramdisk it's "ˆ.ˆX°?..ROOTFS.." which is retarded and keeps anything from detecting the compression used or extracting it. It's POSSIBLE to do it but you'd need to do it manually.

Looking into it a bit more by chopping out the stupid header I extracted the ramdisk and found it's a MT6620 device. A5ENZE from ALPS (HTC One clone) he tells me, which is actually MT6575. Apparently MTK has their own special splitter tool which is required for it. Deviates too much from the standard. Case closed. ;)

Edit: Apparently this is also the way the Qmobile Noir A7 images are packed, as found here. Not sure why manufacturers would choose to break the standard this way.. It's minor in a sense, yet a huge pain in the ass to workaround. :confused:

Here's a custom tool for devices like these:
[Android Software Development] jeboo:
I saw some posts mentioning the need for de-loki'ing an image. I've done this on occasion, usually to extract the ramdisk. You can do it crudely with a hex editor by copying the following dwords (source offset to destination offset) from the loki_hdr to the android_hdr:

1. 0x488 to 0x8

2. 0x48c to 0x10

3. fixed value 0x82200000 to 0x14 (this value is what I saw in all S4 vzw/att boot.imgs..I have no idea about other manufacturers/carriers).

This will fix up the header so you can dump the kernel/ramdisk without any issues. I wrote up a quick and dirty c program to do it. Takes the .lok as the parameter and spits out a boot.img.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "loki.h"

int main(int argc, char *argv[])
{
FILE *fd, *fo;
char buffer[0x494], ch;

if (argc < 2) {
exit(0);
}

fd = fopen(argv[1], "r+");

if (fd)
{
int n = fread(buffer, 0x494, 1, fd);
if(strncmp("LOKI", (char *)&buffer[0x400], 4))
{
printf("Not Loki'd.\n");
}

struct boot_img_hdr *hdr;
struct loki_hdr *loki_hdr;

hdr = (void *)buffer;
loki_hdr = (void *)buffer + 0x400;

printf("Original kernel size: 0x%08x\n", loki_hdr->orig_kernel_size);
printf("Original ramdisk size: 0x%08x\n", loki_hdr->orig_ramdisk_size);
printf("Original ramdisk address: 0x%x\n", hdr->kernel_addr+0x01ff8000);

hdr->kernel_size = loki_hdr->orig_kernel_size;
hdr->ramdisk_size = loki_hdr->orig_ramdisk_size;
hdr->ramdisk_addr = hdr->kernel_addr + 0x01ff8000;

printf("\nCreating boot.img.\n");
fo = fopen("boot.img", "w");

fwrite((void *)buffer, 1, 0x494, fo);

fseek(fd, 0, SEEK_END);
int size = ftell(fd);
fseek(fd, 0x494, SEEK_SET);

for (int i = size - 0x494; i--; i)
{
ch = fgetc(fd);
fputc(ch, fo);
}

fclose(fo);
fclose(fd);

printf("Done.\n");
}

exit(1);
}
[Android Software Development] hanzoo1504:
how to port philz recovery

How to port philz recovery ?
[Android Software Development] osm0sis:
For the last time, that's not what this tool, nor thread are for.
[Android Software Development] osm0sis:
Pixel 2 is system-as-root (SAR) and boot-as-recovery, so the changes you make to its ramdisk are actually in the recovery ramdisk. You'll find something similar with the Nexus 5X Android 10 ROMs, where there's only a 2SI SAR A-only boot ramdisk, so nothing there to be changed at all.
[Android Software Development] rcmpayne:
So are you saying that don't have any options to enable adb on boot or in OOBE?
[Android Software Development] osm0sis:
You can change them in the system partition, that's what system-as-root means.
[Android Software Development] rcmpayne:
So that means i need to look at using "SuperR's Kitchen" to alter the system image correct?
[Android Software Development] osm0sis:
Or just mount system r/w in recovery and change the files yourself. Should work fine for older devices like yours. :good:
[Android Software Development] Fillint:
Is it possible to mount system r/w on a booted Android Q using root access and without Recovery?
[Android Software Development] osm0sis:
Only if it doesn't use dynamic/logical partitions, since ext4-dedup is read-only by design.