Novalissoide I recommend this over Scrambledeggsif or Imagepipe:
https://github.com/potatameister/MetaPurge/releases
com.potatameister.metapurge
30:5B:F6:26:EE:9D:33:17:BF:81:B7:00:21:9E:DD:D0:6D:D5:F2:1A:9D:73:1A:84:92:AE:65:DA:4C:E3:B0:EF
It shows much more of various EXIF, and other properties of the pictures you analyse, and optionally removes them.
But can it share to AOSP Messaging? Also it may remove more metadata which is a good thing, but I'm not sure if it's necessary for camera pictures. Do the Pixel camera drivers add any metadata that isn't removed by standard EXIF sanitizers? Also it doesn't look like it supports "pipe" behavior (although I don't know for sure). Also it's doesn't appear to be available from F-Droid or seemingly anywhere but Github. Also it declares INTERNET permission even though it claims 100% offline operation (can be revoked by GrapheneOS but still, seems odd). Thanks for the recommendation though. I might give it a try, not sure yet.
JulianKaiser The "assertFail called" crash when sharing private files (like from Files app or Gallery) to Signal or other messengers is a known GrapheneOS limitation right now.
But system apps like Files, Gallery, and Camera can share to Messaging just fine (along with SnapSafe and DroidFS). It's just certain third-party apps like ScrambledExif and ImagePipe that can't share to Messaging. (One exception is that Messaging can't share to Messaging. If you open a thread, tap an image to open it full screen, tap share, and choose another thread, you get a similar "Cannot share private file content://mms/part/xxxx" error.)
Probably9857 The code that fails isn't in the OS though. It is in the Messaging app.
So there are two different things going on here? One is AOSP Messaging on any OS is incompatible with apps that share files in /data because of the hacky code Probably9857 found. The other is the strict content URI enforcement pointed out by JulianKaiser which is specific to GrapheneOS but affects various other apps, including Signal and Immich, that don't fallback to SAF properly (or something). So even if we removed the hack from AOSP Messaging, it's still unclear if it could properly handle the content URI restrictions imposed by GrapheneOS?
Eirikr70 Maybe look at this answer to an issue with another Android app (Immich).
Immich uses share_plus, which shares files via Android's
FileProvider. FileProvider grants the receiving app temporary read
permission. The problem: SMS/MMS apps don't read the file
themselves, they pass it to Android's system MMS service, a
separate process that never receives that permission. The
attachment silently fails. WhatsApp works because it reads the
file in its own process.
Makes sense, but this explanation doesn't sound like it would be specific to GrapheneOS...? It does sound like the same issue, at least based on symptoms; on a technical level, I'm not sure either.
Probably9857 It seems like the file they are attempting to share is located in external storage, where it is assumed other apps will be able to access it.
The apps that fail are trying to share a file from their internal (private) storage. That should work too, but the Messaging app has code to prevent it.
I guess that would kind of explain why Files, Gallery, and Camera can share to Messaging, because they're likely just constructing a URI that points to a file that already exists on external storage. ScrambledExif and ImagePipe are creating and modifying a temporary file located in private storage (/data). Messaging shares a content://mms/part/xxxx URI which I assume resolves to a file in the app_parts directory on private storage.
Still, if this is so, how is it that ScrambledExif can share to QUIK, even though it's sharing a private file (content URI that resolves to a file under /data)? And why is it that DroidFS and SnapSafe can share to all other apps, including Messaging, even though they use an encrypted vault? 🤔