Hi, Norman,
Thanks for the information.
I agree with option 1.
I think the problem i met actually is conflict of permissions like
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
in AndroidManifest.xml.
This conflict issues happen because our ConfigChanges/munge-util.js
cannot merge these two permissions properly.
Therefore i feel that it is better to remove all
`WRITE_EXTERNAL_STORAGE` or `READ_EXTERNAL_STORAGE` permissions
from all our plugins and user can add this permission manually in
config.xml if it is necessary.
That is my opinion.
Thanks.
Ken Naito
On 2023/06/23 0:09, Norman Breau wrote:
Hi Cordova Developers,
I've been chatting with Erisu but looking to get more opinions on this
matter.
We have several plugins that declare WRITE_EXTERNAL_STORAGE
permission, which is semi-obsolete since API 19, and completely
obsolete since API 29.
Starting with API 19, WRITE_EXTERNAL_STORAGE was only used if you
wanted to write to a file on external storage that was NOT owned by
your application. Starting with API 29 with Scoped Storage mechanisms,
the MediaStore API must be used which grants your application
permission if the owning app decides to grant it via it's content
provider to a specific file being requested.
While WRITE_EXTERNAL_STORAGE itself didn't grant any special
permissions on API 29+, it did implicitly still grant
READ_EXTERNAL_STORAGE allowing your app read files owned by other apps
on external storage which became obsolete in API 33.
To attempt to put things as simple as possible. If you're working with
files created by your app and only your app, no special permission are
needed on any SDK level we currently support. If you need write access
to other apps external files, then WRITE_EXTERNAL_STORAGE is required
up to API 28. API 29+ requires the use of MediaStore API. If your app
needs to read files owned by other apps, then READ_EXTERNAL_STORAGE is
required up API 32. API 33+ requires READ_MEDIA_* permissions, there
is a granular permission for IMAGES, VIDEO, and AUDIO. Other files
types requires MediaStore API.
Where this starts to get tricky is due to the edit-config munging
issues, if two plugins wants this permission, it needs be declared
identically otherwise conflicts will be triggered and Cordova will
refuse to install the plugin.
The options we kinda of thought of are as follows:
Option #1:
Remove WRITE_EXTERNAL_STORAGE declaration from our plugins. Our Min
SDK is now 24, this allows the app to still read and write files to
external storage for their own app usage. No additional permissions
needed.
Our plugins may still have support for requesting permissions, but
that support will have to be opt in via edit-config / config-file
entry inside the config.xml, which should be documented respectively.
This should clear of any potential conflicts between Apache provided
Plugins and third-party plugins, but third-party plugins may still
conflict upon themselves and/or based on what the user has configured.
Option #2:
Support READ/WRITE_EXTERNAL_STORAGE for API 24-32 support, and
READ_MEDIA_* for API 33 support where it makes sense. (e.g.
cordova-plugin-camera may need READ_MEDIA_IMAGES while
cordova-plugin-media may need READ_MEDIA_AUDIO). This option has a
high risk of being incompatible with other plugins that requires
external storage use. This option would probably be the preferable one
if we can make our config munging smarter but that isn't an easy task
to accomplish.
If there are any other ideas... would be nice to hear about them, but
personally I also feel Option #1 is probably the cleanest way forward
I think.
1.
https://developer.android.com/reference/android/Manifest.permission#WRITE_EXTERNAL_STORAGE
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org