Filename casing and pattern issues with Android
See original GitHub issueI had image filenames like layout-StackLayout.png which generated Android resources without error, however nothing displayed in my app for those. If I remove the dash and rename it all lowercase, it works.
My initial reaction is to throw errors and warn the dev of appropriate conventions, however that feels against he value prop of a xplat solution which should handle such annoyances elegantly. We ought to do the right thing for the platform, but I wonder how that’ll bite us later. 😃
Issue Analytics
- State:
- Created 3 years ago
- Reactions:3
- Comments:5 (1 by maintainers)
Top Results From Across the Web
File's method renameTo() returns true but does not actually ...
File's method renameTo() returns true but does not actually rename the file if I change filename's lower/upper cases ; "SubFolder1"; String ...
Read more >Android storage use cases and best practices
To help you migrate your app to support scoped storage, follow the best practices for common storage use cases that are outlined in...
Read more >Android File Search does not work or could not be ...
The Android App file search does not work. ... That is why it is disabled and the default search pattern “uses” start with...
Read more >Validate String as Filename in Java
In this tutorial, we'll discuss different ways to validate if a given String has a valid filename for the OS, using Java.
Read more >java.io.FileWriter not case sensitive for file names?
Hey, I'm on Mac OS X 10.7.2 with Java SE 6 and I noticed that the FileWriter class doesn't seem to be case...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found

@davidortinau so this is a tough one to handle elegantly given the restrictions android places on this. We ultimately generate resource drawables, and that pretty much limits us to lowercase alphanumeric characters, no number for the first character, and underscores allowed.
We could try and rename files as we generate them to follow the naming rules, but there are some problems with this:
Source="The-Cat.png"we need to map that tothe_cat.pnginstead). Keep in mind, this is just for MAUI, and things like Comet, etc will have to do their own handling as well. Plus any other custom code that somehow works around the touch points we use, would need to account for this.the-cat.pngandthe_cat.png, when we fix the first filename to use_instead of-, we now have two files named the same. This is a simple case and we could add more logic to look for collisions and keep changing it until we’re good, but it complicates the code, and validation of it both in fixing the filename at build/generation time, and trying to find the right match at runtime.I’d like to provide a frustration free experience, but it feels like the better path here might be to go and fail fast letting developers know right away that their filename is invalid. It’s a pretty quick fix if we provide a detailed error.
I agree with @srqdev that it should automatically change the name to lowercase since that doesn’t change the filename itself. However, I think that if it can’t create the files because of a restriction, then it should fail. Resizetizer has one job and if it can’t do it successfully then it should stop and inform the developer. I would rather a build error telling me that “the-cat” is invalid than it silently failing and the image just not showing up. I may have made other code changes at the same time and not even consider that Resizetizer is having an issue.
Handling all of the annoyances gracefully is wonderful but all of the complications that Redth mentioned makes it not worth the trouble if you can just tell the consumer “file xyz’s naming convention does not meet android restrictions. Go here to see what they are:”.