AntonioRedondo / AnotherMonitor

Monitors and records the CPU and memory usage of Android devices
https://play.google.com/store/apps/details?id=org.anothermonitor
GNU General Public License v3.0
1.1k stars 335 forks source link

EPERM when trying to create CSV on Android 11 #21

Open tatokis opened 2 years ago

tatokis commented 2 years ago

Trying to start a recording on Android 11 (LineageOS 18.1) results in an EPERM error. According to logcat it seems that Android, with the existing permissions requested and granted, only allows access to Downloads and Documents.

04-09 22:54:14.094  3098  3341 W MediaProvider: Forgot to handle a top level directory in getContentUriForFile?
04-09 22:54:14.096  3098  3341 E MediaProvider: insertFileIfNecessary failed
04-09 22:54:14.096  3098  3341 E MediaProvider: java.lang.IllegalArgumentException: Primary directory AnotherMonitor not allowed for content://media/external_primary/file; allowed directories are [Download, Documents]
04-09 22:54:14.096  3098  3341 E MediaProvider:     at com.android.providers.media.MediaProvider.ensureFileColumns(MediaProvider.java:2707)
04-09 22:54:14.096  3098  3341 E MediaProvider:     at com.android.providers.media.MediaProvider.ensureUniqueFileColumns(MediaProvider.java:2372)
04-09 22:54:14.096  3098  3341 E MediaProvider:     at com.android.providers.media.MediaProvider.insertFile(MediaProvider.java:2981)
04-09 22:54:14.096  3098  3341 E MediaProvider:     at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:3533)
04-09 22:54:14.096  3098  3341 E MediaProvider:     at com.android.providers.media.MediaProvider.insert(MediaProvider.java:3249)
04-09 22:54:14.096  3098  3341 E MediaProvider:     at com.android.providers.media.MediaProvider.insertFileForFuse(MediaProvider.java:6717)
04-09 22:54:14.096  3098  3341 E MediaProvider:     at com.android.providers.media.MediaProvider.insertFileIfNecessaryForFuse(MediaProvider.java:6804)
04-09 22:54:14.097  5975  6002 W System.err: java.io.FileNotFoundException: /storage/emulated/0/AnotherMonitor/AnotherMonitorRecord-2022-04-09-22-54-14.csv: open failed: EPERM (Operation not permitted)
04-09 22:54:14.097  5975  6002 W System.err:    at libcore.io.IoBridge.open(IoBridge.java:492)
04-09 22:54:14.097  5975  6002 W System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:236)
04-09 22:54:14.097  5975  6002 W System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
04-09 22:54:14.097  5975  6002 W System.err:    at java.io.FileWriter.<init>(FileWriter.java:90)
04-09 22:54:14.097  5975  6002 W System.err:    at org.anothermonitor.ServiceReader.record(ServiceReader.java:479)
04-09 22:54:14.098  5975  6002 W System.err:    at org.anothermonitor.ServiceReader.read(ServiceReader.java:449)
04-09 22:54:14.098  5975  6002 W System.err:    at org.anothermonitor.ServiceReader.access$100(ServiceReader.java:53)
04-09 22:54:14.098  5975  6002 W System.err:    at org.anothermonitor.ServiceReader$1.run(ServiceReader.java:85)
04-09 22:54:14.098  5975  6002 W System.err:    at java.lang.Thread.run(Thread.java:923)
04-09 22:54:14.098  5975  6002 W System.err: Caused by: android.system.ErrnoException: open failed: EPERM (Operation not permitted)
04-09 22:54:14.098  5975  6002 W System.err:    at libcore.io.Linux.open(Native Method)
04-09 22:54:14.098  5975  6002 W System.err:    at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
04-09 22:54:14.098  5975  6002 W System.err:    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
04-09 22:54:14.099  5975  6002 W System.err:    at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
04-09 22:54:14.099  5975  6002 W System.err:    at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7550)
04-09 22:54:14.099  5975  6002 W System.err:    at libcore.io.IoBridge.open(IoBridge.java:478)
04-09 22:54:14.099  5975  6002 W System.err:    ... 8 more

Manually creating /storage/emulated/0/AnotherMonitor/ doesn't seem to change anything.

I don't have an Android dev environment set up, so I can't test changing the directory to one of the allowed ones to test, but I assume that'd enable it to create the CSV.

Running the latest version of the app from F-Droid.