How I Turned a Piece-of-Crap Tablet into a Plane

· PABLO'S DEVLOG


Well, I was never much of a tablet person.

I’ve owned a couple of iPads before, and the main thing they did was collect dust on my shelf, which tells you exactly how important they were to me. But then the day came: I needed to sign some company documents quickly, and I was not happy with my drawing tablet anymore. I probably should have bought a newer one with a screen, but I’m a terrible enough artist that owning something that “advanced” felt almost insulting. Also, I wanted something portable.

That was it, I thought. I’m buying a tablet.

I walked into the store already sulking because I didn’t want to be there, saw the first one on the shelf for R$1,400, and without thinking too much, threw it into the cart.

I knew I was being robbed, in a way. I knew it cost more than it was worth. I knew our taxes are murderous. I also knew I didn’t even like tablets.

But I needed one.

All I needed was for Noteshelf to work.

In practice, the tablet quickly showed me the cruel reality of entry-level devices: a heavy system, bloatware, background services, unnecessary animations, built-in ads, duplicate apps, and an interface trying very hard to look premium on hardware that has absolutely no breathing room for that kind of nonsense.

The device in question is a Redmi Pad SE, running Android 15 / HyperOS. It has 4 GB of RAM, and it comes with that lovely marketing phrase: “4 GB + 2 GB,” meaning memory extension. It looks nice on the box, but in reality those extra 2 GB use internal storage as virtual memory. On a tablet with slower storage, that can become micro-stuttering.

And micro-stuttering is exactly what destroys the experience of writing with a stylus.

My disappointment had proven itself correct: I had bought a piece of crap. I had thrown money away, and I was pissed.

I tested the pen and noticed the delay. That killed me. So I went back to using the drawing tablet.

But this thing kept staring at me from the table, looking pathetic and saying: use me.

I had to do something.

The goal, then, was not to turn this tablet into an iPad or a top-of-the-line Galaxy Tab. That would be fantasy. The goal was more realistic: remove the system’s dead weight, reduce interference, cut useless processes, and make the tablet as fluid as possible for handwriting.

This article is the record of that process.


The Real Problem #

The problem was not simply “the tablet is weak.”

That would be a lazy explanation.

The problem was the sum of several things:

In other words: the tablet does not have much muscle to begin with, and the system still wastes part of it on useless junk.

The idea was simple: if the hardware is limited, the system needs to be leaner.


Before Even Thinking About a Custom ROM #

My first idea was: “Can I install a lighter operating system on this thing?”

Yes, technically. The Redmi Pad SE uses the codename xun, and there are custom ROMs for it, including LineageOS and other unofficial builds.

But that comes with risks: unlocking the bootloader, wiping data, relying on a compatible recovery, and accepting possible bugs with touch, pen input, audio, camera, rotation, or battery.

And here is the important part: switching ROMs can make the system lighter, but it can also make the pen experience worse. On Android tablets, stylus performance depends a lot on the kernel, firmware, drivers, and manufacturer-specific tweaks.

So the decision was sensible: before going down the custom ROM route, I would debloat the system through ADB and tune what could be tuned.

No root.
No bootloader unlocking.
No irreversible hackery.


Confirming the Model with ADB #

First, I connected the tablet to Windows using ADB. Since I was using WSL, ADB inside Debian could not see the USB device directly. The simplest solution was to use PowerShell on Windows.

With USB debugging enabled on the tablet, I ran:

1adb devices

At first, it showed up as unauthorized. That is normal. The tablet displays a window asking you to authorize the computer’s RSA key. After accepting it, the result looked like this:

1List of devices attached
21c5e93eb        device

Now ADB was working.

Then I confirmed the model:

1adb shell getprop ro.product.device
2adb shell getprop ro.product.model
3adb shell getprop ro.product.name
4adb shell getprop ro.build.version.release
5adb shell getprop ro.miui.ui.version.name

Result:

1xun
223073RPBFL
3xun_global
415
5V816

So:

This confirmation is essential. Debloating or looking for ROMs without knowing the device codename is asking to do something stupid.


Saving the Package List Before Touching Anything #

Before removing anything, I saved the complete list of installed packages:

1adb shell pm list packages > "$env:USERPROFILE\Desktop\pacotes-redmi-pad-se.txt"

That creates a file on the Desktop with all packages. It is not exactly a system backup, but it helps a lot if I need to remember what was there before.

I also listed packages related to Xiaomi, MIUI, video, music, browser, games, ads, and similar junk:

1adb shell pm list packages | findstr /i "miui xiaomi msa analytics browser video music game getapps yellowpage"

That is when the trash collection showed up.


What I Decided NOT to Remove #

This part matters.

Good debloating does not mean deleting everything like an animal.

Some packages look useless, but they control critical parts of the system. Remove the wrong thing and you can break permissions, battery management, the launcher, touch behavior, system features, or even the pen experience.

I decided not to remove these packages:

 1com.miui.powerkeeper
 2com.xiaomi.touchservice
 3com.miui.securitycenter
 4com.miui.securitycore
 5com.lbe.security.miui
 6com.miui.securityadd
 7com.miui.core
 8com.miui.core.internal.services
 9com.miui.system
10com.miui.home
11miui.systemui.plugin
12com.miui.notification
13com.miui.permissioncontroller.overlay
14com.xiaomi.account
15com.xiaomi.finddevice
16com.xiaomi.xmsf
17com.xiaomi.xmsfkeeper
18com.xiaomi.bluetooth
19com.miui.misound
20com.miui.daemon
21com.miui.misightservice
22com.android.systemui.overlay.miui
23com.android.settings.overlay.miui
24com.android.networkstack.overlay.miui
25com.android.wifi.resources.xiaomi
26com.google.android.wifi.resources.xiaomi
27com.android.inputsettings.overlay.miui
28com.miui.settings.rro.device.systemui.overlay
29com.miui.system.overlay
30com.miui.systemui.devices.overlay
31com.miui.systemui.overlay.devices.android

The most important one in that list is this:

1com.xiaomi.touchservice

If the goal is to improve handwriting, messing with something called touchservice would be idiotic. Maybe it is not directly responsible for the pen, but it is too close to the critical area to play games with it.

I also chose not to remove the wallpaper components:

1com.miui.miwallpaper
2com.miui.miwallpaper.overlay
3com.miui.miwallpaper.overlay.customize
4com.miui.miwallpaper.config.overlay
5com.miui.wallpaper.overlay
6com.miui.wallpaper.overlay.customize
7com.miui.aod

Could I have been more aggressive? Yes.

But the likely gain is small, and the chance of creating some annoying system behavior is not worth it.


The Main Debloat #

The removal was done with:

1adb shell pm uninstall --user 0 package.name

This method removes the app only for the current user. It does not physically delete the app from the system partition. That is good, because it usually allows restoration later.

The main block was this:

 1adb shell pm uninstall --user 0 com.miui.analytics
 2adb shell pm uninstall --user 0 com.miui.msa.global
 3adb shell pm uninstall --user 0 com.miui.miservice
 4adb shell pm uninstall --user 0 com.mi.globalbrowser
 5adb shell pm uninstall --user 0 com.miui.videoplayer
 6adb shell pm uninstall --user 0 com.miui.player
 7adb shell pm uninstall --user 0 com.miui.yellowpage
 8adb shell pm uninstall --user 0 com.xiaomi.payment
 9adb shell pm uninstall --user 0 com.xiaomi.barrage
10adb shell pm uninstall --user 0 com.xiaomi.ugd
11adb shell pm uninstall --user 0 com.xiaomi.discover
12adb shell pm uninstall --user 0 com.miui.thirdappassistant
13adb shell pm uninstall --user 0 com.miui.bugreport
14adb shell pm uninstall --user 0 com.xiaomi.mtb
15adb shell pm uninstall --user 0 com.xiaomi.miralink
16adb shell pm uninstall --user 0 com.xiaomi.smarthome
17adb shell pm uninstall --user 0 cn.wps.xiaomi.abroad.lite
18adb shell pm uninstall --user 0 com.miui.fm
19adb shell pm uninstall --user 0 com.miui.fmservice
20adb shell pm uninstall --user 0 com.miui.screenrecorder
21adb shell pm uninstall --user 0 com.miui.weather2
22adb shell pm uninstall --user 0 com.miui.notes
23adb shell pm uninstall --user 0 com.miui.qr
24adb shell pm uninstall --user 0 com.xiaomi.scanner
25adb shell pm uninstall --user 0 com.google.android.apps.youtube.music
26adb shell pm uninstall --user 0 com.google.android.videos

Not everything was removed. Some packages returned this error:

1Failure [-1000]

That happened with a few apps like screen recorder, weather, notes, and scanner. It is not the end of the world. It just means the system blocked the removal of those packages for the current user.

The important stuff did come out:

That already clears out a decent amount of garbage.


What to Do When Failure [-1000] Shows Up #

My decision was not to push too hard.

You can try disabling instead of uninstalling:

1adb shell pm disable-user --user 0 com.miui.screenrecorder
2adb shell pm disable-user --user 0 com.miui.weather2
3adb shell pm disable-user --user 0 com.miui.notes
4adb shell pm disable-user --user 0 com.xiaomi.scanner

But if the system refuses, fine. The performance gain from those idle apps is small. Fighting protected system apps can quickly become a waste of time.

Debloating needs a goal. The goal here is handwriting fluidity, not winning a holy war against every Xiaomi package.


Rebooting the Tablet #

After removing the packages, I rebooted:

1adb reboot

This is mandatory. Testing after debloating without rebooting is a bad test.


Settings That Actually Matter #

Removing bloat helps, but it does not solve everything.

For stylus writing, some system settings are just as important as debloating.

1. Set the Refresh Rate to 90 Hz #

On the tablet:

1Settings → Display → Refresh rate

Select:

190 Hz

or:

1High

If the tablet is running at 60 Hz or using a conservative automatic mode, handwriting can feel more delayed. For pen input, predictability matters.


2. Disable or Reduce Animations #

First, enable Developer Options:

1Settings → About tablet → tap "OS version" several times

Then go to:

1Settings → Additional settings → Developer options

Change:

1Window animation scale: 0.5x
2Transition animation scale: 0.5x
3Animator duration scale: 0.5x

If the system still feels heavy:

1Off

This does not directly change pen latency, but it removes that dragged-through-mud feeling from the system.


3. Turn Off Memory Extension #

On the tablet:

1Settings → Additional settings → Memory extension

or:

1Settings → About tablet → RAM → Memory extension

Disable:

1Memory extension

Then reboot.

This part is counterintuitive, because marketing sells “more RAM” as a good thing. But on a device with slower storage, virtual memory can create micro-stutters.

For handwriting, micro-stutters are worse than an app reloading.

Better to have less multitasking and more immediate response.


4. Remove Battery Restrictions from the Writing App #

For Noteshelf:

1Settings → Apps → Manage apps → Noteshelf → Battery saver

Select:

1No restrictions

This also applies to Squid, JNotes, Nebo, OneNote, or Xodo.

If the system tries to save battery while you write, the experience can become bad. Fluid handwriting needs fast response, not aggressive power saving.


5. Disable Battery Saver While Writing #

On the tablet:

1Settings → Battery

Disable:

1Battery saver
2Ultra battery saver

If there is a performance mode, use it while writing.

You cannot demand low latency while the system is trying to cut processing.


6. Reduce Useless Notifications #

On the tablet:

1Settings → Notifications & status bar → App notifications

Disable notifications from apps that do not need to wake the system:

A notification is an interruption.
An interruption wakes an app.
A woken app competes for resources.
On a weak tablet, that matters.


7. Clean Up the Home Screen #

I removed unnecessary widgets and avoided live wallpapers.

Recommended setup:

The tablet does not need to look like a carrier store demo unit. It needs to open the notes app and respond to the pen.


Tuning Noteshelf #

The original idea was to use Noteshelf. It is beautiful, organized, and good for digital notebooks.

But beautiful usually costs resources.

So the configuration needs to be conservative:

The rule is simple: fluidity first, decoration later.


Alternative Apps Worth Testing #

Noteshelf may work well, but I would not treat it as the only option.

For fluid writing on limited hardware, I would test in this order:

  1. Squid;
  2. JNotes;
  3. Noteshelf;
  4. Nebo;
  5. OneNote;
  6. Xodo, mainly for PDFs.

The correct test always starts on a blank white page.

If a blank page stutters, the problem is the system, screen, pen, app, or hardware. If the blank page works fine but PDFs stutter, the problem is probably the PDF or the way the app renders the document.


Final Test After Debloating #

After everything, the test needs to be clean:

  1. reboot the tablet;
  2. wait about two minutes;
  3. close recent apps;
  4. open only the notes app;
  5. create a simple blank page;
  6. write quickly for five minutes;
  7. repeat in Squid, JNotes, and Noteshelf;
  8. only then test PDFs.

If Noteshelf stutters but Squid and JNotes behave well, the problem is the weight of Noteshelf on this hardware.

If all of them stutter, the limitation is deeper: screen, pen, touch layer, hardware, or HyperOS.


How to Restore a Removed Package #

If something breaks, you can try restoring a package with:

1adb shell cmd package install-existing package.name

Example:

1adb shell cmd package install-existing com.mi.globalbrowser

That is why I used pm uninstall --user 0. It is much less dangerous than deleting system partition files with root.


Automated Script #

After the manual process, I also created a PowerShell script to automate this debloat on Windows.

The idea of the script is to:

This makes it easier to save as a Gist and repeat the process without relying on memory or copying loose commands around.


Expected Result #

This process does not perform miracles.

The Redmi Pad SE remains an entry-level tablet. It does not become an iPad Pro. It does not become a Galaxy Tab S with an S Pen. It does not gain a premium digitizer, and it does not suddenly have RAM to spare.

But the process removes a lot of junk, reduces useless services, cuts ads, removes duplicate apps, and leaves the system less burdened.

The goal is simple:

1less bloat,
2fewer useless processes,
3fewer interruptions,
4less micro-stuttering,
5more focus on writing.

If, after all this, the tablet still cannot deliver acceptable handwriting, then the conclusion is harsh but honest: the limit was not only software. The hardware and pen experience of the Redmi Pad SE may simply not be good enough for heavy handwriting use.

In that case, the next options would be:

  1. test a lightweight custom ROM, such as LineageOS, accepting the risk;
  2. change the writing app;
  3. use lighter PDFs;
  4. or accept that, for serious handwriting, the right path is a tablet with a proper active pen and better hardware support.

The good part is that ADB debloating is the best first step: it improves what can be improved without unlocking the bootloader, without root, and without turning the tablet into a paperweight.


Summary of the Main Commands #

Confirm device:

1adb devices

Confirm model:

1adb shell getprop ro.product.device
2adb shell getprop ro.product.model
3adb shell getprop ro.product.name
4adb shell getprop ro.build.version.release
5adb shell getprop ro.miui.ui.version.name

Save package list:

1adb shell pm list packages > "$env:USERPROFILE\Desktop\pacotes-redmi-pad-se.txt"

Main debloat:

 1adb shell pm uninstall --user 0 com.miui.analytics
 2adb shell pm uninstall --user 0 com.miui.msa.global
 3adb shell pm uninstall --user 0 com.miui.miservice
 4adb shell pm uninstall --user 0 com.mi.globalbrowser
 5adb shell pm uninstall --user 0 com.miui.videoplayer
 6adb shell pm uninstall --user 0 com.miui.player
 7adb shell pm uninstall --user 0 com.miui.yellowpage
 8adb shell pm uninstall --user 0 com.xiaomi.payment
 9adb shell pm uninstall --user 0 com.xiaomi.barrage
10adb shell pm uninstall --user 0 com.xiaomi.ugd
11adb shell pm uninstall --user 0 com.xiaomi.discover
12adb shell pm uninstall --user 0 com.miui.thirdappassistant
13adb shell pm uninstall --user 0 com.miui.bugreport
14adb shell pm uninstall --user 0 com.xiaomi.mtb
15adb shell pm uninstall --user 0 com.xiaomi.miralink
16adb shell pm uninstall --user 0 com.xiaomi.smarthome
17adb shell pm uninstall --user 0 cn.wps.xiaomi.abroad.lite
18adb shell pm uninstall --user 0 com.miui.fm
19adb shell pm uninstall --user 0 com.miui.fmservice
20adb shell pm uninstall --user 0 com.miui.qr
21adb shell pm uninstall --user 0 com.google.android.apps.youtube.music
22adb shell pm uninstall --user 0 com.google.android.videos

Reboot:

1adb reboot

Restore package:

1adb shell cmd package install-existing package.name

The Redmi Pad SE is not absolute garbage, but it comes loaded with too much crap for what it offers. HyperOS tries to sell a feature-rich experience, but on a device with 4 GB of RAM, that has a price.

For anyone who wants to use a pen and write smoothly, the smartest path is to cut weight:

This does not turn the tablet into another device. But it removes a lot of the dirt that was in the way.

And sometimes optimizing a cheap tablet is exactly that: stop expecting miracles and start removing everything that gets in the way.

And that was it. I had a little Cessna-style jet in my hands. It was not the most powerful thing in the sky, but it flew.

Script link: https://gist.murad.host/pablo/568220483839436d99c97861ad2d5a03

last updated: