Warning message Google Play "RequestLegacyExternalStorage tag in the manifest"

Today when entering the developer console a warning message appeared in my App:

Starting May 5, you will need to indicate why your app requires broad storage access

We detected that your app contains the requestLegacyExternalStorage tag in the manifest file of 1 or more of your application or APK packages.

Developers who have apps on devices running Android 11 and later must use dedicated storage so that users have more control over access to their device’s storage. Starting on May 5, to launch your app on Android 11 or later, you must do one of the following:

-Update your app to use more privacy-related best practices, such as the storage access framework or the Media Store API
-Update your app to declare the Access to All Files (MANAGE_EXTERNAL_STORAGE) permission in the manifest file and complete the declaration in the Play Console as of May 5
-Completely remove the Access to all files permission from your app

For apps targeting Android 11, the requestLegacyExternalStorage tag will be ignored. You must use the Access to all files permission to maintain broad access.

Apps that request access to the Access to all files permission without having the authorized use will be removed from Google Play, and you will not be able to publish updates.

I can’t determine what is adding this permission in my app.

I’m wondering if anyone could shed some light on this situation, as I’m a little confused as to what new permissions will be needed, and haven’t been able to find anything regarding this with Solar2D. Thanks in advance!

2 Likes

I’m also curious about that.

1 Like

Some of my apps use that permission ( WRITE_EXTERNAL_STORAGE ) in order to use the media.save() API. This let’s my apps save images to the photo Gallery.
I’m trying to figure out what do i have to do to solve it.

I have also received this notification. Trying to find out what I need to do to resolve this.

This has been discussed a bit in Solar2D Discord.

Vlad is working on this issue.

2 Likes

@vlads I also received this notification, “Starting May 5, you will need to indicate why your app requires broad storage access”. I hope this can be resolved soon, as I save files to DocumentsDirectory and don’t want this to result in Google breaking our game.

Right this moment I am hard at work on this one. It seems some parts are very tightly interwoven with external storage permissions.

1 Like

Hi Vlad, I am aware of the hard work you are doing to solve it.
I do not know how far you are from being able to publish a release with the solution, but given the proximity of the deadline imposed by Google, and since as in my case with more than 50 applications uploaded to google play with said notification, and I suppose it must there are many other developers with the same situation, is there something we can contribute, such as testing? or perform some contingency action until you have the solution if it does not arrive before May 5, such as compiling with an older version of the SDK?
Without trying to put pressure, just anticipating, I await your feedback.

Hello. I just put out new build: https://github.com/coronalabs/corona/releases/tag/3643
Would appreciate some testing. It removes legacy storage flag.
It has quite a bit of changes, would appreciate help with testing it.

4 Likes

I just did a build with 3643, and initial testing performs as expected. No crashes, player data that gets saved to the documents folder is working just fine. I’ll keep testing it over the course of the next few days.

Just to calm everyone down, DocumentsDirectory, actually, any other standard directory is not on external storage.

Hi @vlads, some of my apps needs WRITE_EXTENAL_STORAGE in order to save images to the Gallery, but I have been reading the documentation from Google and i’m still do not understand it. According to Google Permission requests are evaluated during the release process after adding your APKs or App Bundles, and if your app is already released you need to complete the Permissions Declaration Form and receive approval from Google Play.

When I go to the Permission Declaration Form I get this text:
Your app doesn’t request sensitive permissions, so you don’t need to do anything here

So, good news, I guess? I was not clear on which permissions need declaration. I thought may be only MANAGE_EXTERNAL_STORAGE needs it… But I am not sure.

Hi Vlad, I have compiled several of my Apps with version 3643 (they are drawing and coloring games).

These apps have an option to share the drawings made, for which I take a screenshot of the screen using “display.save”, but when the “native.showPopup” library is invoked, it results in the following message “THIS FILE FORMAT IS NOT COMPATIBLE ”. (I clarify that this function is working correctly in builds made with version 3642 and earlier).

Extract part of the code:

--- Screenshot and as temporary image in system.TemporaryDirectory ---
screenBounds = {xMin = 113, xMax = 853, yMin = 42, yMax = 510}
local FotoTemp = display.captureBounds(screenBounds)
display.save(FotoTemp, {filename="mydrawtemp.png", baseDir=system.TemporaryDirectory})

--- Then the image resulting from that screenshot, I load it in a display group together with another image that I use as a background, which already exists ---

local grupoTemp = display.newGroup()
--- Background ---
local imgBkg = display.newImage(dirImages.."bkg_share.png")
imgBkg.x = _w/2
imgBkg.y = _h/2
grupoTemp:insert(imgBkg)
--- Screenshot ---
local Foto = display.newImageRect("mydrawtemp.png",system.TemporaryDirectory,515,443)
grupoTemp:insert(Foto)

display.save(grupoTemp,"mydraw.png", system.TemporaryDirectory)

local serviceName = "share"
local isAvailable = native.canShowPopup("social", serviceName)
if isAvailable then
       local listener = {}
       function listener:popup(event)
       end
       local options = {service = serviceName, 
                                message = "This drawing I did with 'Princess Coloring Book & Games'", 
                                      listener = listener,
 	                                image = {{filename = "mydraw.png", baseDir = system.TemporaryDirectory}},
                                          url = {"https://play.google.com/store/apps/details?id="..androidIDFree}}

      timer.performWithDelay(200,function() native.showPopup("social", options)	end)

end

Hi @vlads,
I have the same problem that orangegstudios. When I try to share an image I get this message:
THIS FILE FORMAT IS NOT COMPATIBLE

Same for me. I will install the old version of Solar2D and updated very soon 4 of my apps that i have updated with this build.
I anticipated wanting to update my apps with the experimental version.

My app doesn’t require any permissions at all, however I got the same message. As I understand it, any application uses the device’s memory to some extent. Maybe I should make some changes in the code, and everything will pass? This is probably a bit of a stupid question, but I’m worried, because it’s not so long until May 5 and I don’t want to lose my audience. Sorry for my English.

you should be fine. If your app didn’t have external storage permission, nothing should be changed for you. But make sure to test it.

Thanks for reporting! Looking into it. Next time post code as code. You can do it with surraunding code with tripple backquote (`, same button as ~ on most of layouts): For example

```lua
print("hello")
```

would produce

print("hello")

:ok_hand:
I’ll take it for next time!