# Question
Title: Are updates from APK Mirror legit the same as Google Play Store?
I recently updated the Google Play Services via APK Mirror and now have the January 1, 2021 version. However, some others told me that the only thing the APK Mirror update does is changing the date (in my case: from December to January), and that Google will later send the same update for the same date, which will be the real update.

Anyone else heard anything about this? Are APK Mirror updates legit the same update Google sends, or it simply only changes the date and nothing else?

This is for an Android Pixel phone.

# Answer
The "others" should provide you a source/citation of where they heard that APKMirror changes dates. As already stated on a previous answer:

> Apkmirror.com is run by the same people behind AndroidPolice.com, one of the biggest Android news websites. All uploads are manually vetted and approved, and only free apps are allowed so you won't find any 'cracked' apks or 'warez'.

You might be perplexed by what @bmdixon wrote as there were no citations. To add weight to what he wrote, here are some sample questions and answers from APKMirror FAQ:

> **What is the connection between APK Mirror and Android Police?**
>
> APK Mirror and Android Police are both properties of Illogical Robot LLC, our umbrella company. APK Mirror is managed by the same people who administer Android Police, and the two sites collaborate on an almost daily basis.

> **Does APKMirror.com host paid or pirated apps?**
>
> APKMirror.com has a no-piracy policy and does not host paid apps.
>
> Note: There are very rare exceptions to the no paid apps rule. Sometimes, developers make updates to paid apps available to the public, usually to test beta releases. In such cases, there is usually a license check involved to make sure the apps were previously purchased. MX Player Pro is a notable example of such an exception because J2 Interactive, the app’s developer, provides test APKs on its site.

> Security: What measures do you take to make sure all uploaded APKs are real and created by the respective developers?
>
> 1. All APKMirror.com uploads are verified prior to publishing.
> 2. We make sure that the cryptographic signatures for new versions of all previously published apps match the original ones, which means we know if uploaded APKs were signed by the real devs or someone pretending to be them. Note: APKMirror.com has been protected from the Janus vulnerability in Android from day one.
> 3. a. For new apps that have never been uploaded to APKMirror.com, we try to match the signatures to other existing apps by the same developer. If there’s a match, it means that the same key was used to sign a previously known legitimate app, therefore validating the new upload.
> b. If we see no matches, we try to obtain and compare to a version of the same app from the Play Store or another verified location. If it’s a beta, we will try to get into it. If we can’t, we will attempt to contact the developer.
> c. If we’re unable to verify the legitimacy of a new APK, we will simply not publish it.

It's a good policy to always verify if the site and apps are legit even if they come from Play Store. In this case, the people who advise you about APKMirror I think didn't do their own research.
> 1 votes

---
Tags: applications, updates, apk, alternative-markets
---


# Question
Title: Dual SIM sound, vibration and notification settings
I have a Huawei P20 Pro. This might be a quirk with their software, but I thought I should ask either way.

Let's say you have two phones with two numbers. One is your private phone and one is your work phone. During the day you can put your private phone on silent and your work phone with sound on. When you go home for the day you can put the work phone on silent and turn the sound on for your private phone.

If you put both SIM-cards in the P20 Pro, you cannot choose to have one SIM with sound on, and one on silent. You can choose that one SIM should vibrate and one should not. This only works with sound on. If you put the phone on vibrate, it vibrates for both SIM-cards. If you put it on silent, it is silent for both sim cards.

I also have the problem that I can set the notification sounds to "None", but I can't seem to turn off the vibration for notifications. I want the notifications for all apps in the notification bar, but I do not want sound or vibration no matter the settings for calls. So to sum up, this is what I was hoping to be possible. Is there an app for this?

* Individually control sound, silent mode, and vibration on/off for both SIM-cards
* Turn off sound and vibration for all notifications from apps like Facebook, Messenger, Instagram, SMS Messages, etc. regardless of silent mode, vibration mode or sound volume, etc.

Is one of these or both of these possible, with or without an app? I may root the phone if I can keep the stock firmware, it is safe, and possible to reset.

# Answer
Go to setting / sound and notification / General / phone ringtone. Select second sim card / select ring tone. Now you need to add ringtone with no sound. You can modify existing ring tone to no sound.

You need to root mobile. There is ringtone and ringtone\_2.

You can find under media/ internal / audio / media / here are the list of ringtone. Change it to silent ring tone.

This is the only way. There is no setting to silent one sim card on android.
> 1 votes

---
Tags: notifications, vibration, dual-sim, silent-mode
---


# Question
Title: Termux closes window immediately on Android 10 and 11
Since a few days I have problems with Termux on my Android devices.

On a Lenovo TB-X304F running Android 8.1.0 I got:

```
CANNOT LINK EXECUTABLE "/data/data/com.termux/files/usr/bin/bash": library "libandroid-support.so" not found

[Process completed (signal 6) - press Enter]

```

I was able to recover from this using the procedure from the Termux wiki.

But on a Fairphone 3 running Android 10 and a Google Pixel running Android 11 the Termux window is immediately closed, even when I start it in a failsafe session. There is only a message saying "Termux keeps stopping".

I have removed Termux and reinstalled from F-Droid but to no avail. This is very unfortunate because I mostly use Termux on the Fairphone for quick webserver checks with `openssl` and `netcat`.

I checked the permissions (only Files and Media) and allowed them, but to no avail.

How can I get Termux running again on the newer devices?

**Update:**

According to this comment the issue is only with version 0.105 and should be gone with 0.106.

# Answer
This is a problem that came with version 0.105 of Termux and should be gone with 0.106.

In the meantime this workaround helped me to solve the problem with Android 10 and 11.

Basically it involves the following steps:

1. Install Termux
2. Get access to the home directory inside Termux (for instance with a file manager)
3. Create the directory */home/.termux*
4. Place an empty file named *termux.properties* inside of */home/.termux/*
5. Start termux
> 1 votes

---
Tags: android-10, termux, android-11
---


# Question
Title: How to stop Chrome (on Android) from opening a certain website for joining to Telegram Channels?
On my Android on a mobile set, I recently have encountered a problem. I have Chrome and Telegram installed. The Chrome repeatedly and automatically open a link like https://t.me/joinchat/.... which invites a person to join a Telegram Channel. After this page, it automatically switch to Telegram Messenger which pop-up the same message box for joining the channel.

I don't know whether the source of this pop-up is Chrome or Telegram. Anyway I restricted people who can invite me to Channels on Telegram to my contacts and even blocked suspicious contacts, but it doesn't solve the problem. I disabled pop-ups in Chrome setting but it still didn't help.

How can I disable this pop up for this certain website, or any other solution?

# Answer
> 0 votes
The link to open the telegram channel will be there in your **incognito windows tabs**. Close that tabes from your incognito window. Then these telegram channels opening automatically when you open chrome browser will be stopped.

# Answer
> 0 votes
Go to app settings(settings of your mobile) of telegram and check for defaults Under applink

Disallow "open the supported link in app".

---
Tags: chrome-for-android, telegram
---


title: Create a widget/shortcut to an app URL?

text:
# Question
Title: Create a widget/shortcut to an app URL?
Whatsapp allows to send a message to any number if I browse to https://wa.me/. That displays a web page that has a button that navigates to 'whatsapp://send?phone='.

I want to have a shortcut that asks for the number and then opens the whatsapp:// link (without going through the web page).

I tried to use 'HTTP Request Shortcut' (https://play.google.com/store/apps/details?id=ch.rmy.android.http\_shortcuts), but it only accepts http links and then just shows the response. Tried to use some activity shortcuts, but I can't find one that has the whatsapp activity to open a chat with a prompt to a number.

# Answer
> 2 votes
I'm the creator of the HTTP Request Shortcuts app, and I believe it can be used for what you're describing. You can try this:

1. Open the HTTP Shortcuts app
2. Click the + button at the bottom right to create a new shortcut
3. In the dialog that pops up select "Scripting Shortcut"
4. Give the shortcut a name (and a description and different icon if you want)
5. Click on "Scripting" to open the Scripting editor
6. Enter the following JavaScript code: ````
const number = prompt('Enter the number');
sendIntent({
type: 'activity',
action: 'android.intent.action.VIEW',
dataUri: 'whatsapp://send?phone='+number,
});
````
7. Save your changes.

You can then run this shortcut from within the app, or place it on your home screen. When you click it, it should prompt you to enter a number, and will then invoke the URL 'whatsapp://send?phone=' with the number appended.

Hope this helps. For more information regarding Scripting in the HTTP Request Shortcuts app see the official documentation here: https://http-shortcuts.rmy.ch/scripting

---
Tags: home-screen-shortcuts, app-widgets
---


title: What does this symbol means?

text:
# Question
Title: What does this symbol means?
My friend is asking about this icon on the notification bar. Is it from a application or just find in page?

# Answer
Good question and being a developer I know that an app can add their own icons to the notification bar.

Depending on your phone type you can long hold on an empty part of your screen and then down at the bottom you will see widgets. Hit that and then scroll down or sideways to see if you have the Notification history widget. If you do drag it to a place on your screen. Then you can see what that notification is for.

If you don't have the notification widget you can install a notification history app that will show you your notifications and what they are for.

On the app that I downloaded while I was researching this answer I had to enable Save Non-removable notifications.

If the notification is on the left top then you should be able to swipe down and see what app it is for.

If the notification is on the right you MAY be able to see it in the notification app.

That icon does not look like a default android icon so it's probably an application .

Here is a list of a lot of icons and it might be in there as well. https://material.io/resources/icons/?style=baseline
> 2 votes

---
Tags: notification-icons
---


# Question
Title: How can I configure Google voice access so that I only have to say "hey Google" once?
After I say "hey Google", Google voice access is letting me say a few voice commands. However, after a few ones, I have to say "hey Google" again to be allowed to give further voice commands.

How can I configure Google voice access so that I only have to say "hey Google" once?

I did disable "time out after the speech":

# Answer
I've just updated the voice access application to the version 5.0.35 and the issue is fixed: there's no more timeout, i.e. voice access stays activated until one closes it.
> 0 votes

---
Tags: google, voice-recognition, accessibility
---


# Question
Title: I want to advertise, but I don't want to publicize my personal#...unsure what options are available? (android handset Tracfone service)
My understanding is there are options to advertise with a # that is-not my personal#, without getting a new cell-plan or new device. What I don't know is whether I should be looking carrier-side, or android/handset side (I just swapped from a nearly-decade-long flip phone stubbornness just a couple weeks ago ;P )

Thank you for options to use "781 - 784 - 7707", or some randomly-generated #, to ring my personal handset *as if* the person really dialed my real number "123 456 7890" -- I know there are probably myriad options so any answer is appreciated, looking less for companies and more for what the landscape is for this (does VOIP come into play? Does it matter if I'm part of the futile crowd trying to 'limit google use on their android'? Have heard you can "play" google-voice to do call-forwarding for free, but imagine all calls are indefinitely stored...wouldn't really care, so long as it were **reliable** that I never miss a call to the business number, cannot afford it!!

# Answer
Google Voice was the only free service for getting a "new phone #", that - when someone calls it - would ring my cellphone. I control it from my google-account, it works quite well but not well enough for me for primary business # (will still keep & use it as backup/for certain use) Also there's plenty of app-based ways of getting a 2nd number, but google voice is the only free one.
> 0 votes

---
Tags: calls
---


title: Understanding Samsung Power Settings

text:
# Question
Title: Understanding Samsung Power Settings
I'm quite confused about Samsung's "App Power Management" page. There seems to be several overlapping settings:

1. Adaptive Battery - Limit battery for apps that you don't use often
2. Put apps to sleep - put apps to sleep when they haven't been used for a while
3. Sleeping Apps - These apps won't run in the background
4. Deep Sleeping Apps - ...will never run in the background...
5. Apps that won't be put to sleep

Here's my guess interpretation:

* (1) & (2) sound like exactly the same setting. I'm assuming (1) is the stock Android 10 implementation whereas (2) is the custom Samsung version that possibly predates Android 10 and potentially more aggressive? Honestly I'm not sure why they're keeping both.
* Same goes for (3) & (4). Both sound the same to me. It looks like again maybe (3) is the original OS setting and (4) is some Samsung thing.
* I'm assuming (5) is an exclusion list for apps that won't be picked up by (1) & (2)
* None of these settings are related to Doze mode and even putting an app under (5) doesn't disable dozing for that app.

Would love to get more details if you have them.

Edit: Galaxy 20

# Answer
> 5 votes
This is an educated *guess*, based on my interests in battery related things.

* Android Pie introduced five buckets, to classify apps, as a part of power management, in the sense app restrictions (and therefore battery usage) are based on the buckets they belong to. Exact implementation is left to OEMs (that's why I said "guess"). Briefly:

> * **Active:** App currently being used.
> * **Working Set:** An app is in the working set bucket if it runs often but it is not currently active. Example, social media apps
> * **Frequent:** used regularly, but not necessarily every day. For example, a workout-tracking app.
> * **Rare:** not often used. For example, a hotel app that the user only runs while they're staying at that hotel.
> * **Never:** installed but never run are assigned to the never bucket.

Apart from this, we have and battery optimization (found in battery settings). With this as background:

1. **Adaptive Battery** This is an AI feature which learns from usage, in terms of when (at what time) is an app used, what is the frequency, and things like screen brightness etc. Aim is to use AI and the buckets together to optimize battery and user experience

> put AI at the core of the operating system and focuses on intelligent and simple experiences.

For more see What is exactly "Adaptive battery", and what does it mean for app developers?

2. **Put apps to sleep:** This is battery optimization and you can select apps to be included or excluded. This is also linked to doze. Let's say your screen off is set to 5 minutes and your browser is selected to be a part of this set of apps. After screen off, and a certain interval, doze kicks in and your browser background activities are paused.
3. **Apps that won't be put to sleep:** If you *exclude* an app from battery optimization, it will function when screen is off and not be affected by doze. For example it may be your music player.
4. **Deep sleeping apps:** This is advanced battery optimization found in some OEMs and is a pain point at times for users and developers. AFAIK, all OEMs don't have this. Don't kill my app.com gives examples of how badly this optimize and advanced optimization hurt for different OEMs.
5. **Apps that won't be put to sleep:** may be system apps like alarm (you can't let that go to sleep) or user apps like VPN, alarm etc.

To reiterate, I don't have a Samsung device but I am fairly sure that the description above is correct in broad terms. Corrections by way of posting answers are welcome.

# Answer
> 0 votes
To properly answer this:

Sleeping apps - These apps won't run in the background. They may not receive updates or send notifications

This means they cannot be started in the background state. The user must open them before anything can happen.

Deep Sleeping apps - Deep sleeping apps will never run in the background. They'll only work when you open them

This means even if you open the app, and leave the app (home button) they will be shut down after a few minutes, or when screen shuts off. They also cannot be started in the background state.

Sleeping apps work like normal if you open them, deep sleeping apps only work when you are interacting with them.

---
Tags: battery-life, background-process
---


# Question
Title: Can you use a screenshot of the "export accounts" QR Code of Google Authenticator as a backup?
In the Authenticator app you can hit transfer accounts -\> Export Accounts. It will present with you a QR Code.

What exactly is this QR Code? Can it be used to backup Google Authenticator?

I am looking to hard reset my phone and I am looking for a way to backup and restore Authenticator.

# Answer
> 7 votes
The QR code contains all your private keys for generating the 2fa login code for each of the accounts you chose to export, so yes you can use it to backup and transfer to a new device. I would test that the screen shot works properly, and be very careful with the screen shot backup.

You can even extract the actual private keys from the QR code, i.e. with this script, https://scito.ch/content/extract-secret-keys-google-authenticator-qr-export

# Answer
> 1 votes
Get verification codes with Google Authenticator - Android - Google Account Help explains how the QR codes are used:

* They are used to transfer authentication codes on to new device or in your case after factory reset. QR code needs to be **scanned** to restore account(s). Screenshots **may not work**. It's better to use a scanner as explained here
* You need to generate one QR code per account, if you are using multiple accounts.
* They don't backup the authenticator app itself, you need to install the app on the new device or use Google cloud backup to restore app. Note that the restored app from cloud only restores preferences and not codes. Neither, is using `adb` to backup a good idea. If your device is rooted, of course, you can backup fully and restore using .
* > What exactly is this QR Code?

This blog explains (it's beyond me)

> > The QR codes simply divulge a URI with the secret key for generating tokens. They look like: `otpauth://totp/[keyname]?secret=[secretkey]`

* Note that you are better off using Authy app as recommended in Google help page for reasons :

+ Recovery backups are encrypted.
    + Multi device support.
    + Better password protection.
    + Recognise all Google codes

    - **Most importantly** you can backup and restore easily.

---
Tags: google-authenticator
---


# Question
Title: Cannot Restore Data for Signal Messenger 4.16 with Titanium Backup
I have backed up and restored Signal with Titanium for years without any incident, up until now. The other day I was encountering a boot loop playing around with an Xposed module. I did a re-flash of the ROM to regain access and then backed up my data with Titanium as usual. After a full wipe and re-flash all data was restored correctly (even for system apps), except Signal which force-closes instantly every time I open it. I've read about false UID re-assignments and tried the Fix Permissions app without any result.

Fellow member @Josh experienced the same issue and attributed it to changes in the most recent Signal version 4.16 which pointed me into the right direction to find a workaround. I installed version 4.15.5 from here and then restored data only from Titanium. Now Signal will start normally again, but my messages from about the last 2 weeks are missing. Of course this can only be considered a temporary solution. I wonder what can cause this kind of behavior in Titanium, and if there are any similar backup solutions available that do work with Signal.

Update: At last, the stable released yesterday (4.17.5) has finally gotten the long-awaited backup option:

https://support.signal.org/hc/en-us/articles/360001890291-Restoring-messages-on-Signal-Android

For rooted users, it would still be easier to backup and restore all apps in one batch after a ROM switch. Unfortunately, the upgrade from 4.15.5 caused Signal to crash instantly upon opening. All I could do was downgrade and export a plaintext backup which means I have now lost all media and group messages. Note that when you import the plaintext backup, you might need to use an earlier version. I couldn't restore with 4.17.5 since the app would always crash (10+ MB file). Only after going back to 4.15.5 the plaintext import was successful. Upgrading afterward went without problems.

# Answer
> 1 votes
I side-stepped the issue:

* Turn on backups on old phone (the seem to happen daily)
* When restoring, place the `.backup` file in the sdcard root diretory. Putting it under `sdcard/Signal/backups` will have the file NOT be read, and no error message given, either.

The 2nd point took me hours to work out.

---
Tags: root-access, restore, titanium-backup, signal-private-messenger
---


# Question
Title: Does Titanium Backup backup the Signal private Key?
I am looking for a way to backup my private key for the Signal messenger application. Nothing has worked so far, and I am curious whether anyone can confirm or deny that Titanium backup will save and restore the private key of a Signal install.

# Answer
Signal 4.17.0 introduced encrypted backups. This is the preferred migration path. Also the Titanium Backup route does not work in current releases.

---

### Previous Post

I just tried this and it worked flawlessly.

After restoring Signal on your new Phone you should re-activated your connection by unregistering and re-registering to the Signal servers. As of now you can do this in the Signal Settings \> Advanced tab by toggleing Signal messages to de-activate then re-activate \[1\]. In this Process you will have to re-verify your phone number and you'll have to reconnect your Signal-Desktop clients afterwards.

You won't loose your Private key or your Signal-Desktop messages though.

\[1\] https://support.whispersystems.org/hc/en-us/articles/213190487-Why-is-there-a-delay-in-receiving-messages-
> 4 votes

# Answer
Titanium Backup does backup the key, but there's something internal to Signal that realises that it's installed on a new phone and refuses to use the old key.

Set recurring backups inside Signal instead.

Be aware that when restoring:

Place the `.backup` file in the sdcard **root directory**. Putting it under `sdcard/Signal/backups` will have the file NOT be read, but no error message given, either.

The backup is only read correctly if the metadata is displayed in a confirmation step. This took me hours to work out. \>:|
> 3 votes

---
Tags: backup, titanium-backup, signal-private-messenger
---


# Question
Title: Flashing Nexus 7 factory image fails on writing userdata
So I've been attempting to factory restore my good ol' Nexus 7 (2013) LTE (deb) all day, and I can't get past this one error that has me stuck. I'm using the stock image from Google, and where I'm stuck at is when running the flash-all.sh from the command line, everything looks great up until "Writing 'userdata'":

```
...
Erasing 'userdata'                                 OKAY [ 19.272s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 6997491 4k blocks and 1749664 inodes
Filesystem UUID: ee2e310b-02d9-4271-b8ff-75d231a0a955
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Sending 'userdata' (180 KB)                        OKAY [  0.011s]
Writing 'userdata'                                 FAILED (remote: 'Bogus size sparse and chunk header')
fastboot: error: Command failed

```

I found a similar question posted related to a Nexus 5 having the same issue (Flashing Nexus 5 factory image fails on writing userdata), and the same general workaround seems to work up to getting to the android boot screen, except the device is stuck in a bootloop. One comment mentioned needing to resize the partition prior to the first boot. So far, I haven't been able to find how exactly to do that. Anybody got an idea?

Appreciate any help!

# Answer
This can be resolved by manually performing the actions specified in the flash-all.bat file. I had the exact same problem and this stack exchange page got me sorted.

Flashing Nexus 5 factory image fails on writing userdata
> 1 votes

---
Tags: rom-flashing, fastboot, nexus-7
---


title: Read logs from recovery

text:
# Question
Title: Read logs from recovery
I want to read logs of Android devices having stuck at the boot logo, but I don't have ADB access.

Is it possible to read logs displayed by logcat in recovery by mounting `/system` partition?

# Answer
> 4 votes
The files (if they are considered as such) to which logs are written by the device are not in `/system` but in `/dev/log`.

These "files" are reset at every boot, so unless the device you have has a boot-time script that automatically saves logs to a file in, say, `/sdcard`, there is sadly no way to retrieve the logs you want while in recovery.

# Answer
> 0 votes
With TWRP, going Advanced → Copy Log could be a solution.

---
Tags: recovery-mode, logging
---


# Question
Title: Join an existing Google Meet meeting from the home screen with an URL
This seems to be quite an edge case, as I can find no information on this.

**Context**
We have a regular "coffee chat" meeting in our group, and we use a Google Meet URL for this meeting, always the same, and we meet at known times a day. No need to have a calendar entry for this.

So, on the desktop computer, I can always easily reuse the URL (e.g. such one: https://meet.google.com/abc-defg-hjk) like described here.

**Problem**
But now I am mostly using my Android Tablet to join, and I wonder how to set up a Home Screen icon/widget/link with that URL.

I can use Google Chrome to paste the URL into, but it will automatically start the Meet app. I have no chance to create a shortcut link first. Also, I have not found yet a way to create a link directly from the home screen.

**Question**
How to create a home screen icon/link/widget that directly opens a given Google Meet URL?

# Answer
Turn off the internet on the device and open the meet URL in a browser. Now, the URL will stay in the adress bar, and you can save it to the home screen the usual way.
> 5 votes

---
Tags: home-screen-shortcuts, google-meet
---


# Question
Title: Stop and disable Android system update on Motorola phones
My phone is a non-rooted Motorola Moto G4 Play (XT1607). It is getting old, there's no space left, and I don't want to update the Android operating system. By mistake, I clicked "Update" and it downloaded the update, but it is not yet installed.

Instead of proceeding to update, I want to delete it. I see a system app called `com.android.managedprovisioning`. Could this be it?

# Answer
> 3 votes
Follow these steps:
1-You can force close updater app:
Go to system-app-system updater then press "Force close"
2-uninstall updater app for the current user:
Note:You can restore updater app by doing "factory reset" to your phone?

```
pm uninstall -k --user 0 com.android.updater

```

**Note:**"com.android.updater" is package name of "updater" app in my phone,In your phone "updater" app may have another package name.You can find it using
Package Name app.
I hope this help you

# Answer
> 0 votes
In my case, I clicked the progress bar and a pop-up message showed and made it possible to cancel. In deleting the update, try this: File Explorer\>Downloaded\_rom\>delete the update package there.

# Answer
> 0 votes
I used PD NDM (package disabler) app, downloaded from its own website and requests support on how to disable update to version 9 android pie. Disable the following :

com.sec.android.soagent

com.wssyncmldm

If com.wssyncmldm is not found, please disable com.wssnps

# Answer
> 0 votes
On Moto Z2 Force, run this command from your PC when Android device is connected via USB in Photo transferring mode, USB debugging enabled.

`adb shell pm disable-user --user 0 com.motorola.ccc.ota`

You should not get anymore update popups.

---
Tags: updates, ota-update, motorola
---


# Question
Title: Why is my internal memory almost full while the files add up to only a few gigabytes?
My HTC One M8 internal memory is almost full (15.40 out of 16). The phone says it's mostly applications. But when I connect it to my computer, go to Internal Storage and add the sizes of all directories, the total is about 3 gigabytes.

# Answer
> 0 votes
Devices have different partitions for different purposes. Data storage is bigger because you will need to store your pictures etc. BUT the partition that your device uses for apps is always limited. You might want to move some apps to sd if you are able to. For example here is the partition table to a Samsung Galaxy S5:

```
aboot -> /dev/block/mmcblk0p6
apnhlos -> /dev/block/mmcblk0p1
backup -> /dev/block/mmcblk0p18
boot -> /dev/block/mmcblk0p15
cache -> /dev/block/mmcblk0p24
carrier -> /dev/block/mmcblk0p25
dbi -> /dev/block/mmcblk0p4
ddr -> /dev/block/mmcblk0p5
efs -> /dev/block/mmcblk0p12
fota -> /dev/block/mmcblk0p17
fsc -> /dev/block/mmcblk0p19
fsg -> /dev/block/mmcblk0p9
modem -> /dev/block/mmcblk0p2
modemst1 -> /dev/block/mmcblk0p13
modemst2 -> /dev/block/mmcblk0p14
pad -> /dev/block/mmcblk0p10
param -> /dev/block/mmcblk0p11
persdata -> /dev/block/mmcblk0p22
persist -> /dev/block/mmcblk0p21
recovery -> /dev/block/mmcblk0p16
rpm -> /dev/block/mmcblk0p7
sbl1 -> /dev/block/mmcblk0p3
ssd -> /dev/block/mmcblk0p20
system -> /dev/block/mmcblk0p23
tz -> /dev/block/mmcblk0p8
userdata -> /dev/block/mmcblk0p26

```

Hope this helps.

# Answer
> 0 votes
In most Android phones, the application data is also saved in a hidden data directory which is part of internal storage.

You can free up that space by clearing app cache and data and removing useless apps.

You can go to settings \> applications \> app\_name and see how much data it has stored.

Warning: clearing app data will make the app behave as if it's just freshly installed and never used.

You can also clear your social media apps directory like whatsapp and Facebook folder to make more space

---
Tags: internal-storage, htc-one-m8
---


# Question
Title: How to properly ENABLE dm-verity and FEC for /system on Motorola X4 with LineageOS 17.1?
I have built LineageOS 17.1 for Motorola X4 / payton with unlocked bootloader with reverted commit 81cc203c06596878d2beb62ab6e07f36e278018e. The common question is how to disable dm-verity, but I want to know how to properly enable it for /system . The vendor partition is called oem on Motorola.

AVB was deactivated (the device is missing *fastboot flash avb\_custom\_key* but has a vbmeta\_a/b partition?) During build these options were set:

```
PRODUCT_SUPPORTS_BOOT_SIGNER := true
PRODUCT_SUPPORTS_VERITY := true
PRODUCT_SUPPORTS_VERITY_FEC := true

```

I checked *system.img* and *vendor.img* with verity\_verifier script and the *verity\_key* and it outputs VERIFIED. I flashed boot, vendor and system to the corresponding partitions. */verity\_key* is inside the *boot.img*. The boot cmdline contains *androidboot.veritymode=eio* and *veritykeyid=id:47b1fe9xxxxxx*. *The boot.img* only contains recovery.fstab, verify option is set there, too. adb enable-verity is succesful for / and for /vendor. */vendor/etc/fstab.qcom* contains the verify option for system and vendor partition.

The following obversations were made:

* During boot I see a message "Verity mode is set to disable". What is this referring to?
* Modifiying data (*touch test*) on the vendor/oem partition from Lineage Recovery results in the errors being corrected by FEC, messages shown from dmesg after next boot:

> ```
> [    3.023786] init: [libfs_mgr]Enabling dm-verity for vendor (mode 0)
> [    3.175842] device-mapper: verity-fec: 259:31: FEC 0: corrected 21 errors
> [    3.257369] device-mapper: verity-fec: 259:31: FEC 4096: corrected 17 errors
> [...]
>
> ```

The created file *test* vanishes after boot.

* Modifying data on the system partition from Lineage Recovery is not corrected by FEC and no messages show up. The created file *test* is visible on the partition after next boot.
* There is no difference between locked and unlocked bootloader (*fastboot flash lock*).

What am I missing here?

# Answer
> 3 votes
**Warning**! Use at your own risk! The sense and especially added security of all of this may be disputed. Find some notes about security in the end.

**tl;dr:**

It took me some days to find a solution to get this:

```
[    2.251328] init: init first stage started!
[    2.251561] init: Switching root to '/first_stage_ramdisk'
[    2.252614] init: Using Android DT directory /proc/device-tree/firmware/android/
[    2.603025] init: [libfs_mgr]Enabling dm-verity for system (mode 0)
[    2.603181] init: [libfs_mgr]Verity table: updated block device from '/dev/block/platform/soc/c0c4000.sdhci/by-name/system' to '/dev/block/platform/soc/c0c4000.sdhci/by-name/system_b'
[    2.603195] init: [libfs_mgr]Verity table: updated block device from '/dev/block/platform/soc/c0c4000.sdhci/by-name/system' to '/dev/block/platform/soc/c0c4000.sdhci/by-name/system_b'
[    2.753873] device-mapper: verity-fec: 259:33: FEC 0: corrected 22 errors
[    2.830804] device-mapper: verity-fec: 259:33: FEC 4096: corrected 7 errors
[    2.831080] init: [libfs_mgr]superblock s_max_mnt_count:65535,/dev/block/dm-0
[    2.854916] device-mapper: verity-fec: 259:33: FEC 0: corrected 22 errors
[    2.878336] device-mapper: verity-fec: 259:33: FEC 4096: corrected 7 errors
[    3.001281] device-mapper: verity-fec: 259:33: FEC 1052672: corrected 18 errors
[    3.001825] EXT4-fs (dm-0): mounted filesystem without journal. Opts: barrier=1
[    3.001947] init: [libfs_mgr]__mount(source=/dev/block/dm-0,target=/system,type=ext4)=0: Success
[    3.002215] init: Switching root to '/system'
[    3.139199] device-mapper: verity-fec: 259:33: FEC 3133440: corrected 12 errors
[    3.272389] init: [libfs_mgr]Enabling dm-verity for vendor (mode 0)
[    3.272662] init: [libfs_mgr]Verity table: updated block device from '/dev/block/platform/soc/c0c4000.sdhci/by-name/oem' to '/dev/block/platform/soc/c0c4000.sdhci/by-name/oem_b'
[    3.272679] init: [libfs_mgr]Verity table: updated block device from '/dev/block/platform/soc/c0c4000.sdhci/by-name/oem' to '/dev/block/platform/soc/c0c4000.sdhci/by-name/oem_b'
[    3.276744] init: [libfs_mgr]superblock s_max_mnt_count:65535,/dev/block/dm-1
[    3.279830] EXT4-fs (dm-1): mounting with "discard" option, but the device does not support discard
[    3.279845] EXT4-fs (dm-1): mounted filesystem without journal. Opts: barrier=1,discard
[    3.279935] init: [libfs_mgr]__mount(source=/dev/block/dm-1,target=/vendor,type=ext4)=0: Success

```
* Build LOS 17.1 with the reverted commit from the initial question
* Place verity\_key in ramdisk/first\_stage\_ramdisk folder
* Append the following cmdline options, this is the android testing key:

BOARD\_KERNEL\_CMDLINE += root=/dev/dm-0 dm=\\"system none ro,0 1 android-verity Android:\\#7e4333f9bba00adfe0ede979e28ed1920492b40f /dev/block/by-name/system\_b\\" androidboot.slot\_suffix=\_b rootwait androidboot.force\_normal\_boot=1
* Add system partition to the DTB fstab and include verify option

There are more caveats here than I thought. I will also try to include all words I was searching for in this text.

**Key findings regarding booting and dm-verity about the payton**

* It seems to be a legacy SAR (system-as-root) device (most important read!). The kernel mounts the root/system filesystem itself, no ramdisk or ramdisk partition involved. Typical cmdline arguments for the kernel are *root=/dev/block/mmcblk0p6x*, where x is 5 or 6 for the system A/B partition and init=/init.
* The original motorola files do not contain a fstab in the ramdisk
* There is no system partition defined in the DTB in the motorola files
* Therefore the bootloader seems to verify the boot image, most likely with some certificates baked into the bootloader? (strings -a on the bootloader hints at this). Then it sets the appropriate start partition and maybe the command line for verity verification, more on this later.
* vendor is called oem on motorola.
* Like mentioned the payton is missing *fastboot flash avb\_custom\_key*, so no new shiny Android Verified Boot (AVB) 2.0 with vbmeta.img. Most likely because it was initially shipped with Android 7.0 and nobody cared updating the structures.

**Some things about building LineageOS 17.1**

* Build LOS like written in their help
* LOS seems to also boot legacy SAR, except when you enter recovery mode.
* Using the instructions below will give you something like Android Verified Boot 1.0
* The build process prepares the following things for dm-verity integration: Creating boot.img, system.img and vendor.img, adds dm-verity metadata to the end of system.img and vendor.img and signs boot.img. vendor is verified in the default LOS configuration by adding it to fstab and additionally creating a DTB fstab entry for it.

**The general build process**

* Codebase is impressively huge: 190 GB without ccache
* Revert the mentioned commit in dm-android-verity.c
* Use the following Kernel cmdline.
* This circumevenes A/B and slotselect mechanism for selecting the proper system\_a or system\_b. Without bootloader support I do not know if it is possible to ever reenable A/B.
* Also this configuration always skips recovery, even if you try to boot to recovery from bootloader.
* This did not work with androidboot.veritykeyid, I do not know why (yet).
* You have to escape " and # here!

> device/motorola/sdm660-common/BoardConfigCommon.mk:
>
> BOARD\_KERNEL\_CMDLINE += root=/dev/dm-0 rootwait BOARD\_KERNEL\_CMDLINE += dm=\\"system none ro,0 1 android-verity Android:\\#7e4333f9bba00adfe0ede979e28ed1920492b40f /dev/block/by-name/system\_b\\" BOARD\_KERNEL\_CMDLINE += androidboot.slot\_suffix=\_b BOARD\_KERNEL\_CMDLINE += androidboot.force\_normal\_boot=1 BOARD\_BUILD\_SYSTEM\_ROOT\_IMAGE := false

* without force\_normal\_boot a "normal" boot goes to recovery.

> kernel/motorola/msm8998/arch/arm/boot/dts/qcom/sdm630.dtsi:
>
> system { compatible = "android,system"; dev = "/dev/block/platform/soc/c0c4000.sdhci/by-name/system"; type = "ext4"; mnt\_flags = "ro,barrier=1"; fsmgr\_flags = "wait,verify,slotselect"; };

* Maybe you can also leave out the DTB change (mounting partitions with DTB will be obsolete in Android 11) and use a fstab file (somewhere, maybe in first\_stage\_ramdisk).
* make sure verity is enabled in ./make/target/product/verity.mk

> PRODUCT\_SUPPORTS\_BOOT\_SIGNER := true PRODUCT\_SUPPORTS\_VERITY := true PRODUCT\_SUPPORTS\_VERITY\_FEC := true

* When changing the verity key, do not forget to add it to the kernel in *kernel/motorola/msm8998/certs* and check the certificates in the running system in /proc/keys
* You can get the last (failed) boot messages in */sys/fs/pstore/console-ramoops*
* The resulting system behaves like 2SI ramdisk SAR

**Main Question: Does this add security to the device?**

* You can lock the bootloader afterwards with fastboot flashing lock
* The boot partition has to be verified manually with the key ids shown while booting (at least I think it is some signatures of the signed boot.img)
* Flashing partitions from bootloader does not work
* Entering recovery also does not work
* *fastboot boot file.img* gives an error
* *fastboot flashing unlock* clears userdata, this is good!
* In case anything goes wrong with the running system, you have to clear your device.
* Updating just got a little bit harder without changes to the updater because the A/B partition is hardcoded
* Root needs to be enabled for updates (at least ADB root), so this will stay a userdebug build.
* Changes to */system* can be executed without messing the dm-verity, just sign the changed system.
* dm-verity is in eio mode here, I actually did not try to set it to enforcing.

**Open questions**

* Can you change the kernel cmdline from bootloader?
* Maybe you can blankflash (fastboot oem blankflash) the device, I do not know what happens in this case.

Have fun!

---
Tags: lineageos, dm-verity
---


# Question
Title: Stuck in twrp after trying to root Samsung A7(2018)
I tried to root my samsung A7 yesterday, I flashed twrp with odin and when I try to install magisk it says "Zip file is corrupt",

I don't have any OS now and I'm left with only twrp.

I flashed twrp again different times with odin but same. I can't boot in fastboot and when I tried with adb sideload my device is not discoverable. I followed all the steps from this video Youtube Video when I tried to root my device.

Is there anyway to bring my samsung back or it's bricked?

Device Model: A750FN

# Answer
> 1 votes
Thanks to @alecxs I was able to fix it. The reason why I was stuck in twrp is because I wiped system through twrp(I was frustrated when I couldn't boot in magisk after many times of trying so I decided to let the System go, the first time trying to root an phone so I didn't know what I was doing).

DON'T WIPE THE SYSTEM!

I still don't know why "Zip file is corrupt" ocurred, maybe because I tried to install magisk through sd card and the sd card was corrupted, or maybe because the twrp I flashed was unofficial, I don't know, but here is how you can recover your phone back:

1.Install the stock rom/firmware for your model at samfw.com,

before you install the stock rom for your phone model you should know your phone CSC(Country Specific Code), if you don't know it just boot in download mode and you will see Carrier ID associated with phone CSC Code

2.Boot in download mode and flash the downloaded rom. If that goes well and now you have your phone back but you still want to root then go to Magisk Installation Guide and follow the instructions.

If you experienced the same error like mine while trying to flash magisk on twrp with sd card then next time instead of sd card try to copy magisk in cache partition and then in twrp flash from there.

---
Tags: samsung, rooting, twrp, odin, magisk
---


# Question
Title: Android system Webview installed but not used by apps
I downloaded and installed the latest version of android system WebView from the app store on my android tablet (running 5.0.2).

But apps still go on using the old webview version (39.0.0.0).

How can I get them to switch ?

For info, I've tried disabling the old one, and it get re-enabled when I open an app that uses webview.

# Answer
> 22 votes
You can't change this without root.

The system framework is hard-coded to use a specific package for applications that request a WebView component. By default (in AOSP) it uses the value `com.android.webview`, which is the version that is compiled during the AOSP build process. On devices from manufacturers that modify this component, the package name may differ. Regardless, in order to replace the WebView that shipped with your device, you have to modify this value to instead be `com.google.android.webview`.

The "by hand" way of doing this would be to pull the framework-res.apk file from your device, de-compile it, and change the value of the `config_webViewPackageName` resource variable. It should be located at `/res/values/strings.xml` within the .apk. Once you've done this, you would need to re-package everything and push the new .apk to your device, replacing the old one.

An alternative method that you can attempt is to install the Xposed framework and then use the WebViewGoogle module. If you use a custom ROM, you may also be able to find a package that will permanently modify the necessary framework components (or it may be built to use Google's WebView by default).

My hypothesis would be that this restriction exists in part because the system relies on a WebView implementation existing in some form, so if it could be modified by a user it could break the system in odd ways. There would also be security implications to allowing apps to override the system WebView, such as a bad-actor attempting to provide a malicious one without the user knowing.

As a point of further explanation: the reason the System WebView is available in the Play Store to begin with is that Nexus devices (and possibly others) ship with it pre-installed, and configured to use it. It is, in effect, the system WebView for those devices.Thus, Google is able to provide WebView updates for these devices via the Play Store so that full system OTAs are not necessary just to update the browser/WebView. There are other components that Google has migrated to Play Store updating in a similar fashion, with the reasoning essentially being that it is faster. Phone and Contacts were two of the more recent ones, with the linked article providing some additional detail regarding why Google has taken this approach.

# Answer
> 3 votes
I have followed @eldarerathis's answer and made a step by step guide on how to update webview on an Android 5.0 emulator. It probably works on Android 5.1 to Android 6.0 as well. Hope it will help anyone who wish to use a more recent webview on old Android devices.

https://gist.github.com/ppoffice/9ce9790708eeabbec1281467e25139e4

## Tools

1. emulator (30.3.5) (via Android SDK)
2. adb (30.0.5) (via Android SDK)
3. apktool (2.5.0) and Java runtime
4. zip (3.0)
5. unzip (6.0)

Make sure you have `JAVA_HOME` and `ANDROID_HOME` environment variables correctly set.

## Steps

1. Create a new Android Virtual Device (AVD) using Android Studio or avdmanager. Here, I created an Android 5.0 device with the following system image:

```
Path                                        | Version | Description                                | Location
system-images;android-21;google_apis;x86_64 | 32      | Google APIs Intel x86 Atom_64 System Image | system-images/android-21/google_apis/x86_64/

```

The AVD name is

```
$ emulator -list-avds
Pixel_2_API_21

```
2. Boot the AVD and make its system partition writable:

```
$ $ANDROID_HOME/tools/emulator @Pixel_2_API_21 -writable-system

```

And the AVD starts, remount its system partition using `adb`:

```
$ $ANDROID_HOME/platform-tools/adb remount

```
3. Download the Android System Webview of your desired version from the internet. For example, you may use `Android System WebView 88.0.4324.93 (x86 + x86_64) (Android 5.0+)` from apkmirror.com. The package ID is `com.google.android.webview`, which is different from the default system webview (`com.android.webview`). Also, make sure your package has the same ABI as your AVD.
4. Extract the webview package using `unzip` and push it and the native libraries to the system partition of your AVD:

```
$ unzip <path/to/your/webview.apk>
$ $ANDROID_HOME/platform-tools/adb shell mkdir /system/app/ChromiumWebview
$ $ANDROID_HOME/platform-tools/adb push <path/to/your/webview.apk> /system/app/ChromiumWebview/webview.apk
$ $ANDROID_HOME/platform-tools/adb push <path/to/your/extracted/webview.apk>/lib /system/app/ChromiumWebview/

```

After this step is done, you should have the following new files in your AVD:

```
$ANDROID_HOME/platform-tools/adb shell ls -lR /system/app/ChromiumWebview/lib                                                            ✔

/system/app/ChromiumWebview/lib:
drwxr-xr-x root     root              2021-01-27 00:36 x86
drwxr-xr-x root     root              2021-01-27 00:36 x86_64

/system/app/ChromiumWebview/lib/x86:
-rw-r--r-- root     root        43360 1979-12-31 00:00 libchromium_android_linker.so
-rw-r--r-- root     root         3680 1979-12-31 00:00 libcrashpad_handler_trampoline.so
-rw-r--r-- root     root     78167008 1979-12-31 00:00 libwebviewchromium.so

/system/app/ChromiumWebview/lib/x86_64:
-rw-r--r-- root     root        44896 1979-12-31 00:00 libchromium_android_linker.so
-rw-r--r-- root     root         5104 1979-12-31 00:00 libcrashpad_handler_trampoline.so
-rw-r--r-- root     root     78545528 1979-12-31 00:00 libwebviewchromium.so

```
5. Restart Android services to let the Package Manager pick up our new webview package:

```
$ $ANDROID_HOME/platform-tools/adb shell stop
$ $ANDROID_HOME/platform-tools/adb shell start
$ $ANDROID_HOME/platform-tools/adb shell pm list packages | grep webview
package:com.android.webview           --> the built-in and outdated webview
package:com.google.android.webview    --> our new webview

```
6. Check if the package is registered with the Package Manager. Make sure `codePath`, `nativeLibraryPath`, and `primaryCpuAbi` are correct:

```
$ $ANDROID_HOME/platform-tools/adb shell cat /data/system/packages.xml | grep com.google.android.webview
<package name="com.google.android.webview" codePath="/system/app/ChromiumWebview" nativeLibraryPath="/system/app/ChromiumWebview/lib" primaryCpuAbi="x86_64" secondaryCpuAbi="x86" flags="...

```
7. As the default webview package name used by the Android OS is hard-coded in older Android OSes (https://android.stackexchange.com/a/139415), you need to modify the Android framework to use the new package name. First, pull `framework-res.apk` from your AVD and decompile it using `apktool`:

```
$ $ANDROID_HOME/platform-tools/adb pull /system/framework/framework-res.apk
$ apktool d framework-res.apk

```
8. Update the `<path/to/extracted/framework-res.apk>/res/values/strings.xml` file to use your new system webview package name:

```
--- res/values/strings.xml   2021-01-27 00:53:05.000000000 -0500
+++ res/values/strings.xml   2021-01-27 00:54:38.000000000 -0500
@@ -70,7 +70,7 @@
     <string name="config_appsAuthorizedForSharedAccounts">;com.android.settings;</string>
     <string name="config_defaultNetworkScorerPackageName" />
     <string name="config_persistentDataPackageName" />
-    <string name="config_webViewPackageName">com.android.webview</string>
+    <string name="config_webViewPackageName">com.google.android.webview</string>
     <item type="string" name="timepicker_circle_radius_multiplier">0.82</item>
     <item type="string" name="timepicker_circle_radius_multiplier_24HourMode">0.85</item>
     <item type="string" name="timepicker_selection_radius_multiplier">0.16</item>

```
9. Repack `framework-res.apk` using `apktool`.

```
$ apktool b <path/to/extracted/framework-res.apk>

```

There might be a few errors you need to fix before the package can be repacked. For example, if you encountered the following error:

```
Error: String types not allowed (at 'APKTOOL_DUMMY_34e' with value '').

```

you should replace `<drawable name="APKTOOL_DUMMY_..." />` with `<item type="drawable" name="APKTOOL_DUMMY_..." />` in the `<path/to/extracted/framework-res.apk>/res/values-nodpi-v4/drawables.xml` file and retry.
10. The repacked `framework-res.apk` is placed under `<path/to/extracted/framework-res.apk>/dist`. Extract the `resources.arsc` file from it and merge it to the original `framework-res.apk`:

```
$ unzip <path/to/extracted/framework-res.apk>/dist/framework-res.apk resources.arsc -d .
$ zip -0 <path/to/original/framework-res.apk> resources.arsc

```

The original `framework-res.apk` you pulled from your AVD is now updated.
11. Next, replace the `framework-res.apk` in your AVD with our updated (merged) `framework-res.apk` from last step and reboot device:

```
$ $ANDROID_HOME/platform-tools/adb push <path/to/original/framework-res.apk> /system/framework/framework-res.apk
$ $ANDROID_HOME/platform-tools/adb reboot

```
12. Finally, check if the webview is switched to the new one:

# Answer
> 0 votes
Continuing the previous answer. For android 7 and up: pull the framework-res.apk file from your device, de-compile it, and change file `/res/xml/config_webview_packages.xml`, add to it a new webviewprovider.

Example `config_webview_packages.xml`:

```
<webviewproviders>
    <webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true" />
    <webviewprovider description="Google WebView" packageName="com.google.android.webview" availableByDefault="true">
        <signature>MIIDuzCCAqOgAwIBAgIJANi6DgBQG4ZTMA0GCSqGSIb3DQEBBQUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHd2VidmlldzAeFw0xNDA4MDgyMzIwMjBaFw00MTEyMjQyMzIwMjBaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHd2VidmlldzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbtaFX0r5aZJMAbPVMAgK1ZZ29dTn91VsGxXv2hqrQo7IpqEy2JmPvPnoMsSiuTAe+UcQy8oKDQ2aYVSAd1DGIy+nSRyFTt3LSIAdwSBkB1qT4a+OqkpsR6bSNXQXQ18lCQu9gREY3h3QlYBQAyzRxw4hRGlrXAzuSz1Ec4W+6x4nLG5DG61MAMR8ClF9XSqbmGB3kyZ70A0X9OPYYxiMWP1ExaYvpaVqjyZZcrPwr+vtW8oCuGBUtHpBUH3OoG+9s2YMcgLG7vCK9awKDqlPcJSpIAAj6uGs4gORmkqxZRMskLSTWbhP4p+3Ap8jYzTVB6Y1/DMVmYTWRMcPW0macCAwEAAaNQME4wHQYDVR0OBBYEFJ6bAR6/QVm4w9LRSGQiaR5Rhp3TMB8GA1UdIwQYMBaAFJ6bAR6/QVm4w9LRSGQiaR5Rhp3TMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAEQu8QiVxax7/diEiJrgKE1LwdXsIygJK/KnaKdnYEkAQpeu/QmrLiycm+OFbL1qHJIB7OuI/PQBUtcaNSiJSCVgtwtEbZWWIdsynqG/Nf4aGOndXegSQNRH54M05sRHLoeRycPrY7xQlEwGikNFR76+5UdwFBQI3Gn22g6puJnVukQm/wXQ+ajoiS4QclrNlixoDQsZ4STLH4+Wju2wIWKFFArIhVEIlbamq+p6BghuzH3aIz/Fy0YTQKi7SA+0fuNeCaqlSm5pYSt6p5CH89y1Fr+wFc5r3iLRnUwRcy08ESC7bZJnxV3d/YQ5valTxBbzku/dQbXVj/xg69H8l8M</signature>
    </webviewprovider>
</webviewproviders>

```

About signature. If webviewprovider.apk signed system signature then you can skip this attribute. If the signature is not correct, the webview provider will not appear in the list available through the device development settings. Don't change original signature of webviewProvider.apk - you won't be able to install updates.

Put framework-res.apk to device (need root).

---
Tags: 5.0-lollipop, browser, webview
---


# Question
Title: How to update webview without using the Google Play store?
I have an Android 5.1 device, where I have full root access. For this device I have written a **cordova application** and installed it as a **system app**. It is working good, however the webview-version of Android 5.1 is very old and unfortunately has a few bugs.

I know that you can update the webview with the playstore, but unfortunately the device does not have the google apps and therefore I am not able to update the webview with the playstore.

So my question is: **How can I update the system webview without google playstore?**

I already tried it with a rather naive approach, which unfortunately killed my application:

I have downloaded the latest `webview.apk` from the playstore (https://play.google.com/store/apps/details?id=com.google.android.webview&hl=de)

Then I did:

```
adb remount
adb push webview.apk /system/webview/
adb reboot

```

Now I get errors when I try to start my cordova application and the app itself doesn't show up anymore:

```
I/CordovaActivity( 1931): Apache Cordova native platform version 6.1.1 is starting
D/CordovaActivity( 1931): CordovaActivity.onCreate()
E/WebViewFactory( 1931): Failed to list WebView package libraries for loadNativeLibrary
E/WebViewFactory( 1931): android.content.pm.PackageManager$NameNotFoundException: com.android.webview
E/WebViewFactory( 1931):        at android.app.ApplicationPackageManager.getApplicationInfo(ApplicationPackageManager.java:281)
E/WebViewFactory( 1931):        at android.webkit.WebViewFactory.getWebViewNativeLibraryPaths(WebViewFactory.java:282)
E/WebViewFactory( 1931):        at android.webkit.WebViewFactory.loadNativeLibrary(WebViewFactory.java:397)
E/WebViewFactory( 1931):        at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:103)
E/WebViewFactory( 1931):        at android.webkit.WebView.getFactory(WebView.java:2194)
E/WebViewFactory( 1931):        at android.webkit.WebView.ensureProviderCreated(WebView.java:2189)
E/WebViewFactory( 1931):        at android.webkit.WebView.setOverScrollMode(WebView.java:2248)
E/WebViewFactory( 1931):        at android.view.View.<init>(View.java:3595)
E/WebViewFactory( 1931):        at android.view.View.<init>(View.java:3689)

```

**How is the correct way to update the webview.apk without google playstore?**

# Answer
> 5 votes
The Google WebView application is ***very*** different from regular ones. You **cannot** use Package Installer to install or update it in a common way. You must do it yourself (As for my Lollipop 5.1.1).
Here's the way I've done it several times. Run in a root shell. You may need `busybox` for `unzip` (or do it with a file manager).

```
#!/system/bin/sh
rm -r /data/app/com.google.android.webview*
mkdir /data/app/com.google.android.webview-1
cd /data/app/com.google.android.webview-1
cp */path/to/your/webview.apk* ./base.apk
unzip base.apk 'lib/armeabi-v7a'
mv lib/armeabi-v7a lib/arm
# Do the following 2 lines only if you're on an ARM64 ROM
unzip base.apk 'lib/arm64-v8a'
mv lib/arm64-v8a lib/arm
#
find . -type f -exec chmod 644 {} +
find . -type d -exec chmod 755 {} +
find . -exec chown 1000.1000 {} +

```

Alternatively, you can try creating directory `/system/priv-app/WebView` and put the new APK there. **Remember to get rid of the old one**.

# Answer
> 3 votes
You try to update "com.google.android.webview", but your system uses "com.android.webview" version.

# Answer
> 1 votes
You cannot replace `com.android.webview` with `com.google.android.webview` since they are two different packages and the system's default webview package name is hard-coded in `framework-res.apk`. Please see https://android.stackexchange.com/a/139415/284780 for explanation and https://android.stackexchange.com/a/233282/284780 for solution.

---
Tags: 5.1-lollipop, webview
---


# Question
Title: What are all these Google internet hosts (domains) and why is stripped-down Android connecting to all of them?
Technology users are faced with a challenge: Allowing our tech devices to work without them invading our privacy.

Obviously choosing products carefully is a critical step. Unfortunately, the two main players in the smartphone space, **Google and Apple**, are well known for their questionable data collection and harvesting practices.

LineageOS and /e/OS are *up-and-coming* providers of privacy-friendly smartphone operating systems. Until they become more commonplace, I thought it would be worthwhile to create a compendium of internet hosts to which Android connects by default.

To do this, I let an Android device run for 5 hours and captured all packets trying to leave the device.

The Android device was configured *never* to share contact data, calendar data, task data, map data, location data, or any history of any kind. It also was configured to not transmit or receive email *at all*. The internet search function of the launcher was removed. Furthermore, Google Chrome and the Google's Android Assistant were both disabled, as were all the various "Google Play" apps (such as Google Play Books, Google Play Games, Google Play Movies & TV, Google Play Music / YouTube, Google Play Newsstand) except for the Play store. Within the Google Play store, automatically checking for new app versions was disabled. Finally, a non-Google keyboard was installed and set as the default.

Even after doing all this, within just 5 hours of the phone sitting without being used, the Android device attempted to connect to all the following Google-owned hosts:

history.google.com
mtalk.google.com
alt1-mtalk.google.com
alt2-mtalk.google.com
alt3-mtalk.google.com
alt4-mtalk.google.com
alt5-mtalk.google.com
alt6-mtalk.google.com
alt7-mtalk.google.com
alt8-mtalk.google.com
android.clients.google.com
www.google.com
android.googleapis.com
play.googleapis.com
cloudconfig.googleapis.com
connectivitycheck.gstatic.com
footprints-pa.googleapis.com
mobilemaps.googleapis.com
people-pa.googleapis.com
www.googleapis.com
www.googletagmanager.com
play-lh.googleusercontent.com
smtp.gmail.com

What is the purpose of each of these hosts, and why are so many connections still being attempted given that almost everything Google-related is supposed to be disabled on the device?

Note that I don't expect a single answerer to know the purpose of every host listed, but hopefully we can work together to use this QA to create a quality reference resource.

# Answer
> 4 votes
I don't know the purpose of all hosts, but here is what I know:

### connectivitycheck.gstatic.com

On this host typically only the URL https://connectivitycheck.gstatic.com/generate\_204 is used. It is used by the Android device to determine if there is Internet access or not.

### android.clients.google.com

Primarily this host serves Google Play Store for all sorts of queries, e.g. search for apps, periodical device registration, ...

### history.google.com

The purpose of this host is not quite clear. The used service is called "history recording" and the server responds if it should be enabled or not. Potentially this is the host for the Google location history recording?

### play.googleapis.com

Obviously this API is used by Google Play Store. For example if an app should be downloaded this server is used (besides some other servers).

### android.googleapis.com

As far as I know this server is used for authentication purposes and for Google push notifications.

### www.googleapis.com

Used by various Google services such as Google Calendar, Drive, Chat, Hangouts, User Location, Android Video ...

## Inspect the traffic on your own

If you are interested in more details and have a rooted spare device I recommend to you to install Xposed + TrustMeAlready plugin (this disables SSL/TLS server check for every app - hence makes SSL/TLS totally insecure therefore don't use this on a regular device). Then install an HTTPS intercepting proxy such as Fiddler/Mitmproxy/Charles, ... on your PC and configure your PC as proxy in Wifi settings. Afterwards you can see all the data transmitted by your device.

# Answer
> 2 votes
@Robert has already given an answer to several addresses. I will just add my 2 cents for the following:

> OK, so basically the idea is the following: your system makes one connection to Google servers, specifying some kind of AndroidID to be recognized.
>
> On the other side, every apps that use GCM has a server part somewhere, that also makes a connection to the Google servers, specifying an app identifier. Then, when one event is to be sent to you, it is send to the Google servers with your AndroidID, allowing the server to thus relay it to you.
>
> The idea behind that is to have only one open connection on your phone, instead of one per app, allowing for much greater battery life. The cost is privacy, because that means all messages are going through Google servers. App can work a bit around this by having either encrypted messages content or minimal amount of information inside. But at the very least Google will have the following information: you have received a message from this app at this given time.

Note that GCM is deprecated. Considered the web address only for FCM now.

---
Tags: security, privacy, data-monitoring, background-data, hosts
---


# Question
Title: Which filesystem should I use on my USB stick to have interoperability with Android and Windows?
I wish to use a USB stick with both my Android device and my Windows 10 PC.

My requirements are:

* No file size limitation
* No root required on the Android device
* The filesystem should be natively supported by the Android device

My Android device is a Samsung Galaxy S10. I would like a solution that would work with all modern Android devices, but I don't mind if I'm limited to the Samsung.

Which filesystem should I use?

# Answer
> 2 votes
Based on your requirements there are not many file-systems left: `ext3/ext4` or `exFAT` both are file-systems that are natively supported nearly all Android devices.

My recommendation as file-system to use is `exFAT` as long as you don't want to store a large number of small files.

partitions size to cluster size:

* 7 MB–256 MB -\> cluster size 4 KB
* 256 MB–32 GB -\> cluster size 32 KB
* 32 GB–256 TB -\> cluster size 128 KB

The other option ext3/ext4 may cause problems if you ever want to connect the USB-stick to an Windows PC as Windows does not support it.

exFAT has no relevant maximum file-size (the file size limit of exFAT is 16 Exabytes and therefore larger than the largest disc for the next decades)

Regarding the exFAT support Android should support this file-system if it has an SD-card slot and supported SD-card with 64 GB and beyond. To my experience the exFAT read support usually works, but the write support can be buggy on some devices (permission problem). Therefore the only way is to format an USB-stick with exFAT and test it on the devices you want to use it.

For more details see also this question and it's answers: Since which Android version is exFat supported?

# Answer
> 0 votes
There isn't a solution that meets all of your criteria. Which criteria is your priority and where can you compromise?

If you want read-write support on both Android and Windows, you'll need to use FAT32 and format it in Windows. This will limit file size to 4 GiB.

If you need file sizes greater than 4 GiB, you can use ext3, which supports file sizes up to 2-16 TiB depending on block size. You won't have reliable write access on Windows, but there are good tools/drivers for read-only access.

In my experience, this is going to bite you eventually. Something will get corrupted if you have two different platforms writing to the same filesystem. The most reliable way to get cross-OS storage is via network-attached or cloud storage.

---
Tags: file-system, windows
---


# Question
Title: How is bootloader state protected against physical tampering in Google Pixel
A week ago my professor's Pixel 4 XL was stolen from his desk when he left it there for charging. The phone has been shut down. It had few minutes of battery left when it was plugged in charging. Though I believe that the attacker has powered it off immediately and also turned off mobile data or turned on airplane mode which are unfortunately allowed in Pixel devices without unlocking the screen. I must say that this is a weak physical security design and helps the attacker more than **environment safety**\*. Although location cannot be turned off at locked screen but it will be useless unless the device automatically reconnects to the nearby open wifi in campus to which the device was connected earlier.

I assured him that the data cannot be compromised because it is protected by file based encryption (FBE) which is bound to the user's lock screen password and lock screen password is verified by Titan M chip (TEE) to unlock the device. The attacker can still reset the device which is then prompted by factory reset protection when setting up the device. This is yet another weak physical security design because unauthorised factory reset can be prevented by adopting biometric authentication for bootloader and recovery mode by TEE which wakes up before the android bootloader is awaken.

In Pixel, bootloader can be unlocked by enabling **OEM unlocking** from developer tools and then executing `fastboot flashing unlock` in bootloader mode. As the attacker cannot reach developer settings without unlocking the screen, my professor asked if by using a hardware tool like UFS flash storage reader & writer, can the attacker directly tamper with OEM unlocking byte and bootloader state (locked & unlocked) bytes which are stored *somewhere* for persistence across reboots and flashing custom ROMs?

---

\*Environment safety: Some security trade-offs were made by android security team by allowing to shut down, to turn on airplane mode and to turn off mobile data from locked screen so that devices in case of emergency like overheating of the device while in plane and radio interference, these features can be remain functional from locked screen.

# Answer
> 3 votes
Pixel refuses `fastboot flashing unlock` (and `unlock_critical`) command unless **OEM unlocking** is enabled. OEM unlocking byte is stored by TEE as implemented in android source.

> **libese** provides a minimal transport wrapper for communicating with embedded secure elements. Embedded secure elements typically adhere to smart card standards.

TEE is tamper-resistant by design. So it's not possible to physically modify OEM unlocking byte in Pixel. `VerifiedBootState` is also stored in TEE. This ensures that stolen Pixel device cannot be reused by unlocking the bootloader and reflashing the images.

When bootloader unlock command is executed, bootloader queries TEE to **get unlock ability** set by OEM unlocking. When VerifiedBootState is set to `unlocked`, TEE flushes file based encryption (FBE) keys and bootloader resets the device. Verified boot state and unlock ability remains persistent in TEE across reboots, flashing custom ROMs and factory reset. This is why the user still has to relock the bootloader even if all partitions are reflashed with stock images.

Verified boot state in TEE is now also used in SafetyNet's hardware-backed attestation. Tamper-protection by TEE makes it impossible to fake verified boot state. As a result, it leaves no way to pass SafetyNet's **device-integrity** test even if you have root access.

In other devices, OEM unlocking byte is stored in `FRP` partition which is a bad security design because OEM unlocking byte can be physically modified if it's stored outside of TEE. In such devices, OEMs sends `unlock.bin` signature file to the user which is used as an additional argument with unlock command so there is some sort of verification in place to verify the device owner. In Mi devices, OEM unlocking requires registration with Mi account which ensures that only the account owner can unlock bootloader from Mi unlock tool even if OEM unlocking is enabled.

Earlier Mi devices are found to be storing bootloader state in `/devinfo` partition which is totally insecure because by simply modifying the byte, the attacker could unlock the bootloader. As more and more devices will be mandated to enforce SafetyNet's hardware-backed attestation, VerifiedBootState will be stored in TEE.

---
Tags: bootloader-lock, google-pixel-4
---


# Question
Title: Lenovo Tab 4 10 stuck on boot after factory reset with TWRP
I wanted to root my Lenovo Tab 4 10 tablet, so I installed TWRP successfully but then my internal storage was showing up 0 Mb. So I use OTG (Pendrive) to flash SuperSU zip. Then it was stuck on mounting, so I switched my tab off. Then I even factory reset my tab via TWRP and recovery mode. But now it is stuck on the boot logo and doesn't boot up no matter how many times I reboot or factory reset it.

I even tried flashing the stock firmware. Still got no good results

I don't have access to USB debugging or TWRP now.

# Answer
> 0 votes
I had did this once on my Lenovo tab 4 10 So I installed the firmware of my tablet from here “https://firmwarefile.com/lenovo-tab-4-10-tb-x304l” After downloading the firmware extract the files from the zip file and search for “recovery.img” in that folder and flash that recovery(your bootloader should be unlocked ) and then after that there will be system recovery installed on your device now go to fastboot and then to recovery mode and then reboot your device and you will see the Lenovo logo for atleast 2 mins and then your device is unlocked and then you can lock or keep the bootloader unlocked (I didn't use my PC I used this app called “Bugjaeger”

---
Tags: root-access, twrp, lenovo
---


# Question
Title: Finding and removing Android adware that opens Chrome tabs when unlocking the lockscreen
I'm battling an adware on multiple Android devices which none of the Malware removal tools I tried (Kaspersky, Avast, and Norton IIRC) can find.

**Behaviour**

While the phone is locked, new Chrome tabs (not the default browser, Chrome specifically) are launched periodically, pointing at (**don't visit!**) `http://vpg.dorputolano.com`. This redirects you to various ugly ad-sites for gambling, betting, new phones, and what have you. It doesn't act, while the phone is unlocked.

Importantly, this behaviour has jumped devices: I first had the issue on my OnePlus 3. I was changing phones anyway at the time and I thought with a fresh install on my new phone I'd be golden. I used the OnePlus transfer app to transfer my stuff to my new OnePlus Nord, which in hindsight might not have been the best of ideas. Now after ~3 weeks of using the new phone, it started again. No apps have been installed in this period, so it seems to have a dormant period before it starts acting up.

**What I have tried**

* Most obviously, switch to a brand new phone
* Finding rogue processes via `adb shell` and `ps -A`
* Trying to change `/etc/hosts` to at least not visit the bad site, but this needs root access
* Neither of my devices were/are rooted

**Device info**

* OnePlus Nord, Model AC2003
* Oxygen OS 10.5.10.AC01BA
* Carrier Wingo (read: Swisscom), not known for malicious behaviour
* (The old phone was a OnePlus 3, up to date with the last update they shipped)

**I'm hoping for**

* Identification of the malicious app and how to remove it
* Further tips on pinning it down myself, maybe more `adb` tricks?
* If all else fails, workarounds to mitigate the behaviour

# Answer
Using my Google Activity History, i spotted a few activity entries of my Barcode Scanner app which didn't belong there as I didn't use the app at the time.

Uninstalling the app resolved the problem. In my case, the com.qrcodescanner.barcodescanner\] was the culprit. *Edit:* The app has been pulled from the store since. The most recent 1-star reviews confirm that the apps is an adware since the last update.

For completeness' sake, this might not be the dev's fault since the app Andrew pointed out (com.google.zxing.client.android (Play store)) suffers from the very same condition it seems, the reviews now all say it delivers ads. *Edit:* Apparently this is a false positive, as it unfortunately had an identical app name and got hit with negative reviews for no reason

*Edit:* ~~Maybe some barcode library further upstream got compromised?~~

~~In any case, caution on using either of the apps is advised.~~

Use zxing's Barcode Scanner for a better alternative

Credit to @andrewT. for pointing me to the solution

*Update, 08. Feb 2021:* There is now a writeup of the story at Malwarebytes Blog
> 7 votes

---
Tags: malware
---


# Question
Title: Add multiple identical homescreen widgets on Realme devices
On my old phone (Android 8), I used home screen widgets to take notes on the screen, it’s very convenient.

But on my new phone (Android 10, Realme 6 pro), I get the error message “widget added”. It happens with any type of widget.

How can I fix this?

P.S. I'm a Python developer, but I used ADB before for fun.

# Answer
In Realme UI. you can only add one widget at a time. The user can't add same widgets multiple widgets. However there is trick, use Launchers like nova etc. Where you can add multiple widgets. :)
> 1 votes

---
Tags: home-screen, app-widgets, realme
---


# Question
Title: Can default alarms be accessed as audio files?
For a Pixel 2 with Android 11, are the default alarms stored locally as audio files? If yes, can the files be accessed through a file browser?

# Answer
> 2 votes
The default audio files that come with Android are encoded using the OGG Vorbis encoder and therefore you can find them in file-.system as `.ogg` files.

On Pixel phones the audio files are located in the path `/product/media/audio/alarms/` respectively `/system/product/media/audio/alarms/` (visible in this path in file manager apps like Cx File Explorer).

Use a file manager app or `adb` to access those files. the path is a bit different.

---
Tags: alarm, android-11, google-pixel-2
---


# Question
Title: How do you remove words from Swype's dictionary?
I know how to remove words from Swype's user dictionary. I want to know how to remove words from Swype's built-in dictionary. I get very frustrated with all these random words that I know I'll never use! I can't tell you how many times I've had the word "Getty" show up instead of the word "get".

If there is really no way of removing words from Swype's built-in dictionary I'll probably need to find an alternative. That's probably another question though.

# Answer
> 3 votes
Swype uses a separate dictionary. You can access the settings for both from within the system settings:

From the homescreen, open *settings → language & keyboard*

* for Swype continue: *Swype → Personal dictionary*
* for the default keyboard: *My dictionary*

There you can edit/add/remove words from your user dictionary.

# Answer
> 0 votes
I've tried this on Froyo, I can remove the unwanted Swype words by: 1. Swype the word. 2. Select that word. 3. Hit the 'Swype' key. 4. You will get a confirmation to delete the word from Swype dictionary.

On latest android version, you get a list of words on the top of the keyboard. If the unwanted word comes on top, long tap it. You will get an option to delete it.

# Answer
> 0 votes
Also I had this problem, and I talked to the Samsung through Facebook. I was told to clear the cache partition, and I think it worked. The unwanted words I removed don't appear to be coming back.

---
Tags: keyboard, settings, swype
---


title: Skype app on Android

text:
# Question
Title: Skype app on Android
I have temporarily moved to a new university for a research project, and I'm now using their wifi Internet connection. While everything seems to work fine with the Windows 10 laptop, the Skype app on my Android phone keeps "freezing". What I mean is that although I seem to be connected and I can see my contacts, I cannot make nor receive any calls. Even if I turn off the wifi and use the mobile connection on the phone, the situation does not change.

After many attempts, I have found out that if I logoff from the app and I login again using the mobile connection, the app starts working again. At this point I can even restore the wifi connection and everything works for a while. But eventually it freezes again...

The weird thing is that this trick doesn't always work. Sometimes after I logoff from the Skype app I cannot login back even if I'm connected with the mobile data. I keep getting the error message "unable to sign in. Please check your internet connection". Also, if I try to login to my Skype account using Chrome for Android I cannot reach the page and get the message "DNS\_PROBE\_FINISHED\_NXDOMAIN". But everything else seems to work fine and I can browse other websites or use different apps.

I understand that this might be due to some strange settings of my host university. While this is annoying, I can live with that. But what I really would like to understand, though, is why my phone behaves so strangely even when I'm switch off from the university wifi and I'm using my private mobile data connection...

# Answer
I still don't fully understand how, but the issue appears to be solved now.

After I changed the DNS settings from automatic to private towards dns.quad9.net, not only the DNS\_PROBE\_FINISHED\_NXDOMAIN error on Chrome disappeared when trying to connect to my Skype account, but also the Skype app stopped freezing.

I suspect that with the previous settings the DNS request for the Skype IP (via the NAT done by the university) was somehow unintentionally lost, and the app could not reach the server nor Chrome the account webpage.

Also the apparent random behaviour was probably due to some form of caching of the DNS, by which when I switched to the mobile data connection I had to wait for some time before the app could unfreeze, and similarly when restoring the university wifi the app didn't freeze immediately...

Anyways, the issue is solved, but if you have a more sound explanation, please consider writing a better answer. Thanks.
> 1 votes

# Answer
It sounds like the skype ports are being blocked

Ask the IT staff if these ports are being blocked.

For Skype to work correctly, the following ports need to be open in your firewall:

443/TCP

3478-3481/UDP

50000-60000/UDP

For the best possible call quality experience, these ports are needed too:

1000-10000/TCP

50000-65000/TCP

16000-26000/TCP
> 0 votes

---
Tags: dns, skype
---


# Question
Title: Voice to text: How punctuation works in Dutch?
I've seen a lot of post about the punctuation, but that was all about the English version of voice-to-text.

The Dutch version works pretty good, but it seems to be imposible to do things like 'new line', 'point' or 'comma'.

How to use the punctuation in Dutch?

# Answer
It seems there is no support yet for punctuation marks in Dutch. Unless something has changed since this posting:

Spraakgestuurd typen met deze 10 tips en trucs

(Scroll down to "Tip 04: Leestekens")

I came across this while searching for Japanese punctuation in voice input. Try using Swype Keyboard app as a workaround.
> 2 votes

# Answer
So far these work for me (Dutch):

* punt . of punt punt punt ...
* komma ,
* dubbele punt :
* punt komma ;
* uitroepteken !
* vraagteken ?
* slash /
* back slash \
* hekje #
* apestaartje @
* ampersand &
* sterretje *
* accolade { (of } daarna)
* procent (alleen direct achter een getal) 1%
* Euro (zoals: drie euro veertien) €3,14
* nieuwe regel
* nieuwe alinea
> 2 votes

---
Tags: voice-recognition
---


# Question
Title: Disabling Chrome tab groups in Chrome v85
My phone (Samsung S7 running Android 8.0.0) recently updated to Chrome version 85, and with it came tab groups.

I am sure this is a welcome thing for many, but I rarely have more than 8 tabs open at any time. Thus the ability to group tabs makes little sense for me.

Unfortunately, I can't seem to avoid it. When holding on a link, "Open in new tab" has become "Open in new tab in group", and there is no option to open it just as a separate tab.

This makes my regular tab cleaning a lot more cumbersome, as now I suddenly have two or three groups where I want to remove one or two tabs each, rather than just four tabs I want to close.

Is there a way to remove tab grouping, or at least a way to hide it away so that I don't have to bother with it during casual internet browsing? At the very least, I can't find anything even remotely relevant in the settings, and a rudimentary internet search has only provided news of the feature, not any details on removing it.

# Answer
Paste `chrome://flags/#enable-tab-groups` in address bar and Tab groups options, choose *default* and re-launch Chrome by tapping the option at bottom. Tested on Chrome version `85.0.4183.127` (if that doesn't work for you try *disable* option).

( If you type `Chrome://flags`, you will get a scary warning, ignore that, changing flag properties is harmless-you can always reset flags, if you wish)
> 3 votes

# Answer
With the help of beeshyams' answer, I ended up disabling 4 sections to get mine back to "normal."

* Tab Grid Layout
* Tab Groups
* Tab Groups Continuation
* Tab Groups UI Improvements
> 0 votes

---
Tags: chrome-for-android, browser-tabs
---


title: htc u12+ flashing twrp, stuck booting

text:
# Question
Title: htc u12+ flashing twrp, stuck booting
I've been trying to root my HTC U12+, and I've been stuck trying to boot twrp onto my phone through adb commands.

```
.\fastboot boot twrp.img
Sending 'boot.img' (32424 KB)                      OKAY [  2.006s]
Booting

```

This is what I'm stuck on, my phone screen says "flash images success 1/1)" When I know it's more than one step.

I've got all the drivers, correct adb files, and correct twrp disc images. I rooted my brother's U11 using the same process, with the U11's files.

# Answer
> 2 votes
My reply from the XDA support thread was already posted here, however I will formally reply now that if you're seeing "flash images success (1/1)", then you're in Download mode. In order for the "fastboot boot" command to work, you have to be in Bootloader. There is an option to "reboot to bootloader" from the main Download mode screen. Choose that option, and then you will be in the correct mode to use the "fastboot boot" command.

You mentioned U11, however the difference with that device is that it has a recovery partition (U12+ does not), and thus the install method for it is to *flash* the image, not *boot* it. If you wanted to fastboot boot a recovery image on U11, you likewise would need to be in Bootloader mode.

---
Tags: rooting, twrp, boot
---


# Question
Title: Need to add custom script as service in init.rc for Android 10
I am trying run shell script in device boot-up time.

Steps:

1. Created shell script and placed into ***/system/bin/usbmountd.sh***
2. Added test.sh in inir.rc.

```
service usbmountd /system/bin/usbmountd.sh
user system
disabled
oneshot

```
3. Add a new Domain “usbmountd.te” in the location of ***device/broadcom/XXX/sepolicy/treble/ usbmountd.te***

```
 type usbmountd, domain;
 type usbmountd_exec, exec_type, file_type;
 init_daemon_domain(usbmountd)

```
4. Add the Label "/system/bin/usbmountd.sh" to ***device/broadcom/XXX/sepolicy/treble/file\_contexts***

```
 /system/bin/usbmountd     u:object_r: _exec:s0

```
5. Added in ***device/broadcom/xxx/sepolicy/xxx/file.te***

```
 type usbmountd_exec, system_file_type, file_type;

```

Error:

```
[ 81% 747/921] build out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallows
FAILED: out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallows
/bin/bash -c "(ASAN_OPTIONS=detect_leaks=0 out/host/linux-x86/bin/checkpolicy -M -c             30 -o out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/policy.conf ) && (out/host/linux-x86/bin/sepolicy-analyze out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp neverallow -w -f out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/policy_2.conf ||           ( echo \"\" 1>&2;         echo \"sepolicy-analyze failed. This is most likely due to the use\" 1>&2;            echo \"of an expanded attribute in a neverallow assertion. Please fix\" 1>&2;           echo \"the policy.\" 1>&2;            exit 1 ) ) && (touch out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp ) && (mv out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp out/target/product/xxx/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallows )"
device/xxx/xxx/sepolicy/treble/usbmountd.te:3:ERROR 'Duplicate declaration of type' at token ';' on line 60116:
type usbmountd_exec, exec_type, file_type;
type usbmountd, domain;
checkpolicy:  error(s) encountered while parsing configuration

```

# Answer
The error is `'Duplicate declaration of type'`

The problem is step 5 in which you declare
`type usbmountd_exec, system_file_type, file_type;`

You already declared that same type `usbmountd_exec` in step 3. So remove the duplicate declaration.

Also in step 4 it should look like this:
`/system/bin/usbmountd.sh u:object_r:usbmountd_exec:s0`
> 1 votes

---
Tags: selinux, aosp
---


# Question
Title: Getting McAfee warnings despite not having McAfee?
I own a Galaxy S10, and after the recent update I've started getting warnings from McAfee in my Chrome browser telling me sites I've been visiting for years are suspicious... except I don't have and have never had McAfee installed on my phone or browser. I've searched my apps and turned up empty-handed, and searching online hasn't helped either, so any idea what this is?

# Answer
After further investigation it appears to be the digital secure app. I'm not sure why it says McAfee in the browser.
> 0 votes

---
Tags: chrome-for-android, samsung-galaxy-s-10
---


# Question
Title: What does used com.Samsung.android.incallui mean in recent activity?
In my child’s recent activity it says used com.Samsung.android.incallui. What does that mean? Thanks so much!

# Answer
It is the phone/call app. It simply means that the child opened it.
> 1 votes

---
Tags: samsung
---


# Question
Title: Android Chrome - shortcut icons shown on Chrome home page
there are up to 8 shortcuts on the android chrome homepage. How do I specify which web pages I want them to link to?

# Answer
> 0 votes
You can't edit the shortcut manually. The workaround to add a shortcut is:

* Step 1: Remove one that you don't want.
* Step 2: Open a new tab, type/paste the URL of the webpage you want, and go to that site.
* Step 3: Repeat Step 2 once or twice more. The next type you open the homepage, the webpage shortcut will be added/listed.

---
Tags: chrome-for-android, home-screen-shortcuts
---


# Question
Title: Cannot start android emulator64 due to Qt unable to load xcb
I cannot start the (android) emulator64-x86. It always fails with:

```
--> ./emulator64-x86 -avd loli -gpu off
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: linuxfb, minimal, offscreen, xcb.

Reinstalling the application may fix this problem.
zsh: abort      ./emulator64-x86 -avd loli -gpu off

```

Every forum thread I found on thw problem was to run ldd on the emulator64 and the XCB library to check for missing dependencies:

```
--> ldd emulator64-x86
    linux-vdso.so.1 (0x00007ffefb048000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f3bfefb5000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f3bfec75000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f3bfe9e9000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3bfe7e5000)
    libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f3bfdf9f000)
    libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f3bfd838000)
    libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f3bfd14d000)
    libQt5Svg.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Svg.so.5 (0x00007f3bfcef8000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f3bfcb73000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3bfc828000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f3bfc625000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3bfc407000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3bfc1ef000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3bfbe39000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3bff1bd000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f3bfbc11000)
    libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f3bfb9e0000)
    libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f3bfb72a000)
    libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f3bfb4f7000)
    libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f3bfb258000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f3bfb03e000)
    libicui18n.so.57 => /usr/lib/x86_64-linux-gnu/libicui18n.so.57 (0x00007f3bfabca000)
    libicuuc.so.57 => /usr/lib/x86_64-linux-gnu/libicuuc.so.57 (0x00007f3bfa825000)
    libpcre2-16.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007f3bfa5b8000)
    libdouble-conversion.so.1 => /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1 (0x00007f3bfa3a7000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f3bfa093000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f3bf9e8f000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f3bf9c89000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f3bf9a77000)
    libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f3bf97c2000)
    libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f3bf9595000)
    libicudata.so.57 => /usr/lib/x86_64-linux-gnu/libicudata.so.57 (0x00007f3bf7b18000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3bf78a6000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f3bf7691000)

```

And for LibXCB:

```
--> ldd /usr/lib/x86_64-linux-gnu/libxcb.so.1
    linux-vdso.so.1 (0x00007ffc465d8000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f68c727c000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f68c7076000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f68c6cc0000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f68c6aab000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f68c76a8000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f68c68a3000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f68c6685000)

```

Additional details:

* Android emulator version 27.1.7.0 (build\_id 4581633) (CL:b5ec07662db0f9d8644e5fbda7040053a8741bfd)
* Debian SID x64

So it seems that all dependencies are OK. How can I debug that issue further ? Any idea how can I make the emulator work ?

It turned out I can run QT with debug logging:

```
QT_DEBUG_PLUGINS=1 ./emulator64-x86 -avd loli -gpu off

```

So I it fails because of:

```
Cannot load library /home/svetlin/software/android/emulator/lib64/qt/plugins/platforms/libqxcb.so: (/home/svetlin/software/android/emulator/lib64/qt/plugins/platforms/libqxcb.so: symbol _ZN26QPlatformIntegrationPlugin6createERK7QStringRK11QStringList, version Qt_5 not defined in file libQt5Gui.so.5 with link time reference)

```

# Answer
I tried every possible solution I could find on the net but I still got:

```
Cannot load library
/home/darkstar/android/emulator/lib64/qt/plugins/platforms/libqxcb.so:
(/lib64/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API' not found
(required by /home/darkstar/android/emulator/lib64/qt/plugins/platforms/libqxcb.so))

This application failed to start because it could not find or load the
Qt platform plugin "xcb" in "".

```

The error message is actually misleading. In my '/lib64' folder, I do have a file 'libQt5XcbQpa.so.5' and it links to the shared lib 'libQt5XcbQpa.so.5.10.1'.

This is not the correct version. All of the correct libs are actually stored at:

```
~/android/emulator/lib64/qt/lib

```

If you include the above path as part of '$LD\_LIBRARY\_PATH', the emulator will run.
> 1 votes

# Answer
For Android SDK version 30.3.5.0 build\_id 7033400 it turned out to be a bug. This version requires directory structure properly created at $HOME/.android for successful startup.

In order to create the directory structure you have to run the emulator with `-writable-system` once. For example, suppose you've created an avd named 'test', then you can start the emulator as follows:

```
/opt/android-sdk/emulator/emulator -no-window -writable-system -avd test

```

Once it's created you don't need the option any longer.

```
/opt/android-sdk/emulator/emulator -no-window -avd test

```
> 0 votes

---
Tags: linux, android-emulator, android-sdk
---


title: Im concerned about my android phone

text:
# Question
Title: Im concerned about my android phone
So i just recently got a new phone. Android - LG K51 - however after running a root checker it says my phone has two available android versions. Android 9.0 and Android 10.0. Ive checked and the phones is running on Android 9.0. Ive also looked into the credentials and theres a whole list of apps downloaded that have the name Root in them. As well as a system file saying RootPA. Is my phone as risk or is it still safe?

# Answer
The LG K51 has many variants. All variants have Android 10 except the LG K51 for Boost Mobile which has Android 9.

> Ive also looked into the credentials and theres a whole list of apps downloaded that have the name Root in them. As well as a system file saying RootPA. Is my phone as risk or is it still safe?

When trying to root via 3rd party apps, they download files (and bloatware) that must be use to root. If you really want to root your phone, better search Xda-Developers to find if there are methods for your phone instead of using the one-click apps.
> 0 votes

---
Tags: root-access, settings, lg, unrooting
---


# Question
Title: How can I prevent Telegram from notifying me about contacts that recently joinedTelegram
I don't want to get any message when a contact starts to use telegram. In the notification settings switched off notifying me when a contact has joined telegram, but my telegram chat history is still full of messages such as "John Smith uses Telegram now!".

And the telegram icon also shows that there are new messages even if I got no real new messages but only some contacts joined Telegram.

This is really annoying, especially now when many people start using telegram.

# Answer
> 0 votes
> You can stop these by going to Settings \> Notifications and Sounds \> Contact joined Telegram. Turn that option off and you won't get notifications about new contacts joining.

-Quora answer

---
Tags: telegram
---