# Question
Title: Can I lock the DNS settings on Android devices?
It is all about being the internet boss. I want to be able to lock in or password protect the DNS settings to OpenDNS, so I can have a safe smartphone, that my kid can use with no fear of accessing pr0n or whatever.

Anybody know if this is possible? I don't want to use another method of content filtering.

# Answer
> 3 votes
You can change the DNS settings in Android, but you need to root your phone first: http://blog.varunkumar.me/2010/09/how-to-change-dns-server-on-android.html.

I don't believe there is a way to password protect the DNS settings, but at least it wouldn't be obvious for them to figure out how to change the settings.

Of course, one thing you can do to at least protect your kids while they are in your home is to change the DNS settings on your router. Of course, whenever they use your carrier's data network, this won't help.

# Answer
> 3 votes
I made a similar attempt on Android 11. The closest thing to password-protecting the DNS setting that I found was to password-protect the "Settings" app altogether. My steps:

1. Install the Lock me out: app blocker app by TEQTIC. There seem to be many apps like that, I selected that one only because of good ratings and reviews. It seems to work well and doesn't require the phone to be rooted.
2. Set up a policy to lock the Settings app
3. Enable password-protection in *Lock me out*
4. Enable the anti-tampering options in *Lock me out*, so the app cannot be uninstalled without password

As a result, when user attempts to open Settings, he sees a message about lockout. If you click the message, you can temporarily disable policy, but that requires a password:

Pros:

* Seems to work. I can't see any way to circumvent that without knowing the password.
* Doesn't require rooting the phone.

Cons:

* Requires 3rd party app (the one I used is paid)
* There is a permanent notification from the app about the lock. I'm not sure if I can hide it without breaking the reliability of the app.
* You cannot lock just DNS settings, the granularity requires you to lock the whole Settings app.

# Answer
> 1 votes
When on WiFi, you can manually set IP information, Settings \> Wireless & networks \> Wi-Fi Settings \> Menu button \> Advanced. Mind you, it would be very easy for anyone to modify those settings.

As far as when connected via cellular, I do not know of any way to modify those DNS settings as they come from the carrier and the carrier's towers. I'm pretty sure they don't want their users changing DNS settings which could help them bypass certain restrictions they normally have in place.

If it was feasible, you would need to do some rooting and hacking of files (e.g. `/system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf`). Supposedly there are DNS files that exist and can be modified, but I wouldn't recommend going this route.

---
Tags: settings, dns
---


title: How to change aspect ratio of screen

text:
# Question
Title: How to change aspect ratio of screen
I am trying to change the aspect ratio of my phone's screen, presumably by changing the resolution, to achieve the result shown in the image.

I am not trying to just change the resolution without changing the screen size as you would with an app such as 'nomone resolution changer'

I am not trying to hide the top and bottom of the screen as you would with an app such as 'notch hider'

I am not trying to just move the icons on screen as you would with 'adb overscan'

I want the device to behave as if those areas of the screen are not there at all, so they just stay black all the time

I know this will require root so bring on the root solutions

Thanks in advance

# Answer
> 0 votes
HEBF optimiser \[ROOT\] has a screen resolution setting that I guess does exactly what you want.

---
Tags: samsung, screen, system, developer-options, screen-resolution
---


# Question
Title: Does anyone know what the flame symbol means?
I can’t figure out what the flame logo means. Can some please help?

# Answer
> 1 votes
That's the Tinder app, apparently

---
Tags: applications, google-play-store
---


# Question
Title: Take Pictures via Voice Command on a oneplus 7
I want to take photos automatically if I tell the phone "take picture" or something similar. Can this be done with Apps like Macrodroid or IfTTT?

Happy to hear your suggestions.

# Answer
Google assistant can pretty well do that.

Set up Okay Google and say "Okay Google, take a selfie" e.g
> 0 votes

---
Tags: camera, voice-recognition, voice-command, google-voice-actions
---


# Question
Title: How to access files in Android 6.0 "Downloads"
I have an old Alcatel Pixi 4 with Android 6.0 from which I'd like to back up my files. I've already copied all files from the internal storage except those inside the "Downloads" folder, which actually appears to be an *app* rather than a folder...and it's an utter mess: One can only open downloaded files, but there are absolutely no options to copy, move, rename or even delete anything, so this toxic app basically acts as a trap accumulating any file that has ever been downloaded while completely shutting the owner out.

How can I extract my downloaded files?

Note: The device is not rooted, but I have it hooked up with ADB.

# Answer
```
adb pull /storage/emulated/0/Download C:\platform-tools

```
> 0 votes

---
Tags: 6.0-marshmallow, backup, files, download-manager
---


# Question
Title: How to create copies of Telegram X in Bluestacks on Mac
I am interested in creating multiple independent copies of Telegram X in Bluestacks Version 4.270.1 (2803) on Mac Big Sur 11.2.3.

The reason I want to do it is when there is a lot of accounts signed in in Telegram X it starts to lag a lot and crash too. I think that by creating multiple version of the app and signing in with less accounts in each this problem could be fixed.

To do the copying itself, I had already tried some popular methods suggested by google such as downloading an app in Google Store in Bluestocks that allows to manage multiple sessions of the same app, but (a) it doesn't work and (b) I don't think it's exactly what I need. By it doesn't work I mean whatever app like this I download, when I try to do something with it, it crashes most of the time.

Could you please recommend an elegant way to do this if there is any? I guess, the option of the last resort is just creating multiple Bluestacks right? However, this will probably cause issues with local memory on my laptop pretty quickly.

Thanks in advance.

# Answer
Use App Cloner to create multiple packages of Telegram X. Please beware that you might need the premium version for a lot of useful features in the service.

https://appcloner.app/
> 0 votes

---
Tags: bluestacks, telegram
---


title: TWRP boot freeze (Pixel 5)

text:
# Question
Title: TWRP boot freeze (Pixel 5)
I'm trying to install TWRP for the first time on my Pixel 5. I followed the instructions on https://twrp.me/google/googlepixel5.html, downloaded the latest image and bootet it with:

```
PS C:\platform-tools> ./fastboot boot .\twrp-3.6.2_11-0-redfin.img
Sending 'boot.img' (98304 KB)                      OKAY [  0.379s]
Booting                                            (bootloader) boot.img missing cmdline or OS version
OKAY [  2.274s]
Finished. Total time: 2.691s

```

On the phone, the TWRP starting screen shows up, but gets stuck there. I can execute the adb push command as stated in the instructions, but I cannot install it, as I can't get past this starting screen. Only thing that I can do here is a hard restart.

OS: Win10 / ProtonAOSP12

# Answer
Answering my own question. As @alecxs pointed out, TWRP requires a Kernel with touch driver integrated. The only one I've found is ElementX-P5, which however does not work with Android 12.

Ultimately, I will not install TWRP. However, after research I've found many reports claiming TWRP unfortunately got pretty unstable on newer devices like the Pixel 5 either way.
> 2 votes

---
Tags: recovery-mode, twrp, boot
---


title: Voice typing new line

text:
# Question
Title: Voice typing new line
I have a Samsung S9 running Android version 10 (q). I frequently use the Google speech to text facility on the keyboard. I can make it do punctuation like commas and periods however I cannot make it do a new line or carriage return. There seems to be posts about very old Android versions showing that this may have been possible. is this still possible please?

# Answer
On Android 12 with a Google Pixel 6 and Gboard voice typing, the voice command is "New line".
> 1 votes

# Answer
I have the same phone, Samsung Galaxy S9, with Android 10, with the same problem. When I said, "new line" or "new paragraph," these phrases are not typed. If I say them after a period, a space is generated. If I say "period new paragraph," just the period is generated. Changing the language settings to single language or disabling, "Block Offensive Words" does not affect it.

In Google Play Store, I updated "Speech Services by Google" and rebooted. After that I got, "new paragraph" to work. I'm not sure if I didn't just get the pause to be an appropriate length. It works even without a comma or period. It seems that it needs to be said as if it were written in italics.It doesn't always work.
> 0 votes

---
Tags: voice-recognition, voice-command, google-voice-actions, voice-typing
---


title: Controlling apps for a specific user

text:
# Question
Title: Controlling apps for a specific user
I have no experience working with a tablet and am considering buying one for my son.

I would like to have control of apps installed on his user account. Maybe the access to Google Play or whatever app used for installing other apps would be password-protected. Or maybe the apps on his user account would only be installed by me after logging into the admin user account.

How can something like this be achieved? Are there any specific requirements that I need to be aware of when choosing a tablet for this to be achievable?

**UPDATE**: I ended up using this.

# Answer
> 1 votes
I believe Google Family Link, as commented by Noah Broyles in the question comments would be a really nice option, that would cover most of your needs. Its target is exactly parents that would like to limit kids when using mobiles - you could control the time he uses it, block or allow app downloads, and so on. The app also suggest constructive apps (for learning) and has localization enabled, so parents would know where their kids are

I, however, have a complementary suggestion (that could be used together with Google Family Link) - the dfndr security: antivírus. I use it on my phone not only for the antivirus stuff (which I can't really tell if it is good or not), but it contains an app blocker (vault) that I use for bank apps (and you could use for any app you have installed but don't want your kid to open). Once configured, every time you try to enter the selected apps, the screen will be blocked asking for a pattern/password - that would be different from the one you use to unlock the phone. I'm not sure this would be the only antivirus that has such feature, but you might look for similar apps - it is good, for instance, for blocking any app that may allow the kid to spend money in it.

---
Tags: tablet, multi-user
---


# Question
Title: How can I configure the clipboard of the Google keyboard so that it doesn't delete all items upon phone restart?
The clipboard of the Google keyboard remove its history upon phone restart. How can I prevent that?

I use a Google Pixel 6.

# Answer
> 0 votes
You can pin items to the clipboard by pressing and holding them and tapping "Pin" in the pop-up menu.

Restarting will empty the clipboard. Clearing app cache will NOT empty it. Clearing app data *should* clear the clipboard including any pinned items.

It may not be the same on every device. It could be another thing manufacturers can decide. I still have unpinned content in my Gboard clipboard from 10+ hours ago; Moto G Fast on Android 10. There are results online where people say it's removing items after "1-2 hours", but they're over a variety of years on a variety of devices with varying OS and Gboard app versions.

There are alternative Android keyboard apps that have extended clipboard functionality, but of course may lack other features or have even more.

---
Tags: gboard, copy-paste, google-pixel-6
---


# Question
Title: Where do "redownloaded" pictures in WhatsApp come from?
I deleted some WhatsApp messages from my phone, but they are still visible in a blurred way in the chat. I know that's normal, but when I clicked on them, they are redownloaded. Even messages from the beginning of the year.

I was wondering whether these messages are stored on WhatsApp servers, or does WhatsApp "reupload" these pictures from the phone of the sender if they are still there?

# Answer
> 1 votes
From WhatsApp FAQ, Troubleshoot blurry photos,

> Once a photo is downloaded onto your device, it **can't be redownloaded**. You'd have to ask your contact to send it to you again.

(Emphasis supplied)

So, it's being retrieved from the sender.

---
Tags: whatsapp-messenger, images
---


# Question
Title: How to open a specific page in OneNote app on Android via adb?
I'd like to make use of an Android tablet to write on OneNote pages that I'm actively viewing in a Windows computer. From the Windows computer, I get two links when I right click on a page and select "Copy link to page". These links look like the following:

```
https://onedrive.live.com/view.aspx?resid=...
onenote:https://d.docs.live.net/...

```

The second link that starts with `onenote:https://d...` is useful when I want to jump to the page on another Windows computer - I can feed it to the Run window, and the OneNote app will display the page I need it to go to.

---

**Question**: with **adb**, can I achieve a similar operation by feeding the second link to the Android tablet, through some "intent"? I know very little about Java and have no idea how to make use of these related posts. Mainly, I'm looking for a long `adb` command with appropriate flags that may take, likely, the second link as input and have the Android tablet open the page by responding to some intent.

Eventually, with the long `adb` command, I see myself wrapping it in a bash function, and calling it by feeding in the full link that starts with `onenote:https://d...`.

---

**Update1**: thanks to user M. A.'s answer, I can send the `onenote:https://d.docs.live.net/...` link to the Android tablet - However, OneNote APK seems to only comprehend up to the section name in the `onenote:...` link despite the whole thing consists of page-specific pointers.

Here is a demo where I fed in a **full link** pointing to a page, which was sent as an intent to only go to the relevant **section**.

PS: in OneNote, things are organized as Notebook/Section/Page/Subpage. In the screenshot above, the Notebook is "Paperless", and I have masked out the name for the section and page.

---

**Update2**: for the full page-specific URL to work, we actually need to escape the `&` signs in `&section-id`, `&page-id` and `&end`.

# Answer
> 7 votes
When you have OneNote APK installed on your mobile phone, try this:

```
adb shell am start -a "android.intent.action.VIEW" -d " \"onenote:https://d.docs.live.net/....\" "

```

Note, the `&section-id`, `&page-id` and `&end` bits in the `onenote:https://...` URL will draw special attention from the interpreter (see Update 1 in the original question).

Spikatrix offered a simpler solution in the comment below: to wrap the whole OneNote link first as a string with quotation marks escaped, and then add another pair of quotes to pass the string to the shell.

# Answer
> 1 votes
I ended up using the method documented in this gist: https://gist.github.com/llinfeng/affd7911645d7e8502b20d6f0a612842. In general, I find it helpful that Github "gists" should have better version control, and decide to leave all the code component there in a public gist.

The method described in the gist works in three steps:

1. Create a parser script that deal with the bits that contain `&`, namely, these three: `&section-id`, `&page-id` and `&end`
2. Create a wrapper function in Zsh that will pass the long OneNote string into the parser script, and
3. Create an alias in Zsh that can activate the wrapper function in step 2 with `one` as a shorthand.

With the alias defined there, issuing `one "LongLink2Page"` in Zsh will get the page loaded on the Android tablet. Future improvement would be to update the parser script to read directly from the clipboard.

---
Tags: adb, intents, microsoft-onenote
---


title: Samsung a40 bootloop

text:
# Question
Title: Samsung a40 bootloop
Does anyone know how to fix a bootloop? I have tried flashing a stock room using Heimdall but that only makes the phone show to Samsung logo show the erasing animation for a little bit and boots into download mode and show "Error validating footer (6)" . If I try to generate a vbmeta file with abvtool it shows the warning that says that unofficial software was installed and shows the unlocked bootloader warning and after that it reboots.

# Answer
> 0 votes
Try using the Samsung Smart Switch app for PC to restore the stock ROM.

---
Tags: boot-loop, unbricking
---


# Question
Title: How do I eliminate system admin application permanently on my Android phone
My friend registered on an app with my phone to get a loan from the PalmPay application. The management asked him to install an app before the loan will be given to him, they say the application will be for the assurance that the loan will be paid back, and the security plugin application was installed on my phone as an admin application. He has paid back the loan but now I think someone is using the application to have access to all my details.

I decided to remove the application, but I can't permanently delete the admin application from my phone before they do something very bad with my phone. They are already on my Facebook account/Instagram account. They are trying to get more from me. I can just restive a message from Amazon and other important platforms that I usually keep my money. They are trying to reset my password to all.

Please, I need help to protect my Android phone from them. Please, I really need help before they do something very bad and wicked to me

# Answer
> 0 votes
Go to Settings -\> Security -\> Advanced -\> Device admin apps. Find the app and disable it's admin status.

Uninstall the app and restart your device.

If you downloaded it from Google Play Store, go there and report it. In Google Play Store it's called "flag as inappropriate", and there's an option "Harmful to device or data" that would be fitting.

If it was downloaded from another service you can attempt to report it to them, and it may even help if it's an official big-name third-party like Samsung App Store. If it was some shady third-party then hopefully you've learned something about security.

---

If the password reset requests happened within one day it is somewhat likely to be this app. If it was over multiple days it could still be the app, but it would seem more likely your "friend" is nothing of the sort.

---
Tags: uninstallation, device-administrator, tecno-n3
---


# Question
Title: What specifically does the Android bug report have?
I want to know what specifically does the ***bug report*** contain, because I have accidentally submitted a ***bug report*** to another app other than ***Gmail*** or ***Drive*** and I am afraid that my private data will be exposed such as my location data, SMS, call log, banking, etc.

What specifically does the Android bug report have?

# Answer
According to Capture and read bug reports, the bug report conatins:

> device logs, stack traces, and other diagnostic information to help you find and fix bugs in your app.

The bug report consists of multiple files that are compressed into a zip file and sent to the app developer(s). From the same above source:

> By default the ZIP file is called bugreport-BUILD\_ID-DATE.zip and it may contain multiple files, but the most important file is bugreport-BUILD\_ID-DATE.txt. This is the bug report and it contains diagnostic output for system services (dumpsys), error logs (dumpstate), and system message logs (logcat). The system messages include stack traces when the device throws an error, and messages written from all apps with the Log class.
>
> The ZIP file contains a version.txt metadata file that contains the Android release letter, and when systrace is enabled, the ZIP file also contains a systrace.txt file. The Systrace tool helps analyze the performance of your application by capturing and displaying execution times of your application processes and other Android system processes.
>
> The dumpstate tool copies files from the device’s filesystem into the ZIP file under the FS folder so you can reference them. For example, a /dirA/dirB/fileC file in the device would generate an FS/dirA/dirB/fileC entry in the ZIP file.

It does contains message logs and other diagnostic outputs. It does not contain your messages (SMS, WhatsApp messages, etc), nor your call logs.

Also read Reading Bug Reports.
> 4 votes

---
Tags: bug-report-feature
---


# Question
Title: Why are there Yandex apps' APK files inside of my Samsung Galaxy A20s?
My phone is a Samsung Galaxy A20s (the model is SM-A207F/DS). I was using FX File Explorer (without root) to explore the Android filesystem of my phone. If some file was interesting, I would copy it to my storage and check it out.

While searching, I found some APKs like: Yandex Search, ruMail, and Yandex Zen. These apps were never installed on my phone, and they appear inside the `/product/preload` directory:

* The ruMail and Yandex Zen are in `/product/preload/SER/hidden_app`
* The Yandex Search is in the `/product/preload/app/yandex.search` directory

Where do these apps come from?

# Answer
> 3 votes
Some device come with optional pre-installed apps. Those apps can be installed on first start, but they are not always installed (in difference to system apps which come pre-installed). As it is not sure that there is internet connectivity such apps are included into the system firmware.

On first start the apps to-be-installed are selected based on criteria like the country you are living in.

It seems like you have discovered the optional pre-loaded apps that are installed in some countries (e.g. Russia?). But you have never seen them installed you seem to live in a country where those apps are not automatically installed. But the APK files are still present so you were able to find them.

---
Tags: applications, samsung, apk, files
---


# Question
Title: How can I find out where all my storage space is gone?
I've seen lots of posts here and elsewhere, including YouTube videos, about how to free up space on your android device or find out where it's all gone, including multiple redmi-specific ones, but none of them are helping.

I have a Redmi Node 7 32GB which is not rooted. I'm not a heavy user and none of my apps have a huge amount of data or cache, and I don't have any photos or music on it.

on MIUI settings/about/storage it shows 9GB "System", 7GB "apps and data", 13GB "other" and a few other small categories, and there is about 2GB free. I've tried all the built-in clean features and they don't show anything much available to reclaim.

When I mount the phone onto my PC, I can only see about 3.7GB of files, and this matches up with what I can see in the android file manager under "Internal shared storage". I've tried a couple of other file managers as well and they're all showing the same file system.

I've tried the "diskusage" app - this shows a total drive size of 21 GB (which I'm guessing is maybe everything except "system"?) and 16GB of that is under "System data" - the remainder comprising the same 3.7GB I see in file manager, plus the 2GB free space.

I also tried "disk and storage analyser" (aka "drives"). this similarly shows a total drive size of 21GB but again the analysis of what files are on it again adds up to 3.7GB, and those are the only ones it can delete.

All the instructions I've found online are either (a) deleting cached files or app data or (b) deleting files that can be seen by file manager, but all of this adds up to peanuts compared to the 20GB + of "system" + "other" files. Is there any way I can find or clean them without rooting the phone?

# Answer
> 0 votes
I haven't fully resolved the issue myself, but these could be of help:

* Open Gallery \> Albums \> (scroll) Recycled bin/Trash \> Clear all

\**Some of the "Other" file storage are in app based and do not show on the file manager or even the system memory. They often include: Downloaded system update and temp/log files like thumbnail-types.

# Answer
> 0 votes
I've managed to revive a 3-year-old Xiaomi Redmi 7A by releasing almost 3 GiB of memory on the card by using this procedure (iterative, but streamlined):

```
Settings > Apps > Manage Apps > (three dots) >
Show all apps > (sorting control) > Sort by used storage >
(select apps one-by-one, moving down) > Storage > Clear all data

```

---
Tags: internal-storage, file-system, storage, internal-sd
---


# Question
Title: Phone won't automatically reconnect to the mobile internet
My phone (Xiaomi Redmi Note 10, Android 11) spontaneously disconnects from the mobile internet after being connected for a couple of hours, and it **won't** automatically reconnect. Can stay unconnected for however long. After I switch to the flight mode and back, it reconnects for some time, then loses connection again.

Is there any way to **diagnose** what is the problem? Maybe to find some **logs** from the network hardware.

I thought this might be due to a defective SIM card because the same problem happened to the phone it was previously installed in, but I had SIM card reissued at a mobile operator's office. The same problem is there with the new SIM card. What's the chance it's defective again? ¯\\\_(ツ)\_/¯

**UPD 2:**

Turned out that 4g connection always disappeared during a call, and not just spontaneously as I originally thought.

**UPD 1:**

A little clarification: when internet is Ok the signal level has a 4g label, then in an hour or so the 4g label spontaneously disappears, and so does the internet connection. But the phone does calls and receives them.

Thanks to Robert I managed to get logs by

```
adb logcat -P "" # and then after waiting for the internet to vanish
adb logcat -b radio

```

A lot of messages say 2224 at the presumable time of failure such as `[0]onDataSetupComplete: error apn=internet.tele2.ru, cause=2224, requestType=NORMAL`

This describes it as "SIM was marked by the network as invalid for the circuit and/or packet service domain." *How could this happen* after sim worked fine for the previous 40 mins? *Is there anything I can do to prevent it?*

Here are the logs, but after seeing what a mess they are, I wouldn't expect anyone to look through them. But if you actually do, the logs start with turning the airplane mode on and off, then a lot of messages start at 22:31 (where the loss is probably is) then by 23:01 there is definitely no internet connection.

Any help is much appreciated.

# Answer
> 1 votes
The problem was on the mobile provider side. It took some effort to convince them them to consider this option, but after that they fixed it in few days. But no complaints in the end. The problem probably arised because the number was registered ~15 years ago.

---
Tags: usb-debugging, connection-issues, mobile-network, 4g
---


# Question
Title: Android keyboard and remapping the CTRL key
I have an Samsung Galaxy 10.1 running Android version 4.1.2. I am using ssh to remotely connect to my main machine which runs Ubuntu 12.04 LTS. Once I am connected I do all my work in emacs 24.3. I also have a bluetooth keyboard.

My question is about remapping the `Caps Lock` key to function as the `Ctrl` key. I do this with my main machine by changing a setting in the terminal options. I checked the options in juiceSSH and there appears to be no equivalent. Perhaps there is a general way to do this with Android or the Bluetooth Keyboard.

How can I remap the `Caps Lock` character to function as the `Ctrl` character?

If you need more information let me know.

# Answer
I managed to remap the Caps Lock key to Ctrl using External Keyboard Helper Pro. It was really straightforward, just poke around in the settings and you'll find a way to create a custom mapping (Keycode 58 --\> Left Control).
> 8 votes

# Answer
Since Android 4.1 you can do it without root by installing an app that provides additional keyboard layouts (Key Character Map files).

The example of such app could be found here (I'm the developer).

If you don't familiar with Android development and/or don't want to build such app, there is web-app to do it (I'm the developer). It's free and open-sourced.

The KCM file to make CapsLock acts like Ctrl should look like

```
type OVERLAY

map key 58 CTRL_LEFT

```

UPDATE:

As Ronald Rogers said in the comments: Note you have to pick "ExKeyMo Layout" for all of your keyboards in your "Physical Keyboard" settings for this to work.

UPDATE:

ExKeyMo web app is not available on Heroku anymore. You'll have to run it locally. See the project's page on GitHub.
> 3 votes

# Answer
If you have rooted the device, and are able to remount /system as read-write, then you can do it by editing the files in /system/usr/key\*. Here is an example with detailed instructions.
> 0 votes

---
Tags: ssh, keyboard
---


# Question
Title: I have a Samsung Galaxy S Relay with a physical keyboard; how can I remap a spare key to send Esc?
I have a Samsung Galaxy S Relay running Android 4.1.2; it's an unusual phone because it slides open to reveal a built-in physical keyboard.

The keyboard has no Esc key. It'd be nice to have one, so that I could use it inside Terminal IDE and various terminal emulators and other apps. The Esc key is useful in the Vim text editor, as well as other software which has been ported from Linux to Android.

I'd like to remap one of the keyboard keys which I don't use (such as the voice-search key or the compose-new-email key) to send Escape.

My phone is running stock unrooted Android. But if you would like me to root it or to install CyanogenMod, that is fine.

I'm willing to modify any of the configuration files stored on the device. But I don't want to spend any money to buy a third-party app.

The Hacker's Keyboard is good. But, since I already have a physical keyboard, I want to use the physical keyboard. Cellphone screens aren't big screens; I don't want to spend valuable screen real estate on a virtual keyboard.

How can I remap a spare keyboard key to send Esc?

# Answer
Here are some threads from the xda-developers Galaxy S Relay 4G general forum which may be helpful.
> 1 votes

# Answer
While this isn't for your device, it might work out for ya. Take a look at this post on XDA. It talks about remapping keys on the Droid 4, which also has a physical keyboard.

"Remapping Physical Buttons/Adding Alternate Keys"
> 0 votes

# Answer
Since Android 4.1 you can do it without root by installing an app that provides additional keyboard layouts (Key Character Map files).

The example of such app could be found here (I'm the developer).

If you don't familiar with Android development and/or don't want to build such app, there is web-app to do it (I'm the developer). It's free and open-sourced.

There is an example of KCM-file that describes `Esc` to `CapsLock` mapping:

```
type OVERLAY

map key 58 ESCAPE

```

`58` is a `KEY_CODE` for `CapsLock` key. To make other key act like `Esc` key you should find the key-code that is produced by that key. There are several Android apps to do it. For example Gamepad tester (note that it uses 'scan code' to refer to a key code). So the KCM-file will look like:

```
type OVERLAY

map key %KEY_CODE_OF_YOUR_MEDIA_KEY% ESCAPE

```

UPDATE:

ExKeyMo web app is not available on Heroku anymore. You'll have to run it locally. See the project's page on GitHub.
> 0 votes

---
Tags: settings, samsung, keyboard, terminal
---


# Question
Title: How to setup navigation gestures in Android Oreo?
In my previous RedMi phone, I could swipe from the left to move back, swipe from bottom to go to the home screen, and swipe and hold from the bottom to get to the multitasking view.

However, in my latest Asus pure Oreo phone, I can't seem to find such a setting. Is there a way to enable it?

# Answer
Note that this gesture navigation functionality is not a part of Android Oreo natively. Some launches/apps/mods could do this, but not natively.

(Based on the comments)
> 0 votes

---
Tags: 8.1-oreo, gestures
---


# Question
Title: Is there a way I can make squircle the permanent icon shape?
Android on my Nokia 6 sets circle as the default app icon shape. I discovered some time ago how to enable developer mode and switch to squircle, which gives a larger icon surface with more information.

Unfortunately, every time I restart my phone, it defaults back to circle, and I have to manually change it to squircle again.

Is there a way to lock this setting so it won't reset when the phone is reset, so I won't lose my squircles?

# Answer
> 0 votes
Just use a launcher. Nova launcher is a good launcher. But there are more online.

---
Tags: settings, developer-options, app-icons
---


# Question
Title: Measure power usage (wattage, voltage and current) while charging an Android device
I am using Samsung Galaxy S21. While charging my phone with a USB-C 65W Lenovo/Chicony power adapter with outputs supporting DC 5V/2.0A, 9V/2A, 15V/3A, and 20V/3.25A, how can I know exactly what power wattage is my device getting charged with? I tried using the Ampere app and the values range from 1000 mA to 2600 mA while the Voltage revolves around 4.1V?

Is there an app that can help provide power input details? Are there Android APIs to provide such information? Is it fine for me to keep using that charger? I understand Galaxy S21 supports USB C with power delivery, so it should be able to select the optimum voltage to charge my device?

From an article, I was expecting my charger to provide a 15W output but voltage x measured current using the Ampere app doesn't seem consistent with that number (5W?). What am I missing? How does USB Type C power delivery work in this case?

# Answer
> 0 votes
If it's only to know the voltage and amp rate you are currently charging at for personal knowledge and not necessarily dependent on using software for calculation, I agree with Robert's comment about the dongle for I bought 1 about a year ago from an Oriley parts house around 8 bucks. Works flawlessly!

# Answer
> 0 votes
This needs a rooted phone in recent android versions. It works on all samsung phones i have used.

Using terminal emulator use this command:

```
while true; do cat /sys/class/power_supply/battery/current_now; sleep 9 ; done

```

Thes commands will print current every 9 seconds. Voltage is usually constant from chargers(not exactly sure) but as per my experience the higher the current the better the charger. This solution may nit work for you but i could work for other rooted users.

---
Tags: samsung, charging, usb-c
---


# Question
Title: How can I bookmark a local file on Android Chrome browser?
I have a HTML file stored on the memory card of my Android phone. I can open it in my browser (Chrome) but cannot bookmark it -- the URL is `content://com.google.android.blah.blah...` (I was expecting `file://...`) and appears to expire after some time.

Howe can I get a permanent bookmark to a local file?

# Answer
> 0 votes
I had the same problem after upgrading to Android 10. I used to be able to set a bookmark in FireFox even after upgrade. That stopped working as well.

The only solution I have found is to use a HTML Reader. Here is a link to one I have found to work well. https://play.google.com/store/apps/details?id=in.vineetsirohi.htmlreader

---
Tags: chrome-for-android, bookmarks
---


# Question
Title: What is the official Android repository containing APKSIGNER?
What is the official source for `apksigner` as referenced e.g. in this answer? People are citing Android Studio, Android SDK Build Tools/Platform Tools/Command Line Tools etc. (as well as some shady archives on Google Drive), but non of these contain the program. I've downloaded, installed and searched them all.

Alternatively, what is the official source for Android SDK Build Tools 24.0.3, which allegedly contains the `apksigner`?

I've found an `apksigner.jar` and `apksigner.bat` inside a private Google repository, but running

```
apksigner verify --verbose --print-certs <APK file>
apksigner.bat verify --verbose --print-certs <APK file>
apksigner.jar verify --verbose --print-certs <APK file>

```

doesn't work (no output). This is the content of said batch file `apksigner.bat`:

```
@echo off
REM Copyright (C) 2016 The Android Open Source Project
REM
REM Licensed under the Apache License, Version 2.0 (the "License");
REM you may not use this file except in compliance with the License.
REM You may obtain a copy of the License at
REM
REM     http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.

REM don't modify the caller's environment
setlocal

REM Locate apksigner.jar in the directory where apksigner.bat was found and start it.

REM Set up prog to be the path of this script, including following symlinks,
REM and set up progdir to be the fully-qualified pathname of its directory.
set prog=%~f0

rem Check we have a valid Java.exe in the path.
set java_exe=
if exist    "%~dp0..\tools\lib\find_java.bat" call    "%~dp0..\tools\lib\find_java.bat"
if exist "%~dp0..\..\tools\lib\find_java.bat" call "%~dp0..\..\tools\lib\find_java.bat"
if not defined java_exe goto :EOF

set jarfile=apksigner.jar
set "frameworkdir=%~dp0"
rem frameworkdir must not end with a dir sep.
set "frameworkdir=%frameworkdir:~0,-1%"

if exist "%frameworkdir%\%jarfile%" goto JarFileOk
    set "frameworkdir=%~dp0lib"

if exist "%frameworkdir%\%jarfile%" goto JarFileOk
    set "frameworkdir=%~dp0..\framework"

:JarFileOk

set "jarpath=%frameworkdir%\%jarfile%"

set javaOpts=
set args=

REM By default, give apksigner a max heap size of 1 gig and a stack size of 1meg.
rem This can be overridden by using "-JXmx..." and "-JXss..." options below.
set defaultXmx=-Xmx1024M
set defaultXss=-Xss1m

REM Capture all arguments that are not -J options.
REM Note that when reading the input arguments with %1, the cmd.exe
REM automagically converts --name=value arguments into 2 arguments "--name"
REM followed by "value". apksigner has been changed to know how to deal with that.
set params=

:firstArg
if [%1]==[] goto endArgs
set a=%~1

    if [%defaultXmx%]==[] goto notXmx
    if %a:~0,5% NEQ -JXmx goto notXmx
        set defaultXmx=
    :notXmx

    if [%defaultXss%]==[] goto notXss
    if %a:~0,5% NEQ -JXss goto notXss
        set defaultXss=
    :notXss

    if %a:~0,2% NEQ -J goto notJ
        set javaOpts=%javaOpts% -%a:~2%
        shift /1
        goto firstArg

    :notJ
    set params=%params% %1
    shift /1
    goto firstArg

:endArgs

set javaOpts=%javaOpts% %defaultXmx% %defaultXss%
call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%

```

UPDATE: As suggested, I've now tried `apksigner` from Android Build Tools. Here is the output:

```
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1
Signer #1 certificate DN: CN=Unknown, OU=Unknown, O=Fiducia IT AG, L=Unknown, ST
=Unknown, C=DE
Signer #1 certificate SHA-256 digest: 53a6afa8f0d219bba2fe84154f256ecec85b34175f
fee5b7387fda0afcc12605
Signer #1 certificate SHA-1 digest: addb5ed43a27660e41acb1d39e85ddd7b9c9807c
Signer #1 certificate MD5 digest: 1be8c130e83eb6b36e4aff93bcdd1b28
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: 671eafb570fa9e82cb7a8d5c435dad3d86990a09d5b
20f41b42e3152b3cd5a6a
Signer #1 public key SHA-1 digest: c021e779e6086e20a7c60b05a0c30b94c59c83ba
Signer #1 public key MD5 digest: d42dc7a6bcb0ace30d8ac316bc321c9c
WARNING: META-INF/androidx.navigation_navigation-fragment.version not protected
by signature. Unauthorized modifications to this JAR entry will not be detected.
 Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.camera_camera-camera2.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/androidx.customview_customview.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/services/ya.k not protected by signature. Unauthorized modific
ations to this JAR entry will not be detected. Delete or move the entry outside
of META-INF/.
WARNING: META-INF/androidx.room_room-runtime.version not protected by signature.
 Unauthorized modifications to this JAR entry will not be detected. Delete or mo
ve the entry outside of META-INF/.
WARNING: META-INF/androidx.camera_camera-lifecycle.version not protected by sign
ature. Unauthorized modifications to this JAR entry will not be detected. Delete
 or move the entry outside of META-INF/.
WARNING: META-INF/androidx.browser_browser.version not protected by signature. U
nauthorized modifications to this JAR entry will not be detected. Delete or move
 the entry outside of META-INF/.
WARNING: META-INF/com.google.android.material_material.version not protected by
signature. Unauthorized modifications to this JAR entry will not be detected. De
lete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.savedstate_savedstate-ktx.version not protected by si
gnature. Unauthorized modifications to this JAR entry will not be detected. Dele
te or move the entry outside of META-INF/.
WARNING: META-INF/androidx.activity_activity-ktx.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/kotlinx_coroutines_play_services.version not protected by sign
ature. Unauthorized modifications to this JAR entry will not be detected. Delete
 or move the entry outside of META-INF/.
WARNING: META-INF/androidx.slidingpanelayout_slidingpanelayout.version not prote
cted by signature. Unauthorized modifications to this JAR entry will not be dete
cted. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.dynamicanimation_dynamicanimation.version not protect
ed by signature. Unauthorized modifications to this JAR entry will not be detect
ed. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.exifinterface_exifinterface.version not protected by
signature. Unauthorized modifications to this JAR entry will not be detected. De
lete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.sqlite_sqlite-ktx.version not protected by signature.
 Unauthorized modifications to this JAR entry will not be detected. Delete or mo
ve the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-extensions.version not protected
by signature. Unauthorized modifications to this JAR entry will not be detected.
 Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.versionedparcelable_versionedparcelable.version not p
rotected by signature. Unauthorized modifications to this JAR entry will not be
detected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-livedata-ktx.version not protecte
d by signature. Unauthorized modifications to this JAR entry will not be detecte
d. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.preference_preference-ktx.version not protected by si
gnature. Unauthorized modifications to this JAR entry will not be detected. Dele
te or move the entry outside of META-INF/.
WARNING: META-INF/androidx.preference_preference.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/androidx.navigation_navigation-ui.version not protected by sig
nature. Unauthorized modifications to this JAR entry will not be detected. Delet
e or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-runtime.version not protected by
signature. Unauthorized modifications to this JAR entry will not be detected. De
lete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.room_room-ktx.version not protected by signature. Una
uthorized modifications to this JAR entry will not be detected. Delete or move t
he entry outside of META-INF/.
WARNING: META-INF/androidx.appcompat_appcompat-resources.version not protected b
y signature. Unauthorized modifications to this JAR entry will not be detected.
Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.appcompat_appcompat.version not protected by signatur
e. Unauthorized modifications to this JAR entry will not be detected. Delete or
move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-livedata.version not protected by
 signature. Unauthorized modifications to this JAR entry will not be detected. D
elete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.navigation_navigation-runtime.version not protected b
y signature. Unauthorized modifications to this JAR entry will not be detected.
Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.navigation_navigation-runtime-ktx.version not protect
ed by signature. Unauthorized modifications to this JAR entry will not be detect
ed. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.window_window.version not protected by signature. Una
uthorized modifications to this JAR entry will not be detected. Delete or move t
he entry outside of META-INF/.
WARNING: META-INF/androidx.cursoradapter_cursoradapter.version not protected by
signature. Unauthorized modifications to this JAR entry will not be detected. De
lete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.savedstate_savedstate.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/androidx.fragment_fragment.version not protected by signature.
 Unauthorized modifications to this JAR entry will not be detected. Delete or mo
ve the entry outside of META-INF/.
WARNING: META-INF/androidx.vectordrawable_vectordrawable.version not protected b
y signature. Unauthorized modifications to this JAR entry will not be detected.
Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.fragment_fragment-ktx.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/androidx.sqlite_sqlite-framework.version not protected by sign
ature. Unauthorized modifications to this JAR entry will not be detected. Delete
 or move the entry outside of META-INF/.
WARNING: META-INF/androidx.core_core.version not protected by signature. Unautho
rized modifications to this JAR entry will not be detected. Delete or move the e
ntry outside of META-INF/.
WARNING: META-INF/androidx.vectordrawable_vectordrawable-animated.version not pr
otected by signature. Unauthorized modifications to this JAR entry will not be d
etected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version n
ot protected by signature. Unauthorized modifications to this JAR entry will not
 be detected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version not
protected by signature. Unauthorized modifications to this JAR entry will not be
 detected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.security_security-crypto.version not protected by sig
nature. Unauthorized modifications to this JAR entry will not be detected. Delet
e or move the entry outside of META-INF/.
WARNING: META-INF/androidx.navigation_navigation-common-ktx.version not protecte
d by signature. Unauthorized modifications to this JAR entry will not be detecte
d. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.biometric_biometric.version not protected by signatur
e. Unauthorized modifications to this JAR entry will not be detected. Delete or
move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-livedata-core.version not protect
ed by signature. Unauthorized modifications to this JAR entry will not be detect
ed. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.navigation_navigation-common.version not protected by
 signature. Unauthorized modifications to this JAR entry will not be detected. D
elete or move the entry outside of META-INF/.
WARNING: META-INF/kotlinx_coroutines_android.version not protected by signature.
 Unauthorized modifications to this JAR entry will not be detected. Delete or mo
ve the entry outside of META-INF/.
WARNING: META-INF/androidx.legacy_legacy-support-core-utils.version not protecte
d by signature. Unauthorized modifications to this JAR entry will not be detecte
d. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.viewpager2_viewpager2.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/androidx.transition_transition.version not protected by signat
ure. Unauthorized modifications to this JAR entry will not be detected. Delete o
r move the entry outside of META-INF/.
WARNING: META-INF/androidx.print_print.version not protected by signature. Unaut
horized modifications to this JAR entry will not be detected. Delete or move the
 entry outside of META-INF/.
WARNING: META-INF/androidx.documentfile_documentfile.version not protected by si
gnature. Unauthorized modifications to this JAR entry will not be detected. Dele
te or move the entry outside of META-INF/.
WARNING: META-INF/androidx.core_core-ktx.version not protected by signature. Una
uthorized modifications to this JAR entry will not be detected. Delete or move t
he entry outside of META-INF/.
WARNING: META-INF/androidx.emoji2_emoji2-views-helper.version not protected by s
ignature. Unauthorized modifications to this JAR entry will not be detected. Del
ete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.recyclerview_recyclerview.version not protected by si
gnature. Unauthorized modifications to this JAR entry will not be detected. Dele
te or move the entry outside of META-INF/.
WARNING: META-INF/androidx.tracing_tracing.version not protected by signature. U
nauthorized modifications to this JAR entry will not be detected. Delete or move
 the entry outside of META-INF/.
WARNING: META-INF/androidx.startup_startup-runtime.version not protected by sign
ature. Unauthorized modifications to this JAR entry will not be detected. Delete
 or move the entry outside of META-INF/.
WARNING: META-INF/androidx.navigation_navigation-fragment-ktx.version not protec
ted by signature. Unauthorized modifications to this JAR entry will not be detec
ted. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version not pro
tected by signature. Unauthorized modifications to this JAR entry will not be de
tected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.arch.core_core-runtime.version not protected by signa
ture. Unauthorized modifications to this JAR entry will not be detected. Delete
or move the entry outside of META-INF/.
WARNING: META-INF/androidx.emoji2_emoji2.version not protected by signature. Una
uthorized modifications to this JAR entry will not be detected. Delete or move t
he entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version not protect
ed by signature. Unauthorized modifications to this JAR entry will not be detect
ed. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version not protected
 by signature. Unauthorized modifications to this JAR entry will not be detected
. Delete or move the entry outside of META-INF/.
WARNING: META-INF/services/ta.z not protected by signature. Unauthorized modific
ations to this JAR entry will not be detected. Delete or move the entry outside
of META-INF/.
WARNING: META-INF/INDEX.LIST not protected by signature. Unauthorized modificati
ons to this JAR entry will not be detected. Delete or move the entry outside of
META-INF/.
WARNING: META-INF/androidx.activity_activity.version not protected by signature.
 Unauthorized modifications to this JAR entry will not be detected. Delete or mo
ve the entry outside of META-INF/.
WARNING: META-INF/androidx.drawerlayout_drawerlayout.version not protected by si
gnature. Unauthorized modifications to this JAR entry will not be detected. Dele
te or move the entry outside of META-INF/.
WARNING: META-INF/androidx.interpolator_interpolator.version not protected by si
gnature. Unauthorized modifications to this JAR entry will not be detected. Dele
te or move the entry outside of META-INF/.
WARNING: META-INF/com/android/build/gradle/app-metadata.properties not protected
 by signature. Unauthorized modifications to this JAR entry will not be detected
. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-viewmodel.version not protected b
y signature. Unauthorized modifications to this JAR entry will not be detected.
Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.camera_camera-core.version not protected by signature
. Unauthorized modifications to this JAR entry will not be detected. Delete or m
ove the entry outside of META-INF/.
WARNING: META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version not pro
tected by signature. Unauthorized modifications to this JAR entry will not be de
tected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-service.version not protected by
signature. Unauthorized modifications to this JAR entry will not be detected. De
lete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.lifecycle_lifecycle-process.version not protected by
signature. Unauthorized modifications to this JAR entry will not be detected. De
lete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.loader_loader.version not protected by signature. Una
uthorized modifications to this JAR entry will not be detected. Delete or move t
he entry outside of META-INF/.
WARNING: META-INF/androidx.viewpager_viewpager.version not protected by signatur
e. Unauthorized modifications to this JAR entry will not be detected. Delete or
move the entry outside of META-INF/.
WARNING: META-INF/androidx.cardview_cardview.version not protected by signature.
 Unauthorized modifications to this JAR entry will not be detected. Delete or mo
ve the entry outside of META-INF/.
WARNING: META-INF/androidx.navigation_navigation-ui-ktx.version not protected by
 signature. Unauthorized modifications to this JAR entry will not be detected. D
elete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.coordinatorlayout_coordinatorlayout.version not prote
cted by signature. Unauthorized modifications to this JAR entry will not be dete
cted. Delete or move the entry outside of META-INF/.
WARNING: META-INF/kotlinx_coroutines_core.version not protected by signature. Un
authorized modifications to this JAR entry will not be detected. Delete or move
the entry outside of META-INF/.
WARNING: META-INF/androidx.camera_camera-view.version not protected by signature
. Unauthorized modifications to this JAR entry will not be detected. Delete or m
ove the entry outside of META-INF/.
WARNING: META-INF/androidx.annotation_annotation-experimental.version not protec
ted by signature. Unauthorized modifications to this JAR entry will not be detec
ted. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.sqlite_sqlite.version not protected by signature. Una
uthorized modifications to this JAR entry will not be detected. Delete or move t
he entry outside of META-INF/.
WARNING: META-INF/androidx.core_core-splashscreen.version not protected by signa
ture. Unauthorized modifications to this JAR entry will not be detected. Delete
or move the entry outside of META-INF/.

```

What is the meaning?

# Answer
> 2 votes
I have extended my original answer by a section how to get apksigner without installing Android SDK or Android Studio:

Apksigner is a Java tool and Google provides for start-up a batch file `apksigner.bat`(Windows) respectively a shell script `apksigner.sh` (Linux, MacOS). As mentioned before it is included in each build-tools version of Android SDK. If you don't want to install the whole Android SDK (with or without Android Studio) you can directly download build tools and extract and execute apksigner. Links to the all build-tools are provided on this website (the provided links go to the original Google download locations).

I prefer apksigner from build-tools v30:

You only need the file `lib/apksigner.jar` from the archive (thus it doesn't matter for which platform you download the build-tools package). Extract it and open a shell in the folder. Then execute `java -jar apksigner.jar`. To execute you need Java 9 or higher (best one of the Java LTS versions 11 or 17 - e.g. the Eclipse Adoptium OpenJDK release https://adoptium.net).

Using this direct approach the command to execute apksigner is

```
java -jar apksigner.jar verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

```

---
Tags: apk, command-line, java, android-studio, authentication
---


# Question
Title: Is it possible to dump an Android partition with file-based encryption (FBE)?
Consider an unrooted Android 9.0 device with file-based encrypted (FBE), a locked bootloader and only recovery and download modes available. Is there any way to dump the internal storage either to the SD card or via USB, especially the user data partition `/data`?

Note: The objective is not to decrypt the data, but merely to gain *read access* to the bit patterns residing in `/data`.

# Answer
> 1 votes
It is **not** possible to dump the `userdata` partition. According to the FBE docs:

> The recovery partition is unable to access the DE-protected storage on the `userdata` partition.

Therefore, you won't be able to read the `userdata` partition without extracting the storage drive from the device. Furthermore, if you are running Android 11+, then the filesystem metadata is encrypted with a device encryption key. So if your goal is to determine the location of a file, you would also need to extract the DE key from the physical component that protects it, if applicable.

From as far as I can tell, unless you have a cyber forensics lab, there is not an easy way to even get *read* access to the partition.

EDIT:
Looking at your previous question, it sounds like you soft-bricked your device. In which case, if your goal is to recover the device, you can't without root, as mentioned on this XDA thread:

> It fails because it's a system app. With root it's possible to install it but not without. You need to do a factory reset from recovery to get all the apps in /system/app and /system/priv-app back.

---
Tags: encryption, storage
---


# Question
Title: Does File-Based Encryption (FBE) in contrast to Full-Disk Encryption (FDE) allow deletion of individual encrypted files?
As far as I understand, Android 9.0 switched from Full-Disk Encryption (FDE) to File-Based Encryption (FBE), which means that encryption is done on a file-by-file basis by default.

If Android no longer encrypts the entire internal storage (or partitions) but only *individual files*, shouldn't it also be possible to **delete** individual encrypted files, preferably from an unrooted device?

# Answer
> 0 votes
Warning: I am **not** a security expert.

The **samsung** link you provided says:

> Each file is independently encrypted using AES-256-XTS, with a unique File Encryption Key that is derived from a Primary Key.

Which means that a non-credential encrypted (possibly unencrypted) copy of the location of the files must be stored somewhere. Therefore, in theory, if a person had physical access to the device, then they would be able to derive each files location without the user's credentials.

That being said, why are you worried about someone deleting individual files as opposed to deleting an entire disk? If someone has the ability to selectively delete data from the phones storage, then you're already screwed.

---
Tags: encryption, root-access, samsung
---


# Question
Title: How can I verify the authenticity of an APK file I downloaded?
The latest update of Google Maps is unavailable in my country, so I downloaded a version by googling for "Google Maps 5.4.0 apk". I did in fact find it, but now I wonder how I can tell if this is in fact the same version as in the market.

How can I be sure that it hasn't been tampered with? Are apps signed in any way? Is there any way of checking the signatures?

# Answer
> 77 votes
Sidestepping the debate over the legitimacy of installing that app on your phone, the question of verification is one that I've been meaning to understand for a while, and you've prompted me to try to figure out a possible way of verifying who signed an apk.

Android apps are signed in the normal manner of .jar files (.apk is really just a special .jar which is just a special .zip) however it may not be trivial to *trace* the authenticity of the certificates unless you have something known good to compare to. That's basically what the phone itself does - verifies that something that claims to be from the same party as something already on the phone actually is - the phone doesn't refuse to install things with unknown signers, it can only (object to/clear application data of) apparent forgeries when something new doesn't match something old that it claims to.

You will need to have jarsigner and keytool. I believe these come from the JDK which is a prerequisite to the android SDK rather than the SDK itself.

First you want try to verify the public key contained within the .apk. Usually this is in META-INF/CERTS.RSA but it can be in another file - unzip -l will tell you. You want to see what you can find out about it:

```
unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert

```

That's going to dump out a lot of information about who the signer claims to be. Some certificates are apparently themselves signed by known parties, but without figuring out how to trace that, I suspect you could do something like this:

```
unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
unzip -p knowngood.apk META-INF/CERT.RSA | keytool -printcert | grep MD5

```

If you have a known trusted apk from the same author who used the same certificate. I'm assuming that the certificates having the same MD5 sum is enough.

Assuming you've decided to trust the certificate, then you can see if it has been used to sign each of the files within the .apk

```
jarsigner -verbose -verify suspect.apk

```

(If there's more than one .RSA file in the archive, you should add the -certs flag to tell you which certificate(s) have been used to sign each file, so you can be sure its the certificate you verified)

# Answer
> 20 votes
## Verifying an APK signature

The correct way to verify an APK file is to use `apksigner`.

`apksigner` is part of the Android build tools (Andorid SDK), therefore you may find multiple versions installed, one for each build-tools version installed.

One example path within the Android SDK to `apksigner` is:

```
android-sdk/build-tools/30.0.1/apksigner

```

For more details on how to get apksigner see last chapter of this answer.

Execute apksigner this way:

```
apksigner verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Number of signers: 1
Signer #1 certificate DN: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Signer #1 certificate SHA-256 digest: 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Signer #1 certificate SHA-1 digest: 45989dc9ad8728c2aa9a82fa55503e34a8879374
Signer #1 certificate MD5 digest: d90db364e32fa3a7bda4c290fb65e310
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 1024
Signer #1 public key SHA-256 digest: 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Signer #1 public key SHA-1 digest: b46cbed18d6fbbe42045fdb93f5032c943d80266
Signer #1 public key MD5 digest: 0f9c33bbd45db0218c86ac378067538d
<skipped a lot of warnings>

```

## Estimate the authenticity of the signer certificate

Now you have verified the APK, but you still don't know if you can trust the person/organization who has signed the APK file. This is because on Android APK signatures use by definition self-signed certificates. If you can trust a certificate is therefore a difficult question. The only way is to check the other apps that have been signed using the same certificate.

The only way I know to do so is to use online PlayStore crawling services like androidobservatory.org. It has an API for checking which apps have been signed by the same certificate using the certificate SHA-1 digest:

Edit: apkmirror.com also allows to search for the certificate digest. Just enter the plain SHA-1 or SHA-256 certificate digest (without colons or spaces) in the search field:

On this page you can see all the other APK files on Google Play Store that are signed with the same certificate.

## Getting and executing apksigner

Apksigner is a Java tool and Google provides for start-up a batch file `apksigner.bat`(Windows) respectively a shell script `apksigner.sh` (Linux, MacOS).

As mentioned before it is included in each build-tools version of Android SDK. But it is not placed in PATH so you can not simply open a command-prompt or terminal and execute `apksigner`, instead you have to manually provide the full path to `apksigner.bat`/`apksigner.sh`.

If you don't want to install the whole Android SDK (with or without Android Studio) you can directly download build tools and extract and execute apksigner. Links to the all build-tools are provided on this website (the provided links go to the original Google download locations).

I prefer apksigner from build-tools v30:

You only need the file `lib/apksigner.jar` from the archive. Extract it and open a shell in the folder. Then execute `java -jar apksigner.jar`. To execute you need Java 9 or higher (best Java 11 or 17).

Using this direct approach the command to execute apksigner is

```
java -jar apksigner.jar verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

```

Or if you use full path names - replace the `<..>` sections with the appropriate path that works on your OS:

```
<path to java 9+>/java -jar <path to apksigner>/apksigner.jar verify --verbose --print-certs "<absolute or relative path to apk to be verified>"

```

# Answer
> 7 votes
There is (now) an `apksigner` tool in `build-tools` that does what you want. From the docs:

> Check whether the APK's signatures are expected to be confirmed as valid on all Android platforms that the APK supports:
>
> ```
> apksigner verify [options] app-name.apk
>
> ```

# Answer
> 2 votes
You can also try uploading the APK to the free VirusTotal.com virus checker. It will generate a unique hash for the APK and if others have already uploaded it to test it (very likely) then you will have more of an idea that the APK is valid.

The service will also scan the APK with over 60 virus scanners and let you know if it believes it has similar signatures to viruses already found.

# Answer
> 0 votes
To compare certificates from a suspect apk file, maybe one idea is to download it's version on the official Play Store on your phone, doing a backup on your computer and go in the backup directory, select the concerned apk file and do the same checks. You can also view the Google certificates by doing the check on a device-default application (like any com.google.android.\* apk)

# Answer
> 0 votes
I'm surprised no one has mentioned this yet, but you don't necessarily need a command terminal to view the certs? The `apk`'s can generally be opened using `open as zip`, making it's contents parsable:

You can generally find the certs listed in `META-INF` \> `manifest.mf`:

---
Tags: security, apk
---


title: Swype keyboard dictionary migration

text:
# Question
Title: Swype keyboard dictionary migration
How to migrate a swype keyboard dictionary to another device (a new one for instance)? When I buy a new phablet I have to collect words over again.

# Answer
> 2 votes
From Swype documentation

Backup and Sync Demo: Register all Devices with Swype Connect • Download the latest build of Swype from the Google Play store

> • Open messaging application and long press on the Swype key to open Swype Settings
>
> • Select “My Words”, then select “Register Now” to activate Backup and Sync
>
> •In messaging application input names of friends a few times and select “Add word to Dictionary”
>
> • Long press Swype key to open Swype Settings, select “My Words” and then select “Edit My Dictionary” and you can view your dictionary
>
> •Multi-Device Dictionary Sync •

If using a brand new device without Swype previously installed

> • Go to “Android Settings”, “Applications”, “Swype”, and select “Clear Data”
>
> • Open messaging application; walk through the Swype registration process with your device email
>
> • Once activation is complete, go into “Swype Settings,” select “My Words,” and then select “Edit My Dictionary” and you will see that your dictionary has been completely restored
>
> • Go through this process with all your Android devices if desired

# Answer
> 2 votes
Since Swype is EOL and no longer supported by its owner, but thankfully still functional, I have found the backup/registration/restore process unreliable. I was able to migrate the app from one device to another fairly easily, but found that the personal dictionary ("word list") is not included in that. The best solution I have come up with is this:

* "Manually" capture the contents from the old host/source Swype personal dictionary as described here: Bulk word import into Gboard. The Universal Copy tool mentioned there now supports a 'scroll mode' that allows you to capture more than the ~20 entries that fit on the screen at a time from the old list, but its still slow going.
* Transfer the flat-text list to the new host. I used a Google Keep item to do this.
* Bulk import the flat-text list to the new Swype installation as described here: Where does swype store the user dictionary?. Caveat: the bulk import process only accepts about 35 entries at a time, so multiple import passes will have to be made, but it works!

# Answer
> 1 votes
2022 Swype-user here. The easiest (albeit still manual) solution allows you to transfer ~20 words at a time:

1. On your old phone, open your personal dictionary list on Swype
2. On your new phone, take a photo of your list of words
3. Using Google Lens (i.e. smart scanner) highlight the text in the photo
4. Copy and paste the words into any messaging app draft
5. Highlight all of the pasted words
6. Press the Swype key
7. Swype will prompt you to "Add all to dictionary"
8. Repeat until you've scrolled through your personal dictionary

Not ideal, but it was mindlessly easy. Happy Swyping!

---
Tags: swype
---


# Question
Title: What are the icons for bluetooth devices shown in bluetooth scan menu?
In android bluetooth scan menu, the scanned devices are given various icons which specify the type of device that they are reporting themselves to be

What are device types 1 and 2 shown in this picture, and where can I get a list of all possible device types and their icons? Is this icon list specific to a smartphone or is it from the default android?

This screenshot is from Samsung galaxy s7 with android 8.0.0

Edit: or is there any way to probe for this information through adb or something?

Edit2: for anyone interested I downloaded an app called Bluetooth scanner and it shows device 1 as "Unknown". So may be that's just what this icon means.

# Answer
From my best searching, you can find a list of what devices would be possible in the Android documentation. It provides both a list of the major device categories and a more detailed listing of all possible devices. I'd imagine it's up to each device to report what it is.

I couldn't find a good reference for each image and these constants.

If you happen to be on Linux, you can use something like `bluez-tools` to see a device's icon from you command-line:

List devices known to your adapter.

```
bt-device -l

Added devices:
my-phone (A1:A1:A1:A1:A1:A1)
...
AB-AB-AB-AB-AB-AB (AB:AB:AB:AB:AB:AB)

```

Take the address of `my-phone` and pull up its data, here's a snippet from my phone's:

```
bt-device -i A1:A1:A1:A1:A1:A1

[A1:A1:A1:A1:A1:A1]
Name: my-phone
Icon: phone <- Used to pick an icon
Paired: 1
Trusted: 1
...

```

Here's the `icon` from a pair of wireless headphones I have:

```
bt-device -i ...

Name: Indy
Icon: audio-headset

```
> 0 votes

---
Tags: bluetooth, samsung-galaxy-s7
---


# Question
Title: How do I stop Android from auto-enabling "allow unknown sources"?
Every time I restart my Xolo Era 4g, Android 5 Lollipop phone, it auto enables "allow installation of apps from unknown sources" option. I switch it off manually, then in a few seconds, a pop-up for an unknown app to install shows, and on the background, the "unknown sources" button automatically toggles. This keeps on going forever. I haven't rooted my phone and have factory reset it many times.

I first installed an antimalware app, and when I run it, it found around 16 malware, of which I deleted 14 but there was no option to delete the last two. Then I installed the notification app. I restarted my phone. After that, the internet automatically started. I immediately switched it off. Then I went to settings and switched off to allow unknown apps installation.

Then I opened the menu and slide it a few times and the malware attacked again. Opening the settings disclosed that an unknown app installation is switched on. Many apps are promoted for installation. After pressing cancel around 50 times, I went to the menu again and many new apps were installed. I have repeated this scenario two times once I switched the internet on. But with the internet off, I saw an app installation prompt too. I don't remember with the internet off whether the apps got actually installed or not.

Now I opened the notification app and it showed one process having some text similar to *Andriod UI lolipop 5.0*, it had a lollipop icon to its left. On clicking on that, it further showed one process. The process was related to the notification app itself and had text "toaster" or maybe "toasted". Now I have factory reset my phone again and have uninstalled all default apps like Flipkart, Snapdeal, Paytm, UC browser, etc. Now if I'll again restart my phone, the virus will start again.

Please tell a method to not allow any app to toggle the "unknown sources" options on without rooting the phone.

# Answer
This also happened to my phone. Even after several flashes, the torrent of annoying self-install apps keeps happening. Malwarebytes I used can't touch the last infected file; the system settings itself. Even right after flashing the third time, apparently the settings app which is the backbone of everything has been compromised from the get go.

My findings suggest that this was a known vulnerability issues and Google acknowledge it. Alas, there are still no solution nor updates to rectify it other than suggest user to stop using the phones that use 5.1 altogether. FML.

So, out of rage, I took drastic measure. I delete the settings app with the help of Root Explorer. Of course, I've made certain preps before I did, since I'm fully aware the consequence once I did.

Now, I can't even connect my phone to my PC via USB, nor I am able to log in a new Wi-Fi spot. A price I pay just to save my data cap from being drained by involuntary app download.
> 0 votes

# Answer
Go to setting / security / Turn off unknown source. Allow installation of app from unknow source.

Turn on App permission. Go to setting / security / Turn on app permission.

check which app using more battery. Remove unwanted apps.

Also turn off developer option.

As your mobile is infected. You can use nortran, panda or Avast antivirus. You can connect mobile to computer and scan it. Take back up of mobile and restore it.
> 0 votes

# Answer
Factory reset your phone. That will remove the malware.
> 0 votes

# Answer
Switch off make passwords visible button as well as unknown sources. This stops unknown sources opening by itself.
> -4 votes

---
Tags: 5.0-lollipop, installation, malware, unknown-sources
---


# Question
Title: How to unpack/repack system.img of android ROM?
I have OnePlus 6T device which has A/B partition system and has a ROM of user type i.e `[ro.build.type]: [user]`. This device is rooted with Magisk. I have a requirement(Want to place customized sepolicy file under system\_root directory) to modify `system.img`.

I have tried different tools like:

1. simg2img :

```
OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea/img-tools$ ./simg2img system.img sys.raw
Invalid sparse file format at header magi
Failed to read sparse file
OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea/img-tools$

```
2. imgtools

```
OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea/imgtool$ sudo ./imgtool system.img extract
[sudo] password for OMEN:
system.img is not a recognized image. Sorry
OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea/imgtool$

```
3. and more tools even on windows..

but none of them is capable of parsing my `system.img`.

I have copied `system.img` directly from OnePlus6T ROM setup which installs Android 9 on this device without any issue.

Any help on:

1. How to fix the system.img so it will be extracted and repacked fine?
2. Any command that can unpack/repack system.img?
3. Any working tool to accomplish this task?

**Update 1**: I have run `file system.img` and I found that its ext2 image and the tools support ext4.

```
system.img: Linux rev 1.0 ext2 filesystem data, UUID=d09c08e9-628d-590e-a610-3a14de2a8db0 (extents) (large files) (huge files)

```

**Update 2**: Tried to find the magic number and have following result:

```
OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea/imgtool$ xxd system.img | head
00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea/imgtool$

```

**Update 3** Fing the image already unpacked. So to add the required file, I have mount the image as `sudo mount -o loop system.img system_mount` and then tried to copy the contents to another folder with `cp system_mount/* system/` so that I can add the required file and make new image out of it but I got following errors:

```
root@OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea# mkdir system && cp system_mount/* system/
cp: omitting directory 'system_mount/acct'
cp: cannot stat 'system_mount/bin': No such file or directory
cp: cannot stat 'system_mount/bt_firmware': No such file or directory
cp: cannot stat 'system_mount/bugreports': No such file or directory
cp: cannot stat 'system_mount/cache': No such file or directory
cp: cannot stat 'system_mount/charger': No such file or directory
cp: cannot stat 'system_mount/charger_log': No such file or directory
cp: omitting directory 'system_mount/config'
cp: omitting directory 'system_mount/d'
cp: omitting directory 'system_mount/data'
cp: omitting directory 'system_mount/dev'
cp: cannot stat 'system_mount/dsp': No such file or directory
cp: cannot stat 'system_mount/etc': No such file or directory
cp: cannot stat 'system_mount/firmware': No such file or directory
cp: omitting directory 'system_mount/lost+found'
cp: omitting directory 'system_mount/mnt'
cp: omitting directory 'system_mount/odm'
cp: omitting directory 'system_mount/oem'
cp: omitting directory 'system_mount/op1'
cp: omitting directory 'system_mount/op2'
cp: cannot stat 'system_mount/persist': No such file or directory
cp: omitting directory 'system_mount/postinstall'
cp: omitting directory 'system_mount/proc'
cp: cannot stat 'system_mount/product': No such file or directory
cp: omitting directory 'system_mount/res'
cp: omitting directory 'system_mount/sbin'
cp: cannot stat 'system_mount/sdcard': No such file or directory
cp: omitting directory 'system_mount/storage'
cp: omitting directory 'system_mount/sys'
cp: omitting directory 'system_mount/system'
cp: omitting directory 'system_mount/vendor'
root@OMEN-by-HP-Laptop-15-dc0xxx:~/WorkArea#

```

# Answer
**These commands don't work always: sometimes the system\_new.img size becomes greater than system.img.ext4 and hence it doesn't flash on the device. As per my knowledge, the new image size should be equal to or less than the size of the original system image. ---- If anyone will be able to determine the new commands then please share it.**

To Unpack-Modify-Pach the `system.img`, I have followed the following procedure:

a) **Unpacking**

* Run `file system.img` and make sure that `system.img` is Android Sparse Image.
* Rename `system.img` to `system.img.ext4`. // Not required if you will use other name for raw image in below steps.
* With `simg2img system.img.ext4 system.img`, you will get a raw image file named `system.img`
* With `mkdir system`, create directory to mount system.img
* With `sudo mount -t ext4 -o loop system.img system/` you will get all files of `system.img` in `system` folder

b) **Modifying**

* With `ls -l system/init.rc` note permissions: 750
* With `sudo chmod 777 system/init.rc` give write permissions
* With `sudo echo "#MODIFICATION " >> system/init.rc` done some modification in `init.rc`
* With `sudo chmod 750 init.rc` reset `init.rc` to the noted permissions

c) **Calculate system sector size**

* With `tune2fs -l system.img | grep "Block size\|Block count"` you will get block size and count
* With `echo $((1553064 * 4096))` multiply both results. I got 6361350144

d) **Packing**

* With `sudo make_ext4fs -s -l 6361350144 -a system system_new.img system/` you will get `system_new.img` “Android Sparse Image” that has all changes
> 7 votes

# Answer
Easy and it works:

```
truncate --size=3000M system.img
mke2fs -t ext4 -L system_rw system_rw.img
sudo mount system_rw.img
sudo cp -R --preserve=all /path_to_the_ronly_system.img_mountpoint/. /system_rw_mountpoint

```

Example for `cp`: `sudo cp -R --preserve=all /media/user/_/. /media/user/system_rw/`

That's all folks.
> 1 votes

# Answer
Use this tool on linux, I was able to extract the image of my emulator using ext4 on vm running ubuntu.

https://github.com/qmfrederik/extfstools

Still figuring out a way to pack it back. Will update here once I am able to do it
> 0 votes

---
Tags: root-access, file-system, linux, selinux, aosp
---


# Question
Title: How to avoid hitting home key while typing?
I use a Nexus 7 and in landscape and when typing and when pressing the space bar I occasionally hit the home menu key by mistake. I have used "Imersive mode" but I like the status bar to show with the clock so that is not solution.

Is there a way to move that soft menu to the left of the keyboard or somewhere else so I don't activate a menu while typing?

PS: The Device is rooted

# Answer
I would recommend GMD Auto Hide Soft Keys ★ root as your device is rooted, or try Ultimate Dynamic Navbar.

For avoiding permission issues, use App Ops.
> 1 votes

# Answer
You can use Microsoft SwiftKey to have a split keyboard and avoid reaching to the home button like this one
> 5 votes

# Answer
I solved this on my OnePlus 6, OS-10, by going to system Settings \> Buttons & gestures \> Navigation bar & gestures, then select "Navigation Gestures" instead of the default for the fixed navigation bar.

While this completely removed the navigation bar from my phone, it also leaves a bit of unnecessary space below my keyboard (Gboard) now where the navbar used to be.

Also, you will have to acclimate to using Navigation Gestures but it doesn't take long & you may, like me, come to prefer them over the navbar anyway.

Nevertheless, my accidental "Home" instead of "spacebar" issue is now solved and my stress level is much lower as a result.
> 1 votes

# Answer
The easiest way to avoid accidentally touching the home button is to use a soft keyboard with *longer space bar* . For example *Go keyboard* has a bigger space bar that occupies ~50% of the screen width. So space can be touched long away from the home button.
> 0 votes

# Answer
1. You could move the soft buttons using some app like Pie Control.
2. You could try not to do anything with the device, and train yourself to memorize the position of the space bar.

It's not that small in a 7-inch screen, **IF you have average hand dexterity**
(we must cater to the people with disabilities, so a huge **IF**).
I would recommend playing this game, rhythm games really help improving tapping precision.

---

Caveat: all app suggestions and links here are to exemplify apps that could help; use your own caution and Google-fu to choose your apps. In no way I am endorsing those apps, or even have them installed. If needed, browse related apps that suit your security requirements.
> 0 votes

# Answer
On a Jusyea J5 tablet running Android 10:

System - - Navigation bar

Enable Navigation bar:

After that a down arrow appears on the bottom bar to hide the system buttons
> 0 votes

# Answer
Just go to settings, open Language and input, and select Hide.
> 0 votes

# Answer
My solution was to install a custom navigation bar, like this one for example (no root required). Then I changed the height setting in it to shrink the bar until it barely appears on the screen.

Now there is a nice dead space between the keyboard and the navigation bar which prevents accidental touches.
> 0 votes

---
Tags: keyboard
---


# Question
Title: How do I get rid of uneccessary System Memory?
So, it is as the title says: my Samsung Galaxy J5 (2016) is filled up. Not with apps, but with "System Memory". The device only has 8 GB of storage, and about ~48%+ of that (3.3 GB) is used by System Memory. Well, apps fill 4 GB, but that is why I have removed about 20% of the system apps (like Google, Hangouts, and many more).

What do I do? How do I get rid of extreme amounts of space used?

# Answer
There's a new software called Universal Android Debloater Download Universal Android Debloater. It removes bloatwares on any Android phones by using ADB.

By removing bloatware you can get rid of unnecessary system memory.

The main goal is to improve battery performance and privacy by removing unnecessary and obscure system apps. This can also contribute to improve security by reducing the attack surface.

Packages are as well documented as possible in order to provide a better understanding of what you can delete or not. The worst thing which could happen is removing an essential system package needed during boot causing then an unfortunate bootloop. After about 5 failed system boots, the phone will automatically reboot in recovery mode and you'll have to perform a FACTORY RESET. So make a backup first!

**You can also root your device and take control in your hand. Remove unnecessary applications.**

**Even you can install a custom rom, most of the custom roms have a bare minimum apps so less storage usage**
> 1 votes

# Answer
To clear the system memory, you would have to delete the app and then re-install it from the Google Play Store.
> 0 votes

# Answer
The "system memory" Is where the Android OS is installed so there is no possibility to delete that
> 0 votes

# Answer
Just to be clear, you can't get rid of system memory but you can disable some apps that comes with the phone. I've answered something like this Here on how to free up space on your device

Cheers :)
> 0 votes

# Answer
I have a Samsung s9 plus and the app that was taking up all my storage was My files (ironically). I went to settings/apps/My Files/Storage and the data was a whopping 6GB. I hit Clear Data and freed up the space. I'm not sure why a file browser would need to hold on to that much data, but it's working fine without it.
> 0 votes

# Answer
My phone use system memory 120 GB. and apps around 6 GB so I have only 2 GB left. I try clear clash, delete some apps it's increase about 2 GB. so I do this...

1. back up your phone, mine via google account
2. factory reset
3. reinstall your phone again

it's take some times but I gain about 80% free space (more than 80 GB)
> 0 votes

# Answer
## TL;DR

**My system storage size would not stop increasing on my Android 12 Pixel 4a (similar situation to the OP). I was able to reclaim it by saving large dummy files into the free storage (on the user side, internal storage) and then removing them again.**

## Detailed instructions

Pick a large file you have at hand: movie, Linux ISO, Android ROM, etc. Create multiple folders inside the internal storage with dummy names and copy the same file into each one of the folders. You will see the system storage size shrink as you use more and more space on the user side. Once the system storage has shrunk a bit you can copy the next batch of files. Rinse and repeat.

## My experience

In my case I started with a system storage using 72 GB of my 128 GB memory and ended up with only 14 GB of system storage, hence freeing almost 60 GB. I found out that Android would free 1 GB when the storage is full so I worked with around 700 MB of files at a time.

## How to optimize the process

I found out that using a FTP server on my phone and uploading the file from my PC slowed down the process in a way that Android could keep up with the copy and free enough storage in time for the next file. Hence I prepared a large amount of files on my PC and let it run for one hour, until a warning popped up that my phone is running out of storage. I had to fiddle a bit because many apps would crash at this point but after freeing some storage the phone resumed normal operation.

## My theory on why it works (at least for me)

The rationale behind this mechanism is that Android (at least recent versions) will make use of all the free storage it can grab for its internal use, especially cache for system components. Many people already hint at this behavior on the Internet and recommend clearing the app cache, which I did with no result. The catch is that while the user can empty the cache of user installed apps the cache of system components cannot be cleared without rooting the phone or doing a factory reset and none are practical for daily use. I guessed that Android will give up that storage whenever the user needs it and it worked.

## Last words

So at the end the system storage size continuously increasing is probably not an issue which requires fixing. It's unfortunate and inconvenient though that Android shows the internal storage as full when it's actually not and presses the user to delete "useless" pictures and videos instead of cleaning up all the mess inside the system storage.

## References

This issue is documented in different places:
> 0 votes

---
Tags: storage, system-apps
---


# Question
Title: How can I see which Google account WhatsApp is using for its backing up?
How can I see which Google account WhatsApp is using for its backing up?

For example, I have various Google accounts on my phone.

# Answer
> 1 votes
From the WhatsApp app, go to Settings - Chats - Chat backup. Under "Google Drive settings", there is "Google Account" entry that shows the current Google account used to backup.

It is also possible to change the Google account from there. From WhatsApp FAQ - How to back up to Google Drive

> ### Change the account you want to use for backups
>
> 1. Open WhatsApp.
> 2. Tap More options \> Settings \> Chats \> Chat backup \> Google Account.
> 3. Select the Google account you’d like to back up your chat history to.
>
> Note: If you change your Google account, you’ll lose access to any backups saved in that account.

---
Tags: whatsapp-messenger, google-drive
---