Artwork for podcast Android Bytes (powered by Esper)
How Scoped Storage changed Android file access
Episode 2325th July 2022 • Android Bytes (powered by Esper) • Esper.io
00:00:00 00:51:15

Share Episode

Shownotes

Get ready for a doozy. This episode tries to explain how storage works on Android with a focus on Google's on-again, off-again approach to scoped storage and how apps navigate it all. Hopefully you don't come out of this more confused than before.

We talk with Raymond Lai, part of the team behind Amaze File Manager.

  • 03:01 - How did storage access used to work in the early days of Android? What is the difference between internal and external storage?
  • 05:00 - Why is external storage mounted using a virtual file system? Where can apps store files, and what is the "Android" folder used for? What was the problem with mounting external storage as VFAT?
  • 10:00 - Why did Android 4.4 switch from VFAT to using FUSE to emulate FAT32? Is FUSE still being used? What is SDCardFS?
  • 12:07 - What is Scoped Storage? How did it affect external storage access?
  • 13:12 - What is the MediaStore API? How does Scoped Storage protect users?
  • 17:02 - What is the Storage Access Framework, and why was it so controversial? How did it affect apps?
  • 24:00 - How did Scoped Storage break file access on some Android TV devices?
  • 26:54 - How did Google respond to developer feedback on Scoped Storage before Android 10's release?
  • 27:43 - How did Scoped Storage change in Android 11? What is the "all files access" permission and what are its limitations? How did file managers get around these limitations?
  • 31:55 - Why did Android return to FUSE? What was the limitation with SDCardFS? How did Google improve FUSE, and what problems does it still have?
  • 38:44 - What is FUSE passthrough in Android 12? How does it improve performance?
  • 40:22 - How will Android 13 change file access on Android?

Android Bytes is hosted by Mishaal Rahman, Senior Technical Editor, and David Ruddock, Editor in Chief, of Esper.

For more about Esper, visit us.

Our music is "19" by HOME and is licensed under CC BY 3.0.

Transcripts

David:

Hello, and welcome to Android bites powered by Asper I'm, David

David:

Rudick and each week I'm joined by my cohost Michelle ramen.

David:

As we dive deep into the technical world of Android, and we're going to

David:

be talking about something that keeps everybody awake at night file access

David:

and file systems on Android, which is after reading the outline for this show.

David:

I am more confused than when we started.

David:

So I'm really excited to learn here and I'll let Michelle introduce our.

Mishaal:

thank you, David.

Mishaal:

And I apologize in advance to anyone who's gonna walk away more confused

Mishaal:

than before they came into this show.

Mishaal:

So, uh, before we dive into the, uh, confusing aspects, let me

Mishaal:

just offer a brief opportunity for Raymond to introduce themselves.

Mishaal:

So welcome to the show, Raymond, and tell our listeners what you do.

Mishaal:

What do you work on?

Raymond:

Hello everyone.

Raymond:

I'm Raymond from Hong Kong.

Raymond:

And currently I'm work on, uh, Android farm manager

Raymond:

project called ma farm manager.

Raymond:

And I joined it from 2018 when I need a farm manager that can dosh copy.

Raymond:

So after back and forth some good requests, the team

Raymond:

invited me to join the project.

Raymond:

Currently my focus in the MAs project is mostly on integrations about

Raymond:

different protocols, the FTP server, and the recent one I'm working, been

Raymond:

working on and have been asked by.

Raymond:

The users many time is the far FTP client

Mishaal:

support.

Mishaal:

Well, thank you for joining us.

Mishaal:

And for those of you who haven't used the app before it's available on Google

Mishaal:

plays, the maze file manager app.

Mishaal:

And the reason I wanted to invite a developer who's worked on file managers

Mishaal:

is because the topic of today's discussion is scope storage, or rather how scope

Mishaal:

storage changed Android file access.

Mishaal:

And it's, it's a very complicated subject.

Mishaal:

Um, one that I still.

Mishaal:

To this day, I have to verify that I know what I'm talking about by looking

Mishaal:

it up on the inter developer docs.

Mishaal:

Every single time I wanna write about scope storage.

Mishaal:

I have to go back and make sure did I get this bit right?

Mishaal:

And a lot of times it's I, you, you miss something minor detail, but the

Mishaal:

reason scope storage is confusing is not anything particularly to do with the

Mishaal:

concept itself, but rather how Google approached the scope storage model.

Mishaal:

It's because that when they introduce scope storage with Android, The way

Mishaal:

file access worked then continued to change with every Android release since.

Mishaal:

So with Android 11, it got significantly changed with Android 12.

Mishaal:

There was some behind the scene changes.

Mishaal:

And with Android 13, there are some rather significant, but not a significant

Mishaal:

changes, but still like if you're an, a developer, who's trying to figure

Mishaal:

out, okay, I want to access files.

Mishaal:

Where do I store them?

Mishaal:

How do I access them?

Mishaal:

It's gotten a lot more complicated than it used to be in the earlier days of.

Mishaal:

And because file access intersects with so many different other aspects

Mishaal:

of Android, including the Linux kernel, the underlying file systems, the

Mishaal:

way the storage ship is partitioned.

Mishaal:

I think it's an interesting topic and something that's worth discussing.

Mishaal:

So before we actually talk about scope storage, I think it's important.

Mishaal:

We actually go way, way, way back.

Mishaal:

I mean, the early days of Android, like over a decade ago to talk about SD cards.

Mishaal:

So in the very early days of Android, I'm talking like in the nexus one era.

Mishaal:

A lot of phones or most phones rather depended on having removable SD

Mishaal:

cards to hold media files as well as additional apps in their data.

Mishaal:

Since at the time internal storage ships had rather mediocre capacities.

Mishaal:

So during this time Google referred to the SD card as Android's external

Mishaal:

storage, which obviously made sense because SD cards were removable and

Mishaal:

they weren't built into the device.

Mishaal:

When Google shifted away from SD cards with the nexus S though

Mishaal:

everything then had to be stored onto the devices, built in storage ship,

Mishaal:

including all the media files and all the app data, et cetera, that were

Mishaal:

previously stored on the external SD.

Mishaal:

However, in order to maintain compatibility apps that were expecting

Mishaal:

files to be stored on the physical external SD card Mount point would instead

Mishaal:

be transparently directed to the new slash data slash media Mount point to this

Mishaal:

day, you'll see a lot of ADB commands, ADB tutorials that refer to SD slash

Mishaal:

SD card when such a thing doesn't exist on most Android phones instead slash SD

Mishaal:

card is just symbolic link to slash data slash media because of this legacy of

Mishaal:

Android used to rely on physical SD card.

Mishaal:

So the reason I'm talking about SD cards and stuff, that's over a decade

Mishaal:

old is because to this day, Android still refers to slash data slash media

Mishaal:

as external storage, even though nine outta 10 times, that's actually storage.

Mishaal:

That's internal to the device.

Mishaal:

The way that Android sees storage is that you have the underlying

Mishaal:

user data partition on phones, which is mounted at slash data it's.

Mishaal:

So the data partition is writeable media.

Mishaal:

It's where all your app data, all your removal files are stored.

Mishaal:

It's generally split into two parts.

Mishaal:

You have everything outside of slash data slash media, which

Mishaal:

Android considers internal storage.

Mishaal:

Then you have everything inside of slash data slash media.

Mishaal:

That's considered external storage.

Mishaal:

And the reason those two are separated is because the internal storage and the

Mishaal:

external storage at slash data slash media are actually mounted differently.

Mishaal:

So even though the underlying data partition may be formatted

Mishaal:

in F two Fs or X four file systems slash data slash media is actually

Mishaal:

mounted with a virtual file system.

Mishaal:

There are many reasons to do this most importantly, being that.

Mishaal:

So you don't have to unmount the entire phones data partition whenever

Mishaal:

you wanna hook it up to a PC, but there are also some privacy and

Mishaal:

security benefits to having this.

Mishaal:

So prior to Android, 4.4 kit cat, this virtual SD card partition is

Mishaal:

what soft often referred to as was mounted using the VF a T file system.

Mishaal:

But this posed some problems in the early days.

Mishaal:

This is because the slash data slash media Mount point or the external

Mishaal:

storage is what I'll refer to it pretty much from now on is not only

Mishaal:

where you'll find the shared downloads folder, your pictures, music, movies,

Mishaal:

and other sensitive media folders.

Mishaal:

But it's also home to the Android folder.

Mishaal:

And the Android folder is where apps can read or write whatever files they want

Mishaal:

within their app specific directories.

Mishaal:

So like slash Android slash data slash Android slash B for, uh, game files.

Mishaal:

So just another broad step back apps could store files in one

Mishaal:

of three primary locations.

Mishaal:

There are app specific directory in the internal storage I E

Mishaal:

and slash data slash data.

Mishaal:

There are app specific directories in the external storage.

Mishaal:

Many times you see it as slash SD card slash Android.

Mishaal:

When in actuality it's slash data slash media slash the user ID slash Android

Mishaal:

or any other directory in external storage that they have access to.

Mishaal:

So app specific directories in the internal storage are rather

Mishaal:

limited in space intentionally by.

Mishaal:

So apps that need to store lots of large files or just lots of

Mishaal:

files in general, generally picks somewhere in the external storage.

Mishaal:

So an app like telegram, for example, has a ton of cashed

Mishaal:

images and documents and videos.

Mishaal:

So it stores all of that in its app specific external storage directory.

Mishaal:

The problem with the way this was implemented in Android prior to

Mishaal:

4.4, is that the V F a T file system didn't support the kind of permission

Mishaal:

management that Google wanted to.

Mishaal:

I.

Mishaal:

The issue was that apps that wanted to read and write files into their own app.

Mishaal:

Specific external storage directories had to request the read external

Mishaal:

storage and write external storage permissions in order to do so.

Mishaal:

But requesting those permissions also gave apps broad access to the

Mishaal:

entirety of the external storage, just by needing the permissions to

Mishaal:

access their own specific directories.

Mishaal:

They also had access to the entirety.

Mishaal:

The external storage.

Mishaal:

That was a problem because this was basically start of apps, having too

Mishaal:

much access to external storage, which also housed other shared media files.

Mishaal:

So that was a lot before we move on to how Android or how Google

Mishaal:

started to address this problem.

Mishaal:

I wanted to ask about your thoughts and experiences dealing with file

Mishaal:

management in the early days of Android.

Mishaal:

Like, what were your thoughts on SD cars?

Mishaal:

Things like apps to SD mass storage, et.

Raymond:

First of all.

Raymond:

I think Google's decision to use we at is external storage because of

Raymond:

compatibility concern, because about 10 years ago, many users are still on

Raymond:

using windows or Mac silver, little who are using Linux as their desktop.

Raymond:

So using we as the file system, they, they, they can Mount on, they can

Raymond:

do this without any special drivers.

Raymond:

So that they can just plug into the USB port and they can access the files

Raymond:

inside the Android phone directly.

Raymond:

And then before that they of keep cats.

Mishaal:

I think we mostly use

Raymond:

the farm manager that the Android phone bundled in.

Raymond:

So perhaps there are many different kinds of implementations from different vendors,

Raymond:

but generally you can see the Android phone as simply as, uh, speech fund drive.

Raymond:

If you can, if you say otherwise, very simple,

David:

that's an interesting analogy.

David:

And I had not thought of it that way, but that makes a lot

David:

of sense actually, intuitively.

Mishaal:

Yeah.

Mishaal:

So as Raymond mentioned, using V F a T allowed for broad compatibility,

Mishaal:

because the way PC access worked was that Android would actually unmount the

Mishaal:

virtual SD card partition, and then it would Mount it onto the connected device.

Mishaal:

Obviously this led to some problems early on, because if you wanted to use your

Mishaal:

phone while it's connected to the PC, all of a sudden, a lot of apps will be

Mishaal:

missing media files or missing some data.

Mishaal:

So instead Android then shifted to using the media transfer protocol

Mishaal:

or MTP to handle a file transfer.

Mishaal:

And this made it so that it didn't matter what file system

Mishaal:

was used on the Android device.

Mishaal:

It would still be supported by the PC.

Mishaal:

So be something connected to the PC.

Mishaal:

And the reason you can look that up how MTP works, but that's not

Mishaal:

really important for this, but that was one of the ways that Google.

Mishaal:

Was able to shift away from VF a T in Android, 4.4, starting from Android

Mishaal:

4.4 and beyond, instead of mounting the virtual SD card partition as VFA, Google

Mishaal:

decided to use Lennox's file system and user space feature or fuse for short.

Mishaal:

To emulate F a T 32.

Mishaal:

So the reason Google decided to switch to emulating F a T 32, is

Mishaal:

that it allowed Android to use F fat's directory style permissions.

Mishaal:

This made it possible for Android to let apps access their own app specific

Mishaal:

external storage directories without needing those read external storage

Mishaal:

and write external storage permiss.

Mishaal:

Eventually Google did what Google does best and deprecated using

Mishaal:

fuse switched to SD card Fest for various reasons, which is a Samsung

Mishaal:

developed kernel file system wrapper.

Mishaal:

And that, uh, was done in Android 8.0 to improve performance and fixed some issues.

Mishaal:

But then they reverted back to fuse in Android 11 after making some improvements.

Mishaal:

And in order to better support some scope, storages, new feature.

Mishaal:

But we'll get into that bit later.

Mishaal:

It's a bit of Android file system history.

Mishaal:

That is not super important to understand the nitty gritty of right now.

Mishaal:

But what's important to take away from this is that by switching

Mishaal:

from the V a T style system to using fuse, to emulate F a T 32.

Mishaal:

The end result is that fewer apps needed to hold the read external storage and

Mishaal:

write external storage permissions.

Mishaal:

And so that means that fewer apps had the ability to clutter your

Mishaal:

external storage with folders or Snoop on your private media files.

Mishaal:

However, this didn't solve everything because there's still far too many

Mishaal:

apps having broad file access.

Mishaal:

And over the years, Google tried to reduce the number.

Mishaal:

The most significant thing they tried was Android 6.0, which

Mishaal:

introduced runtime remission.

Mishaal:

Read external storage and write external storage now had to be manual

Mishaal:

granted by the user at run time.

Mishaal:

So like there would be a dialogue asking the user, do you want to grant these

Mishaal:

permissions instead of granting them automatically at install time, but this

Mishaal:

still did not do enough to limit the number of apps that had broad file access,

Mishaal:

something big needed to change to do this, which leads us to scope storage.

Mishaal:

Scope storage for those of you don't know, was introduced with Android 10 and

Mishaal:

it's described as a it's a new model for the way file access works in Android.

Mishaal:

It revamped the way fi apps could access files located on the external storage.

Mishaal:

The biggest change that scope storage made was to the right external storage

Mishaal:

and read external storage permissions.

Mishaal:

So for apps that target Android 10, right, external storage

Mishaal:

effectively became deprecated.

Mishaal:

And folded into read external storage.

Mishaal:

So whenever you grant an app access to read external storage,

Mishaal:

it implicitly has the ability to also write files or modify files.

Mishaal:

Read external storage on the other hand was significantly reduced in

Mishaal:

scope granting an app that permission no longer gave it broad access to

Mishaal:

the entirety of external storage.

Mishaal:

Instead, the permission only gave access to media files that were contributed to

Mishaal:

media store collections by other apps.

Mishaal:

I'm I'm gonna get the media store in a bit.

Mishaal:

So basically apps that contribute media files to media store collections can do so

Mishaal:

without needing any permissions to do so.

Mishaal:

But in order to read or modify files that other apps contributed, they need to

Mishaal:

hold the read external storage permiss.

Mishaal:

So you're an app developer.

Mishaal:

Raymond who's worked on file manager.

Mishaal:

Can you tell us a bit about the media store API for listeners who

Mishaal:

may not be familiar with it about

Raymond:

the media store API is to carry API to carry different

Raymond:

kinds of media files on the device categorized by different video types,

Raymond:

like image, audio documents, cetera,

Mishaal:

et C.

Mishaal:

Right.

Mishaal:

So like Android has like an index of media files.

Mishaal:

If you've ever opened like the files app, you have like the images

Mishaal:

filter, it shows you images from various filters on your device.

Mishaal:

That's basically the user facing access to the media store and apps can add their

Mishaal:

own image files to that media store.

Mishaal:

And then other apps can access those image files in the media store.

Mishaal:

But in order to access images that other apps contributed, they need

Mishaal:

the read external storage permiss.

Mishaal:

So that's what end enter 10 and

David:

just provide some context on this.

David:

I'm sure we can get into this later on as well, but there were really good reasons.

David:

Google did this.

David:

Number one is just that applications in general, the number of files,

David:

they would have broad access to the ability to read and write.

David:

There are obviously nefarious things that they could do with that permission.

David:

If a user did not understand what kind of permission they were

David:

granting that application and users.

David:

When an application, especially asks for file access, I think are very likely to

David:

say yes, because that is something that from the windows and Mac O S paradigms,

David:

um, is very common applications, always need file access because they need

David:

to see directories access, you know, documents, whatever the case may be.

David:

So users are very accustom to just being like, yeah, it's an app.

David:

It needs access files.

David:

I.

David:

Files, but, and the way the Android file system works, which is say

David:

something I don't understand very well.

David:

I do not know enough to even say what granting full file system access

David:

really would let an app do per se, compared to something like windows.

David:

And so Google was trying to define, okay, what are the very safe.

David:

File types.

David:

We can let any app, as long as the user says, okay.

David:

Access and obviously images, video, audio, because those are things that

David:

people share constantly and really do want to move between applications,

David:

whether it's touching up a photo and a photo editing app, or it's sharing

David:

something and putting a filter on it on Instagram, because you already edited

David:

somewhere else in another application.

David:

People want that traceability for their personal media files.

David:

And that's what Google I think was really trying to enable.

Mishaal:

Right.

Mishaal:

And just to clarify for anyone who may be concerned, when we say like broad

Mishaal:

external storage access, external storage, remember is only files

Mishaal:

contained within slash data slash media.

Mishaal:

So it's only the folder.

Mishaal:

It's only the files that are created or stuff you download to your device.

Mishaal:

You can delete the entirety of slash data slash media and your phone is still the.

Mishaal:

Because it's all files created after you install your apps

Mishaal:

and you set up your device.

Mishaal:

None of it's critical to system operation, all of that

Mishaal:

stored in different partitions.

Mishaal:

So it's not like windows or something where you grant an app administrative

Mishaal:

access, it can literally nuke your device.

Mishaal:

Um, I'm unless you're how true that is actually on anymore in modern windows, or

Mishaal:

it's also not the case that you're giving an app like root access that could truly

Mishaal:

Rick havoc, the main concern with giving an app broad external storage access is.

Mishaal:

They can potentially read sensitive media files that you

Mishaal:

don't want them to access to.

Mishaal:

So like for example, if a game wants to store files on a folder of its choice,

Mishaal:

like they create a folder on the external storage in order to do that, they

Mishaal:

needed that external storage permission.

Mishaal:

But at the same time, by giving 'em that permission, they all of a sudden

Mishaal:

had the ability to read your photos or to like to look at your photos.

Mishaal:

That's not something you want to give every game access to and you

Mishaal:

who knows what they might be doing.

Mishaal:

So that's the reason why Google wanted to crack down on this.

Mishaal:

Just there's just too much potential of like a privacy invasion.

Mishaal:

But on the other hand, there are apps that legitimately do need broad, external

Mishaal:

storage access, including file managers like a maze, like the one that Raymond

Mishaal:

works on, but because their scope of read external storage access was reduced.

Mishaal:

These apps need an alternative in order to access the same list

Mishaal:

of directors they had before.

Mishaal:

Fortunately an alternative already existed in Android in the form of

Mishaal:

the storage access framework, which is actually something that Google

Mishaal:

introduced way back in Android, 4.4.

Mishaal:

So the storage access framework or SA for short makes it possible for

Mishaal:

apps to request the user, to grant access to certain directories.

Mishaal:

So what would happen is the file manager like maze would invoke SA

Mishaal:

using an intent and that will then pull up the system provided documents.

Mishaal:

Picker also known as the files app.

Mishaal:

If, if you look it up in many places, The user would then use the files app

Mishaal:

to browse through the external storage and choose which directory to grant

Mishaal:

the app access to which on Android 10, they could even choose to give an app

Mishaal:

access to the entirety of the external storage by just choosing the root folder.

Mishaal:

This sounded fine on paper using SA to access files and

Mishaal:

directories, except for one problem.

Mishaal:

Accessing files via SFA.

Mishaal:

API was slow, really, really slow.

Mishaal:

So slow.

Mishaal:

In fact, that benchmarks done by developers showed it was orders of

Mishaal:

magnitude slower than using traditional Java file API or native file IO commands.

Mishaal:

Something that might take like, uh, mere seconds to maybe scan for music

Mishaal:

files on your external storage would take maybe two minutes to do now.

Mishaal:

Like ludicrously slower developers had raised alarms about SA F of four,

Mishaal:

because it's actually been required to use since Android six point.

Mishaal:

No, if you wanted to access files on external USB flash tribes, but with

Mishaal:

Android 10, it became front and center because it became required to use for apps

Mishaal:

targeting Android 10 in order to actually.

Mishaal:

Access or read many files because enter 10 didn't support, direct

Mishaal:

file path access via the native Java file API or native file IO commands.

Mishaal:

So, Raymond, I think this is a bit where you probably know much more than

Mishaal:

we do so many people may have heard about the controversies around skip

Mishaal:

storage, but they may not be aware of how exactly negatively affected

Mishaal:

certain types of apps or use cases.

Mishaal:

Can you tell us what exactly made file access via SA significantly

Mishaal:

worse than the previous method?

Mishaal:

The

Raymond:

extra effort there to obtain the info stream stream of a particular

Raymond:

file on the storage device, wherever you say, being an SD card or attached that

Raymond:

USB from drive or something, there is an extra effort required to obtain the

Raymond:

stream wheel the end, we the system.

Raymond:

So I think that's the main reason that made

Mishaal:

powers through the SA significant.

Mishaal:

So apart from file managers like a maze, what are some other kinds

Mishaal:

of apps that were also impacted by scope storage and SA and Android 10?

Mishaal:

I think

Raymond:

some game key, uh, console AORs would be affected.

Raymond:

Actually, I didn't try myself because the last device I used to play games

Raymond:

is still running on Android act.

Raymond:

But I think as of Android 10, some, a embryos like retro art, Or dolphin would

Raymond:

maybe affected because the extra require on assessing the files and the storage

Raymond:

and because the users have to put the files in a way that Google, like, so the

Raymond:

AMBS can smoothly assess those files.

David:

So I, I think, and I'll steal your lines from the outline here, Michelle,

David:

because I think this is an interesting use case and it's one that I understand.

David:

So the emulator case is really interesting because essentially Google has said, all

David:

right, well, if you want to use SAAF and you wanna store stuff out here, you can

David:

use that framework like it's accessible.

David:

But if you're using something like a, we emulator that requires many, many, many,

David:

many, many files to load a RO into memory.

David:

It's going to be so slow and for reasons that are not apparently entirely

David:

documented, apparently there are excessive IPC calls from the document

David:

via API when using SA basically just that's what slows it down so much.

David:

And so the solution that this we emulate dev had to do was basically.

David:

Everything gets stored in the app directory instead.

David:

And that means save states.

David:

It means your ROS, probably your bios files, all of it needs to go there,

David:

uh, because that's the only way they can guarantee it'll be performant.

David:

And that means if you uninstall the app.

David:

All of that goes away unless the developer has hit that flag that says, Hey,

David:

there's sensitive personal data here.

David:

Do you want to keep it when you uninstall the app?

David:

But Michelle, uh, I'm sure you can explain more about this whole idea.

David:

The Google play doesn't respect that flag, which to me is nuts.

David:

I didn't know

Mishaal:

this.

Mishaal:

Yeah.

Mishaal:

So there's actually a manifest flag called has fragile user data.

Mishaal:

If you set that to true, then whenever you go to Android settings and try to

Mishaal:

uninstall an app, you'll see a tick box that says keep so and so megabytes of.

Mishaal:

So when you tick that box, the app specific files in their external

Mishaal:

storage directory doesn't get deleted.

Mishaal:

So you can reinstall the app at a later time and all those

Mishaal:

files will still be there.

Mishaal:

The only problem is Google play.

Mishaal:

Doesn't read that the app actually has that flag.

Mishaal:

So if you try to uninstall an app via Google, play it, doesn't ask

Mishaal:

you if you wanna keep that data.

Mishaal:

So you have to actually go through Android settings to uninstall it, to be prompted,

Mishaal:

to keep the data, not through Google play.

Mishaal:

So, yeah, it's a particularly tricky problem.

Mishaal:

And there because there's just Andrew, such a massive platform.

Mishaal:

There are so many different apps and so many different reasons.

Mishaal:

And so many different ways apps have to access files on external storage.

Mishaal:

Of course like Google's goal is good overall, but like

Mishaal:

the way it impacts certain.

Mishaal:

Types of apps is going to be different.

Mishaal:

And interestingly, scope storage also impacts other

Mishaal:

Android platforms differently.

Mishaal:

So from what I've heard, Android TV behaves very interestingly

Mishaal:

in terms of scope storage.

Mishaal:

So Raymond, do you know anything about the way scope storage impacts Android TV?

Mishaal:

Can you tell us a bit about that?

Raymond:

Actually, I didn't have too much experience on this.

Raymond:

I chatted my two boss at home just tonight and it's indeed running on Android 10.

Raymond:

It is a new report TV report.

Raymond:

So haven't tried much about foul assess restrictions, but on the other

Raymond:

hand, I can point out on my Android phone, which is funny on Android 12.

Raymond:

I used to use video land player to play video files while I'm on the go and.

Raymond:

Power management is already affected by the new storages model

Raymond:

because of the scope of storage.

Raymond:

And I want to delete some media files after watching it, but as of

Raymond:

today, video land players, storages model is still rely on assessing

Raymond:

the roots of that storage device.

Raymond:

Hence making it impossible to delete, delete media file, like before,

Raymond:

like, um, Android and I, I think.

Raymond:

Before my upload, my draw on to

Mishaal:

Android trial.

Mishaal:

So just to return to that Android TV example.

Mishaal:

So from what I've read, it's a very weird quirk of some Android

Mishaal:

TV devices is that they don't properly respond to the SAAF intent.

Mishaal:

So from what I said before is that apps can send an intent

Mishaal:

to SA to open the files.

Mishaal:

That the user can then go and choose which directories to give access to

Mishaal:

the app to the problem is that a lot of Android TV devices don't have the

Mishaal:

documents UI app or the files app, or they don't, haven't set it up properly.

Mishaal:

So what happens is that app says, Hey, I want to have access to this directory.

Mishaal:

Then they try to send an intent.

Mishaal:

And then the app doesn't exist on the enter TV device.

Mishaal:

So you effectively, literally cannot do anything with that app or like

Mishaal:

for a dolphin example, dolphin asked the user, where did you store your.

Mishaal:

You try to open the folder, you can't do it.

Mishaal:

So you literally cannot choose where to store your games or you'd have to manually

Mishaal:

move it to its app specific directory.

Mishaal:

So it's a very weird situation.

Mishaal:

And from what I read, it's just because Google didn't mandate it

Mishaal:

on Android TV, even though SAAF like the proper implementation is

Mishaal:

mandated on Android for handhelds.

Mishaal:

For some reason, it wasn't mandated on Android for TV.

Mishaal:

And, uh, I have no idea why, but there is several bug reports about this, but

Mishaal:

it does work on shield TV at least.

Mishaal:

Yeah.

Mishaal:

And

Raymond:

actually some reports about bar manager also from devices that

Raymond:

doesn't have documents, UI install.

Raymond:

Most are because they are using custom realms.

David:

Yeah.

David:

And I mean, that just is a, Michelle is a good example of how Google has to consider

David:

platforms that may or may not get as much attention as mainline Android does.

David:

And the effects that certain requirements will have on them.

David:

Android.

David:

TV's a great example because it SPER.

David:

We deal with a lot of Android TV devices, and it is a wild west in terms of what

David:

manufacturers choose to implement and not implement and allow you to even access

David:

Google, apparently just does not enforce things as strictly or care as much.

David:

And so when you have that kind of situation, yeah.

David:

You're gonna have unintended consequences and I'm sure Google knew that like

David:

going in, I'm sure they could see like, well, this is gonna break

Mishaal:

that.

Mishaal:

So another interesting story while we're on the topic of Android TV and

Mishaal:

paying attention to other platforms.

Mishaal:

When Nvidia rolled out the Android TV, 11 update to the shield TV.

Mishaal:

So on the initial release, the TV did have the documents UI.

Mishaal:

So you could open the files app and be prompted to choose

Mishaal:

which directory to access.

Mishaal:

However, the documents UI didn't provide a way to actually

Mishaal:

navigate the app using the.

Mishaal:

So even though it opened the app and asked you to choose a directory or

Mishaal:

create a directory, you could do neither.

Mishaal:

So you instead after like ADB into it and then use your mouse, or like send inputs

Mishaal:

that was fixed with a subsequent release, but it just goes to show, you know, these

Mishaal:

kinds of things aren't tested as equitably on all platforms and all devices.

Mishaal:

But fortunately, you know, that's why with Android.

Mishaal:

Google actually did respond to feedback.

Mishaal:

There's a lot of backlash from developers who were worried about

Mishaal:

the changes of about the amount of development work they'd have to.

Mishaal:

To update their apps to prepare for scope storage.

Mishaal:

So Google actually backtracked on some scope, storage

Mishaal:

related changes in Android 10.

Mishaal:

The first thing they backtracked on was their plan to split, read external

Mishaal:

storage into three separate permissions, which they later did in Android 13.

Mishaal:

They also made it so Android 10 wouldn't enforce scope storage at all

Mishaal:

for apps that target Android nine.

Mishaal:

And they also made it possible for apps targeting Android 10 to just

Mishaal:

opt out of script storage entirely by setting a specific flag in the.

Mishaal:

So even though scope storage was technically introduced in Android

Mishaal:

10, it didn't really go into effect at all until the next release.

Mishaal:

So with Android 11 scope storage is really in effect now, or when

Mishaal:

Android 11 was released with Android 11, Google made a huge amount of

Mishaal:

changes to address developer feedback.

Mishaal:

One of the most important things they did was introduce the new permission

Mishaal:

called manage external storage.

Mishaal:

Which is shown to the user as quote, all files access.

Mishaal:

Uh, and I'm, I'm putting that in quotes for a reason.

Mishaal:

I'll explain in a second.

Mishaal:

So all files access or manage external storage permission grants,

Mishaal:

the app access to quote all files on external storage, except for

Mishaal:

files under the Android directory.

Mishaal:

So it's everything except for the Android direct.

Mishaal:

At the same time, they also updated storage access tray mix for that apps,

Mishaal:

couldn't be given access to the route directory of the external storage.

Mishaal:

In other words, they couldn't just broadly ask for access to all of external storage.

Mishaal:

They couldn't ask for the download directory and they couldn't ask

Mishaal:

for the Android directory either.

Mishaal:

So this means that the most practical way for apps like file managers

Mishaal:

to gain access to most of external storage would be through the new

Mishaal:

managed external storage permiss.

Mishaal:

So this is something you're probably familiar with.

Mishaal:

Raymond.

Mishaal:

Can you tell our listeners how Google was able to introduce, manage external

Mishaal:

storage without negating the efforts that they went through to reduce

Mishaal:

the scope of read external storage?

Mishaal:

Like how exactly is manage external storage protected?

Raymond:

I think you are probably talking about the Google plays

Raymond:

approval on using this manage external storage flag in manifests.

Raymond:

So they required some apps who need to access to all the files on the storage

Raymond:

to raise this rack in the manifest and send it to Google, play for reveal.

Raymond:

And once they got their approval, you can publish it to Google play with

Raymond:

this flag, enable and devices running on, running on enjoy 11 or onwards.

Raymond:

When they seen this flag, they will ask user, if you want to allow the

Raymond:

app to you to look at or access all the files on the storage.

Raymond:

So this is how Google play.

Mishaal:

So yeah, there's only certain types of apps that Google play will

Mishaal:

allow to request this permission.

Mishaal:

And you have to go through a permission, declaration, forum and whatnot.

Mishaal:

So not just any app can request it and be granted access to.

Mishaal:

So even, so even though this, this permission is shown to the user

Mishaal:

as all files access, as I mention.

Mishaal:

It doesn't actually give you access to all files on the external

Mishaal:

storage apps with its permission.

Mishaal:

Aren't allowed to access files under the Android directory.

Mishaal:

However, amazed as well as many other file managers discovered a workaround to access

Mishaal:

sub directories under the Android folder.

Mishaal:

Anyways.

Mishaal:

So I wanted to ask you, Raymond, can you describe for our listeners,

Mishaal:

how did this loophole work?

Mishaal:

Like how did a maze get access to Android slash data and

Mishaal:

Android slash B and Android 11?

Raymond:

Okay.

Raymond:

About some time user report, such problem.

Raymond:

And we also saw some app which actually can access these to directories and we

Raymond:

Googled and Googled until we find some developers talking about using SA and

Raymond:

by declaring the intent to assess this particular path directly in the intent.

Raymond:

When is the intent sent to the documents?

Raymond:

UI, uh, documents, UI will ask you.

Raymond:

If you want access this Android data or Android be directory after you press yes.

Raymond:

Amaz or your code can access these tools directories directly using SA

Mishaal:

right.

Mishaal:

So to summarize basically Android made it.

Mishaal:

So you can't ask for access to the Android folder in its entirety.

Mishaal:

Developers figured out that you can just ask users to grant access to

Mishaal:

its sub directories individually.

Mishaal:

So even though you can't access all of Android, you can access all

Mishaal:

of Android slash data and all of Android slash B individually, which

Mishaal:

effectively makes the restriction kind of useless for now until Android

Mishaal:

13, which will get on a little bit.

Mishaal:

Moving on to the other changes that Android 11 introduced

Mishaal:

in terms of scope storage.

Mishaal:

As I mentioned before, Android 11 was the first release to actually start

Mishaal:

enforcing scope storage on apps.

Mishaal:

Whereas apps targeting Android 10, but running on Android 11 could still

Mishaal:

opt out using the manifest attribute that I talked about before apps

Mishaal:

targeting Android 11 could not opt out.

Mishaal:

So no matter what Android 11 is the release where skip storage

Mishaal:

is really starting to be.

Mishaal:

And because of Google plays, shifting target API level requirement, eventually

Mishaal:

all new apps and apps that are being updated would have to target Android 11.

Mishaal:

So scope storage is the law of the land and Android.

Mishaal:

Now, by this point in time, Fortunately Google did make some

Mishaal:

other concessions to make script stories more relatable in Andrew 11.

Mishaal:

It restored direct file system access through the Java file

Mishaal:

API and native file IO commands.

Mishaal:

This was beneficial because there were a lot of Java libraries that relied on

Mishaal:

these commands and it would, it would be a huge hassle to have to update

Mishaal:

those libraries in on top of your app.

Mishaal:

I actually didn't know this before, but while I was researching the reason Android

Mishaal:

10 didn't support, direct file system access through the Java file API and

Mishaal:

native file IO commands wasn't because of any intentional restriction by Google,

Mishaal:

but it was because it would've required significant effort in intercepting kernel

Mishaal:

calls, whenever they were developing scope storage, they weren't able to

Mishaal:

implement enforce scope, storage, and implement the Nel call interceptions.

Mishaal:

So that's why Andrew 10 didn't support direct file path access.

Mishaal:

With Android 11, when they switched back to the fuse implementation for emulating

Mishaal:

F ad 32 on the external storage, they also tuned it for better performance

Mishaal:

to bring it on par with SD card Fs.

Mishaal:

But one of the other things they did, one of the other reasons they switched

Mishaal:

back to fuse is that it enabled better support for a script storage

Mishaal:

feature that I didn't mention before and Android 10 Google added a new

Mishaal:

permission called access media location.

Mishaal:

This is a permission that apps have to hold in order to access.

Mishaal:

Unredacted XF metadata from photos.

Mishaal:

So for example, if an app wanted to access the GPS tag in a photo,

Mishaal:

they'd have to hold the new access media location permission.

Mishaal:

The problem is that in Android 10 direct storage access through SD

Mishaal:

card Fs didn't support this feature.

Mishaal:

So like if an app were to use direct file system command, In order to access

Mishaal:

files, they'd still be able to get access to unredacted excess metadata.

Mishaal:

So that's probably partially why it wasn't allowed in Android 10 and why Android 11.

Mishaal:

It was restored because fuse does support this feature.

Mishaal:

So it is able to gate access to excess metadata that apps hold.

Mishaal:

And it's able to check that actually actually actually have the permission.

Mishaal:

That's.

Mishaal:

There's a bit of, a little complicated under the hood behind the scenes

Mishaal:

kind of business going on with how Google actually implements the

Mishaal:

higher level entered features based on lower level file system changes.

Mishaal:

And it seems really confusing that Google keeps switching back and forth

Mishaal:

between these file systems and partitions like every release, but there's a

Mishaal:

reason for every change they make.

David:

and just, uh, on the subject of X's metadata and why that is something

David:

that Google would get hung up on.

David:

You could use that to track somebody's location.

David:

Like it'd be very easy using photos from the camera roll would be trivial.

Mishaal:

Yeah.

Mishaal:

So I switching away from the SD card Fs, which was all inker and not having

Mishaal:

to intercept those kernel calls.

Mishaal:

They were able to support this feature by moving back to fuse, which was all user.

Mishaal:

So yeah, enough of the complicated under the hood talk.

Mishaal:

Now let's just go back to the actual discussion scope storage, actually, LA

Mishaal:

there is one more bit I'm gonna talk about later, but before we move on to what was

Mishaal:

introduced in Android 12, I wanted to ask Graham, what are your thoughts overall on

Mishaal:

the state of file access since Android 11?

Mishaal:

Do you think Google really did address most of the issues that

Mishaal:

were raised by developers when they first introduced skip storage?

Mishaal:

Or are there still some lingering issues maybe around perform.

Mishaal:

I think

Raymond:

the most important complaint is that I can no longer use Java file

Raymond:

API as I did in back in the kit days.

Raymond:

I still miss that because I, I can still freely navigate to the direct as I like.

Raymond:

But that's my problem because I still use the concept of desktop

Raymond:

computer into an Android device and ignoring the those privacy concerns.

Raymond:

Uh, this that's what I can think of, but I think Google is tried to close

Raymond:

the loopholes, the chaos since the kit cat days, because of so many different

Raymond:

types of kinds of APIs, frameworks, they Google asked the ramps to use.

Mishaal:

Yeah.

Mishaal:

And one of the other problems still with storage access on Android.

Mishaal:

The overhead introduced by views itself.

Mishaal:

So this is actually one of the reasons why Google originally shifted away

Mishaal:

from views to SD card Fs was to reduce overhead and file IO operations, but they

Mishaal:

did address some of those performance concerns when they brought back views.

Mishaal:

Because they, uh, actually tuned it for better performance, but there's

Mishaal:

still some performance overhead.

Mishaal:

The reason why this performance overhead is because every single

Mishaal:

time there's a reader write request.

Mishaal:

All these requests have to be forwarded back and forth between the fuse Damon

Mishaal:

and the fuse driver instead of an app.

Mishaal:

Directly making calls that get sent to the underlying file system.

Mishaal:

So like, there's this middle man that's checking each command

Mishaal:

and passing each command.

Mishaal:

So that introduces some overhead on commands that increases the amount

Mishaal:

of time it takes to traverse files on certain directory, et cetera.

Mishaal:

And this is especially felt when you're trying to.

Mishaal:

Do bulk file operations.

Mishaal:

So like you're trying to mass delete or mass move or mass copy, a whole

Mishaal:

bunch of files, especially small files, like a ton of small files.

Mishaal:

You're really gonna feel that performance degradation with fuse.

Mishaal:

But some of the optimizations that Google did to reduce the impact that fuse has

Mishaal:

is that any file operations that are done within the external app specific

Mishaal:

directories, AKA within Android slash data, Android slash OPB bypass fuse,

Mishaal:

so that all those commands are sent directly to the underlying file system.

Mishaal:

So those are pretty much native performance.

Mishaal:

And then supposedly from what I read, there was also an update to

Mishaal:

the media provider mainline module.

Mishaal:

So for those of you who know media provider is one of the modular system

Mishaal:

components that contains the fuse Damon that contains a lot of the

Mishaal:

Android framework, APIs and classes for actually managing file access.

Mishaal:

And October, 2020 update, supposedly brought improvements to bulk file

Mishaal:

operation performance for apps that held the manage external storage permission,

Mishaal:

but still there are still performance overheads that are unavoidable.

Mishaal:

And the only way to avoid them is to really just rewrite how your

Mishaal:

app works instead of like doing operations that would invoke fuse.

Mishaal:

You can use, uh, bulk APIs and content provider or use media provider APIs.

Mishaal:

I.

Mishaal:

there is one thing that changed Android 12, that that should

Mishaal:

improve the performance of file operations through fuse.

Mishaal:

And it's actually called fuse pass through.

Mishaal:

So it's a feature that relies on specific support from the kernel and

Mishaal:

the framework specific kernel versions.

Mishaal:

I think Android 12 5.1 and above 5.10 and above.

Mishaal:

And then the framework that comes through an update to the media provider module.

Mishaal:

So what happens with fuse pass through is that when the fuse Damon is handling a

Mishaal:

file open request, and it determines that the requesting app has full access to the

Mishaal:

requested file, then the system can then subsequently forward all read and write

Mishaal:

request directly to the lower file system.

Mishaal:

So, as I mentioned before, what would normally happen?

Mishaal:

Would that each write, read and write request is forwarded from

Mishaal:

the fuse driver to the fuse Damon, which introduces a lot of overhead.

Mishaal:

So by bypassing that forwarding, it improves performance for reading

Mishaal:

and writing large files in theory, because once you open that large

Mishaal:

file, you can continue to read and write to it without having to go

Mishaal:

through the middle man of the fuse.

Mishaal:

this, of course won't make a lot of difference for reading and writing lots of

Mishaal:

small files because you still have to read and open it and then do a small read and

Mishaal:

write command and then open another one.

Mishaal:

And, you know, they'll still add up, but if you're reading and writing

Mishaal:

data to a large file on the external shared storage directory, then views

Mishaal:

pass through should make a difference.

Mishaal:

It's probably something you haven't heard of before, cuz it's not something

Mishaal:

really Google announced, but it's something that's there in the Android

Mishaal:

docs and it's configured in the.

Mishaal:

But something you may have heard is what Google introduced in Android

Mishaal:

13 and what I alluded to before.

Mishaal:

So in Android 13, they're actually splitting up the read external storage

Mishaal:

permission into three new permissions called read media audio, read

Mishaal:

media video, and read media images.

Mishaal:

So what happens is that apps that are targeting Andrew 13, have to

Mishaal:

request these individual permissions to access the media files of each.

Mishaal:

That are owned by other apps.

Mishaal:

So for example, an app targeting Android 13 that wants to read or modify image

Mishaal:

files, it doesn't own would need to request the read media images, permiss.

Mishaal:

Similarly, if they wanted to modify an audio file, it didn't own they'd

Mishaal:

need the read media audio permission.

Mishaal:

If you were tracking Android APIs across the years, you might have noticed that

Mishaal:

these APIs were actually planned or these permissions were actually planned

Mishaal:

to be introduced in Android 10, but they were removed in Android 10 beta three,

Mishaal:

because Google wanted to give developers more time to adapt their apps for script

Mishaal:

storage, but we're several years out.

Mishaal:

So Google feels comfortable in reintroducing this change into Android.

Mishaal:

One of the other things that Android 13 did is that it closed

Mishaal:

the loophole that file managers like a maze used to gain access to

Mishaal:

the sub directories under Android.

Mishaal:

So you can no longer use storage access framework to request for

Mishaal:

access to slash Android slash data or slash Android slash B anymore.

Mishaal:

I wanted to ask you Raymond, for what are your thoughts on

Mishaal:

Android 13 closing this loophole?

Mishaal:

And if you found a workaround that you can tell us,

Raymond:

Right now I, I, or our team haven't came up with a

Raymond:

solution on solving this problem.

Raymond:

And personally, as a mobile game director in my previous job, actually, I will

Raymond:

welcome the decision to close this local because hackers can no longer use the

Raymond:

Android phone for long to modify the game.

Raymond:

Actually our team is so an amazed for which teaches people how to

Raymond:

hack the Android games by using MAs and open JDK on an Android device.

Raymond:

On the negative side, it will mean more work and more work around, even

Raymond:

more additions, negoti, uh, traditions, negotiation to Google because we want our.

Raymond:

Direct via assess API back, but on the positive side, I think if you think in

Raymond:

an LS way, LS from the ground up had restricted to almost all files except

Raymond:

designated media types, like photos, like new sales videos, except the apple

Raymond:

requests use, use their own proprietary.

Raymond:

But perhaps some Android, maybe we can still use TP or something like, yeah.

Raymond:

MTP is on the USB side.

Raymond:

That means you still plug on the computer.

Raymond:

You used to plug in the computer to access the whole Android device

Raymond:

as like accessing USB fund drive.

Raymond:

But on device, on the go, you are seeing the Android cloud system

Raymond:

as like a iPhone or something.

Raymond:

You only look at your music, your photos, your videos, this on the positive

Raymond:

side, but there's still one complain.

Raymond:

I personally this, uh, I still miss the ability to play music in the folder.

Raymond:

I used to organize music in as photos and rather than scattered all them

Raymond:

into one folder and screw it by and four drag bank to form a pay list.

Raymond:

I just, I still want to just organize it photo nicely and

Raymond:

just throw into music player.

Raymond:

And there you go.

Raymond:

Yeah, that's all my that's one of my thoughts.

David:

I mean, I think we can all relate to that too.

David:

I'm sure we all grew up using either windows or some other

David:

traditional file management system and that's just how our brains work.

David:

It it's how we think about computers and how they organize data.

Mishaal:

I wanted to ask you a question, David, actually hearing

Mishaal:

about all the changes that have come so far with Android in relation to

Mishaal:

file access and file management and all the restrictions that have come.

Mishaal:

Do you think Android will continue to offer relatively open access to

Mishaal:

the underlying external file system?

Mishaal:

Or do you think will become more and more like iOS where you don't

Mishaal:

really have a sense of what actually how the, the structure is actually.

David:

Yeah, iOS is so totally abstracted.

David:

That way apps can create folders in this protected media

David:

space, essentially what it is.

David:

It's the same thing as Androids media collections.

David:

I'm sure in principle, I'm sure it works differently, but if apps can't

David:

see anything outside that very, very narrowly scoped storage area.

David:

I've run into this so many times on my iPad where I'm just like, I want

David:

to see the files, this app I know has access to, but for whatever reason,

David:

I can't, because probably those two developers would need to cooperate

David:

and say, Hey, I can't see your stuff.

David:

Why can't you see it?

David:

And they would have to figure out okay.

David:

Um, what do I need to change my application to see like Google photos, for

David:

example, one of the strange limitations on Google photos, you can only put one

David:

Google photo in one iMessage at a time.

David:

You can't do multiple Google photos, probably because iOS doesn't support

David:

that for third party gallery style applications in the file picker.

David:

So you can see the problems, this approach introduces because it inherently limits

David:

what you can do with the files too.

David:

And explaining that to users.

David:

Like, you're never going to get them to understand the nuances, why one

David:

application can do one thing and why one application can't do another.

David:

And on iOS, that is something I run into all the time.

David:

But like even me being fairly casual for an Android enthusiast, this is not

David:

the kind of stuff most people run into.

David:

And I think that is where Google.

David:

Kind of wants to take, at least the Android phone experience is to a place

David:

where it's very hard for people to break.

David:

That's probably the most important thing.

David:

They don't want people in these directories because the chance that they

David:

could cause an app to misbehave and then either crash or lose their data, God

David:

forbid there's something they can mess up.

David:

So yeah, I do see Google continuing to move this direction.

David:

And the sad truth is that there's not a lot of incentive for them to preserve.

David:

This more traditional file structure access.

David:

I mean, can you imagine how many developers out there, especially

David:

for things like mass market mobile games, get emails from people trying

David:

to like mess around with directory structure and they break something.

David:

I'm sure it happens pretty frequently.

David:

And not to say that that is Google's problem.

David:

Like, you know, users go doing things that break devices all the time,

David:

but at the end of the day, Google's concern is of a massive ecosystem.

David:

And so they're.

David:

What's best for their partners in that ecosystem, their partners are Samsung.

David:

Show me all of these major smartphone vendors.

David:

And they may say, Hey, we're getting a lot of customer support

David:

issues around vis people are really having trouble using file apps.

David:

How do we make this simpler?

David:

And so Google has to digest that feedback.

David:

And as much as we like to think that the Android team is above the fray, in

David:

terms of deciding how the platform works.

David:

I don't think they totally are.

David:

They have to consider these things.

David:

And they also have to consider the fact that there are hundreds of

David:

millions of people out there who use this and who they would like

David:

to use an Android phone one day.

David:

And the more they can make it feel seamless in terms of that

David:

experience, the easier it is to get somebody to switch platforms.

David:

So there's a lot of stuff they have to think about.

David:

That's like, I mean, totally beyond the engineering level there, but.

David:

Yeah, I'm sure they're considering this.

David:

And I would say that the direction we've seen Android go that is they're

David:

going toward a more restrictive

Mishaal:

model.

Mishaal:

Oh.

Mishaal:

And for those of you at home who didn't immediately realize what

Mishaal:

David meant when he said this healed up an iPhone to show us.

Mishaal:

So, uh, that's all the questions that I actually had for this discussion.

Mishaal:

I mean, I know we went through an absolute ton of information and I

Mishaal:

hope this is starting to make sense.

Mishaal:

And I haven't actually confused you more about going through all of this.

Mishaal:

I mean, trust me, it took me a lot to actually digest and put all this

Mishaal:

information down and there's still stuff that I could talk about, like more

Mishaal:

information, but you gotta stop somewhere.

Mishaal:

And I think a one hour mark is a pretty good place to.

David:

And if this is an interesting topic to you, the entire subject of how storage

David:

works on Android and how applications interact with the operating system.

David:

That's a great question for a company like Asper to answer because we deal

David:

with apps on Android devices, especially unusual ones of varying OS distro,

David:

or excuse me, varying OS versions, underlying platform versions all the time.

David:

So if you're wonder.

David:

Hey, can I have an app that like behaves nicely on Android 12,

David:

but also works on my Android nine devices, which I already know it does.

David:

We can help you figure some of this out.

David:

We can help you understand how the platform has changed.

David:

What kind of devices you may need to create the sort of experience you want.

David:

And when it comes to things like Android TV, well, how do you get around the

David:

issue of not having access to the files app on an Android TV device?

David:

That is also one of those sticky questions that you can come to us.

David:

And we can see if there's a solution there because we deal with very

David:

strange Android devices all the time.

David:

We are not a first customizing firmware.

David:

We have our own distribution called foundation available

David:

for arm and X 86 devices.

David:

And this is the kind of thing that if you need an Android device to behave

David:

in a particular way, because it has a very specific task associated with it.

David:

That's what ER's here for.

David:

Check us out@esper.io and Michelle, I'll let you go ahead and, uh,

Mishaal:

do the outro.

Mishaal:

Thanks, David.

Mishaal:

And, uh, thank you again, Raymond for joining us.

Mishaal:

So if people want to follow you in your work, where can they find you?

Mishaal:

Oh, you can find me

Raymond:

at hab.com/trans love because I love trans music.

Raymond:

And you can also find me on our apps, telegram channel ma file manager,

Raymond:

which you can find it at the ma

Mishaal:

file manager app.

Mishaal:

Yeah.

Mishaal:

And if you're looking for a material themed open source file

Mishaal:

manager app check out maze file manager on the Google play store.

Mishaal:

And if you're looking for the content produced by the editorial team at

Mishaal:

Esper, check us out at blog, doper.io, where you'll find all of our content.

Mishaal:

Not just our blog articles, not just our newsletter, but also episodes of this

Mishaal:

podcast, which I'd say thank you again for joining us and listening through an

Mishaal:

hour long discussion of the nerdiest final like topic I could think of right now.

Mishaal:

Um, hopefully this really helped you out.

Mishaal:

It helped me out in piecing this together.

Mishaal:

So thank you for joining us on another episode of Android bites.