Android

Hopefully, all about the dancing seam.

Android developer verification and what it means for application distribution

- Posted in Android by

Android’s developer verification system continues its rollout across the ecosystem. What started as a security proposal is now becoming a platform-level requirement that affects how applications are distributed on Android, including outside Google Play.

From F-Droid's perspective 1, 2, 3, this feels like a shift in how Android handles software distribution. It is moving towards a model where publishing software depends on centralised identity verification.


System-wide verification becoming platform enforcement

Developer verification is no longer limited to store accounts.

It is being applied at the platform level across certified Android devices, including applications installed outside Google Play.

That means installation is no longer just a matter of user choice or distribution method. It increasingly depends on whether the developer has been verified within a central system. Link

Even where sideloading still exists technically, distribution is more closely tied to identity approval than it used to be.


Independent distribution under pressure

Android has long supported different ways of installing apps, including third-party app stores and direct APK installation.

A lot of projects exist because that model allows software to be shared without central approval. Link

Developer verification changes part of that assumption.

If installing apps on certified devices depends on a verified developer identity, then alternative distribution stops being fully independent in practice. It becomes tied back to the same upstream system.

There is also a related point raised in F-Droid’s recent writing on trust: that trust in software systems does not come from blindly trusting organisations, but from transparent mechanisms such as open source code, reproducible builds, and verifiable infrastructure. That framing feels relevant here, because the more distribution depends on central identity verification, the more the balance shifts away from verifiable processes and towards institutional trust.


Structured developer tiers

There are also now different categories of developer accounts, including limited or hobbyist options.

These accounts come with restrictions on how widely apps can be distributed and how many devices they can reach.

It creates a clearer separation between types of developers:

  • fully verified developers with standard access
  • restricted accounts with limited distribution
  • unverified developers with reduced reach on certified devices

Google’s documentation describes these limited accounts as intended for students, hobbyists, and learners, with caps on distribution and reduced requirements.


Regulatory context: DMA and European institutions

The EU Digital Markets Act requires large platforms to allow effective third-party distribution and to avoid restrictions that undermine alternative app ecosystems.

The European Parliament has also asked formal questions about whether developer verification is compatible with these rules and whether it could affect sideloading or alternative distribution channels.

The European Commission has said it is monitoring how Android’s distribution model fits within these obligations, including sideloading and third-party app stores.

At the moment, there is no final regulatory decision specifically on developer verification. It is still being reviewed.


Privacy and structural considerations

Developer verification introduces a permanent link between software publishing and real-world identity.

That changes something that has been fairly central to open ecosystems: the ability to publish software without needing a central identity check.

Some of the structural effects seem fairly clear:

  • more centralised developer identity records
  • less room for pseudonymous publishing
  • stronger links between software and verified identities or organisations
  • increased visibility of distribution activity at platform level

What still remains technically true

Android still allows installation from outside app stores.

But technical ability is not the only thing that matters anymore when it comes to distribution.

Whether software can be installed is increasingly shaped by whether the developer is verified, rather than whether a user chooses to install it directly. Link


Implications for users

For most people, the changes are not immediately obvious. Apps still install through existing methods depending on device settings and region.

Over time though, it may become more noticeable:

  • more friction when installing apps from independent sources
  • some apps may not install if the developer is not verified
  • fewer small or independent apps available on certified devices
  • a clearer split between verified and unverified software

Official rollout structure

Stage Period Source
Early access begins November 2025 Google Android Developer documentation
Verification opens to all developers March 2026 Google Developer Console documentation
System service rollout begins (device-level verifier installed for later enforcement) June 2026 https://android-developers.googleblog.com/2026/06/android-developer-verification.html
Android system verifier service (com.google.android.verifier) introduced across certified devices June 2026 https://support.google.com/android/answer/17065026
Update confirming rollout progress and continued enforcement preparation June 18 2026 https://android-developers.googleblog.com/2026/06/android-developer-verification.html
Android Developer ID Status API and Developer Console API early access begins July 2026 https://developer.android.com/developer-verification
Limited distribution accounts introduced (students, hobbyists, learners, up to 20 devices) July 2026
Limited distribution accounts and Developer Console API launch globally August 2026
Advanced flow for installing apps from unverified developers introduced with security checkpoints August 2026
App registration required for participating stores in Brazil, Indonesia, Singapore and Thailand 30 September 2026
Enforcement phase begins in selected countries (Brazil, Indonesia, Singapore and Thailand) September 2026
Global expansion of verification requirement 2027 onwards

Android, Trust Layers, and What Installing an App Feels Like Now

- Posted in Android by

I’ve been working around Android long enough to remember when installing an APK from outside the Play Store didn’t feel like a “process.” It was just something you did.

You downloaded a file, enabled “unknown sources,” tapped install, and that was it. No real ceremony around it.

That simplicity is still technically there, but over time it has started to feel… layered. Not blocked, not removed, just surrounded by more steps that you notice more when you’re outside the default ecosystem.

And the strange part is that none of these changes arrived all at once. They accumulated quietly.

I still catch myself using the word sideloading, even though that wasn’t really what we called it in the early Android days. Back then it was just “installing from unknown sources,” which felt like a permission toggle rather than a category of activity.

The term sideloading itself came from broader computing and enterprise contexts and only later became the dominant way people describe installing apps outside official channels. Within Android discussions, it gradually replaced earlier terms like “unknown sources” or “non-Market installation.”

That shift in language is small, but it matches how the experience itself has changed.

The first thing I really noticed over time wasn’t that APK installation disappeared, it didn’t, but that the system started inserting more checkpoints around it.

Instead of a single switch, there are now per-app permissions. Instead of quiet installs, there are more warnings. Background installs are more restricted. Play Protect scans things more actively in the background.

On top of that, there are simply more hurdles in general now, more verification prompts, more “are you sure” flows, more conditions before an app is allowed to behave normally.

Individually, none of this is dramatic. But together, it changes the feeling of installing something outside the Play Store. It’s still possible, but it’s no longer frictionless.

And this is where an important point often gets missed in discussions about Android’s openness.

Sideloading still exists, yes. APKs still install. Developer options still allow it. Nothing has been fully removed.

But the practical experience has shifted from “a simple action” to “a managed process.”

You are no longer just installing an app. You are moving through a sequence of system decisions:

permissions, warnings, scans, identity checks, and background restrictions.

So even though the feature still exists, the friction profile around it has completely changed.

And that friction matters more than people sometimes admit.

One of the more subtle framing issues in this space is how Google often describes these users.

They tend to refer to them as “power users”.

The problem is that this label does not really match reality.

Most people installing APKs, using F-Droid, or avoiding the Play Store are not developers or technically advanced users. They are just regular end users who want different software choices, fewer adverts, more privacy, or more control over their devices.

Calling them “power users” creates the impression that they are a niche group doing something complex or exceptional. In practice, they are not. They are simply users whose needs fall outside the default ecosystem.

So the label is slightly misleading. Not because the users are doing anything advanced, but because the system has gradually made even basic alternative choices feel advanced.

Then there’s ecosystem-level friction where ad-heavy apps, tracking-heavy SDKs, and integrity-driven SDKs collectively shape what kind of apps feel usable without trade-offs like ads, tracking, or reduced functionality behind blockers.

On top of that, there are simply more verification prompts, more “are you sure” flows, more conditions before an app is allowed to behave normally.

This also extends into ecosystem-level friction where ad-heavy apps, tracking-heavy SDKs, and integrity-driven SDKs collectively shape what kind of apps feel usable without trade-offs like ads, tracking, or reduced functionality behind blockers.

And that friction matters more than people sometimes admit.

Then there’s developer verification, which feels like a different kind of shift altogether.

On paper, it’s straightforward. Developers distributing apps outside official channels may need to verify their identity. The reasoning is usually tied to reducing impersonation and making it harder for malicious apps to keep resurfacing.

I understand the logic behind it. From a platform perspective, it is a clean solution to a real problem.

But from the outside, especially if you’ve been part of smaller projects or open-source work, it changes what “publishing an app” feels like. It is no longer just building and sharing software. It becomes tied to identity in a way that wasn’t always part of the original model.

Even if nothing is blocked outright, the expectation shifts.

What surprised me more is how much of Android’s trust model now sits outside the app itself.

Play Integrity is a good example of this shift.

I’ve seen apps that don’t just check whether they are installed correctly, they evaluate the environment they are running in. If the device is rooted, running a custom ROM, or failing integrity checks, the app may refuse to run or may restrict features.

Banking and payment apps are the most common examples where this shows up.

Google justifies these restrictions on sideloading as measures for "fraud prevention" and "risk analysis", but it's unclear how much they actually reduce fraud or improve user safety in practice. From a developer perspective, this is usually framed as security and abuse prevention. From a user perspective, especially in everyday usage, it can also show up in more subtle ways, for example when a third-party keyboard is being used, or when accessibility services are active on the device. Even though some banking apps rely on accessibility features themselves, certain combinations of active services can still trigger restrictions. This often feels less like a strict security boundary and more like a broad compatibility filter.

So the question becomes less “is this app installed?” and more “is this environment acceptable?”

Another place where this shows up is through application protection systems such as PAIRIP (Protected Android Integrity Runtime Protection), which some developers use to make apps harder to modify, repackage, or analyse.

I understand why these systems exist. From a developer perspective, protecting an app from tampering, piracy, fraud, or reverse engineering is a reasonable goal. If you are distributing software to millions of devices, especially in areas like finance or payments, additional protections can feel like an obvious choice.

What I find interesting is how these protections are experienced from the other side.

For most users, PAIRIP is not something they actively interact with. They usually only notice it when something stops working. An app might refuse to launch on a custom ROM, behave unexpectedly on a rooted device, or fail in an environment that looks unusual to the protection system.

And because these checks often happen quietly in the background, it is not always obvious what went wrong. The app simply does not run, or reports a generic error, leaving users to guess whether the problem is security-related, compatibility-related, or something else entirely.

Developers end up feeling some of this friction too. Stronger protection can reduce certain risks, but it can also create support requests from legitimate users whose devices fail checks despite working perfectly well for everything else.

So once again, the question becomes less about whether an app can be installed and more about whether the environment it runs in is considered acceptable.

That is a subtle shift, but it feels consistent with a broader pattern across Android. More and more trust decisions are happening outside the software itself, through layers that evaluate devices, accounts, configurations, and runtime behaviour before an app is allowed to operate normally.

Then there’s the Google account layer, which is harder to point at directly because it is spread across services.

reCAPTCHA is part of that picture. It used to be a simple “prove you are human” step. Now it often behaves more like a risk-based system that reacts to behaviour, device history, and account context.

And in practice, many flows feel smoother when you are inside a long-standing Google account, and more restrictive when you are not.

It does not directly control APK installation, but it affects surrounding actions, sign-ins, downloads, API access, and verification flows when something looks unusual.

Another layer sits at the app level itself.

Many banking apps, food delivery apps, shopping apps, and media apps include analytics, advertising, and anti-fraud systems.

For example, some apps may collect signals such as device identifiers, installed app environment metadata, interaction patterns, or network context. This is typically used for fraud prevention, personalization, advertising measurement, or service optimization.

In practice, users often experience this indirectly, through recommendations, pricing experiments, or offers that seem shaped by past behaviour. It is difficult to draw a strict boundary between personalization, profiling, and advertising-driven optimization, because all of them rely on overlapping data signals.

There is also another layer that shows up through ad-supported ecosystems. Many apps include third-party ad SDKs, and in some cases ad content may lead to external websites or redirect flows. While platforms like the Play Store enforce policies against malicious behaviour, users may still occasionally encounter misleading ads or unsafe redirects depending on the ad network or implementation quality.

This is also where ad blockers or private DNS tools change the experience significantly, because they remove or reduce this entire advertising and tracking layer. That creates a very different version of the same apps, especially in free, ad-supported ecosystems.

In the middle of all this, I keep coming back to F-Droid.

F-Droid stands out because it isn’t just another app store with different policies, it reflects a different way of thinking about trust in software distribution. Instead of centering trust around developer identity, device attestation, or platform-controlled enforcement systems, it leans heavily on transparency, reproducible builds where possible, and open community review.

That difference matters in practice. It changes what is being verified and who gets to decide what “trusted” means. In mainstream ecosystems, trust is often tied to identities, accounts, and centralized enforcement rules. In F-Droid’s model, trust is primarily derived from the ability to inspect, build, and verify the source itself.

This also creates a clearer separation between software and identity infrastructure. Developers can publish without being embedded into a centralized verification pipeline, and users can install software without their device state or account status being part of the gatekeeping process.

F-Droid isn’t trying to replicate commercial app stores feature by feature. It operates on a different assumption entirely, that trust should come from openness and verifiability rather than layered identity checks and enforcement systems.

What I’ve ended up noticing is that Android hasn’t stopped being open. That would be too simple.

Instead, it has become a system where openness still exists, but it is surrounded by more conditions than it used to be.

Developer identity is one layer. Device integrity is another. Account systems and verification flows like reCAPTCHA sit around the edges. App-level analytics, ads, and protection systems such as Play Integrity and PAIRIP add further layers. And beyond that, there are simply more friction points across installation and runtime than before.

From a critical perspective, a recurring concern among users and developers is that many of these additional layers, such as identity verification, device integrity checks, account-linked risk scoring, and app-level analytics, do not only address security threats in isolation. Instead, they also concentrate control points within a smaller set of platform and infrastructure providers. For some users, especially those outside mainstream device configurations, this can feel less like neutral security enforcement and more like a system where usability increasingly depends on compliance with layered platform-defined trust signals.

Do all of these exist without reason? Do they address real problems, malware, fraud, impersonation, and abuse?

Moreover, when you use the system as a developer or as a user outside the default ecosystem, installation is no longer a single decision. It becomes a sequence of checks across different layers.

Installing an app is still possible.

It just does not feel like one step anymore.

And depending on how you use your device, that shift can feel like either added protection or a growing stack of systems you do not directly control.

Either way, it is not quite the same Android it used to be.

[Guide] USSD UPI

- Posted in Android by

TL;WW



I tried paying via USSD UPI today, and it worked. I had to use the UPI ID function, and did not go through with mobile number, but it worked.

All I did was *99# > 1 > 3 > UPI ID > Amount > Text/Ref > UPI PIN > Confirm

One can also do it in shorter steps, like in any USSD code: *99*1*3# > UPI ID > Amount > Text/Ref > UPI PIN > Confirm

Please mind that you need to have the USSD UPI function activated, else this does not work.

I have captured it step wise in the below image as well.



USSD UPI Steps



Update: I just cross checked to see what it shows up on my BHIM UPI, now this is weird. It is blank name and upi detail for the receiver. Very odd. Bug maybe?
Update 2: This seemed to be a temporary issue. Rest 4-5 payments I made, all showed correctly, without any issues.
BHIM Corrupted Entry
Though the SMS which I received, showed correct details. See image below
SMS Shows Correct details

Mastodon

Server side secure banking in India?

- Posted in Android by

India specifically has a approach of client side encryption, which for banking/payments is not necessary at all. Nothing is stored client side on an app, or a browser, so why do you need client side security?

If I am rooted, using magisk, shizuku or whatever on my phone, why would it matter to you as a bank? If your server side encryption is ON, robust, working, and is there, then you have nothing to worry. You anyways prohibit snapshot, recent gets blurred; so, why the heck do you force us to use your senseless apps which should in the first place not be reading what I have installed, or which app is using which feature on my phone. This is privacy breach, no safe space for me, and you are violating my constitutional rights, all in one go.

All Indian banking and UPI apps force you to not have #accessibility turned on (even though they f'ing use it themselves); no #root; no #bootloader-unlocked (seriously, you are snooping to kernel level!!!); no #developer-mode on; no #debugging mode on; no 3rd party #keyboards (reason: they snoop, and foogle does not snoop? The first thing foogle keyboard does is share your typing data to its servers); only keyboards in /sys/priv & /sys/priv-apps are permitted. What nonsense... What are you trying to hide that debugging will reveal, or any of these will reveal? You have closed source your codes, you do everything behind paywall, and you stink!

#indianbankingapps; #hsbc; #bob; #sbi; #hdfc; #icici; #bhimupi & rest of #illiterate-developers

Ref: RBI_Circular (PDF)

Termux & Remote SSH

- Posted in Android by

Install Termux & Termux Styling

Upgrade packages & install openssh and iproute2 on termux.Also, install root packages & busybox package if you need them.

pkg update -y && pkg upgrade -y
pkg install openssh -y
pkg install iproute2 -y
pkg install root-repo -y
pkg install busybox termux-services -y

If you like, you can also add the following termux repositories:

echo "deb https://grimler.se/termux-packages-24 stable main" > $PREFIX/etc/apt/sources.list
echo "deb https://grimler.se/termux-packages-24 stable main" > $PREFIX/etc/apt/sources.list.d/game.list
echo "deb https://grimler.se/termux-packages-24 stable main" > $PREFIX/etc/apt/sources.list.d/science.list

Ensure to setup the storage and stuff beforehand. See here: Setup Storage

Create SSH Private/Public Key Pair on Android - Termux

In our android device, we need to generate SSH key pair for connecting to SSH server the remote machine (example debian). So, run the following command (this will also name the file as android for easy referencing):

ssh-keygen -t ed25519 -f id_ed25519_android

This will create the public & private key files in the ~/.ssh folder (/data/data/com.termux/files/homes/.ssh)

Send SSH Public Key to Remote Machine

Run cat ~/.ssh/id_ed25519_android.pub from termux which will return the public key for your android device.

It will be something like this:

ssh-ed25519 ABCDE1AaaA1aAAA1AAA1AAAAAAAAAaaaA1AaaAaaaAaaa1aAAAAaaAAAAaAaaaAAaaAA user@host

Now copy and paste this key to your remote machine either via the chat box option in the file transfer assistant app PlainApp or copying the id_ed25519_android.pub file across to your remote machine and then copy the content to ~/.ssh/authorized_keys file ($HOME/.ssh/authorized_keys).

Now kill any running sshd service by typing in termux: pkill -9 sshd. This is to let go of any cache or broken service pipes.

Now rerun sshd and connect to your remote server using the private key as pairing for the public key, via:

ssh -i ~/.ssh/id_ed25519_android user@host -p 1234


Sources & my own racking of 5 days:

Termux Wiki | Termux Repos | Some Logic


Sample images:

  • Main Screen

Termux Main Window

  • SSH Connected

SSH Connected

  • Sample Commands

Commands being run

FreeTubeCordova - An open source YouTube player built with privacy in mind

- Posted in Android by

FreeTubeCordova - An open source YouTube player built with privacy in mind

io.freetubeapp.freetube | MarmadileManteater (Emma) | AGPL-3.0-or-later | 2023-01-23 / 0.18.0.98

Releases | Latest | Online-Website

FreeTube Cordova is a YouTube client that uses the Invidious API to serve data and videos from YouTube. No official YouTube APIs are used to obtain data. Your subscriptions and history are stored locally on your device and are never sent out.

Features:

Watch videos without ads
Use YouTube without Google tracking you using cookies and JavaScript
Organize your subscriptions into Profiles to create a more focused feed
Export and import subscriptions from a variety of sources (Ex: YouTube, NewPipe, Invidious)
Support for SponsorBlock
Support for Comments and Replies
Support for YouTube Chapters
Option to password protect settings
Parental controls
Subscribe to channels without an account

FreeTube Cordova is currently in Beta. While it should work well for most users, there are still bugs and missing features that need to be addressed.

Anti-Features:

ApplicationDebuggable: APK files of this application are compiled for debugging („application-debuggable“). 
NonFreeNet: This application promotes or entirely depends a non-Free network service.

Permissions:

BLUETOOTH
FOREGROUND_SERVICE
INTERNET
MODIFY_AUDIO_SETTINGS
READ_EXTERNAL_STORAGE
RECORD_AUDIO
WAKE_LOCK
WRITE_EXTERNAL_STORAGE

Libraries:

Android Support v4 (Development Framework)
AndroidX Activity (Utility)
Android Jetpack Annotations (Utility)
Arch (Utility)
AppCompat (Utility)
Asynclayoutinflater (UI Component)
Android Support Library collections (Utility)
Coordinatorlayout (UI Component)
Androidx Core (Utility)
AndroidX Cursor Adapter (Utility)
Android Support Library Custom View (UI Component)
Documentfile (UI Component)
Drawerlayout (UI Component)
AndroidX Fragment (UI Component)
Interpolator (UI Component)
androidx.legacy (Utility)
Lifecycle (Utility)
Loader (Utility)
AndroidX Local Broadcast Manager (Utility)
Media (Utility)
Print (Utility)
Android Activity Saved State (Utility)
Slidingpanelayout (UI Component)
Swiperefreshlayout (UI Component)
Tracing (Utility)
Vectordrawable (UI Component)
Android Jetpack VersionedParcelable (Utility)
Viewpager (UI Component)
Webkit (Utility)
Cordova Music Controls Plugin (UI Component)
CordovaClipboard (Utility)
Cordova Background Plugin (Utility)
Cordova Background Plugin (Utility)
Cordova plugin for theme detection (Utility)
Apache Cordova (Development Framework)
Webkit Boundary Interfaces (Utility)

Snapshots

snap01 snap02 snap03