Profile cover photo
Profile photo
I enjoy Android development!
I enjoy Android development!


v4.10.6 is now rolling out to beta testers.

Important: If you opened beta v4.10.5 your exclusions have been reset.

A little post mortem:

Details are also available in this ticket:

Two days ago I started to rollout v4.10.4 into production. Rollout stage was at 5%.
I'm tracking failures to import exclusions via automatic bug reports.
Reports from ~30 users indicated an issue with exclusion loading, causing me to halt the rollout.

Further investigation showed that some people had older exclusions that included the currently unsupported tag `SEARCHER`.
This tag was removed some time ago because it doesn't make sense to exclude results from the search tool.
The new stricter exclusion code choked on this.

No one in beta testing had any such old exclusions and I didn't have this issue on my radar. So this issue didn't popup in beta testing.

v4.10.5 was supposed to deal with this. I wrote a routine that checked whether an exclusion contains this tag and if so removes it, and if it was the only tag, to remove the whole exclusion. This worked fine in testing, I even wrote unit tests for it. But unit tests don't run with proguard. In the final build, proguard (which reduces APK size), stripped out all fields that were not used during migration. The migration routine then only forwarded the two data fields fields that were accessed by it and lost the rest.

v4.10.6 does another migration which deletes all corrupted exclusions such that this is fixed by just upgrading instead of reinstalling SD Maid. It also contains changes such that in similar cases SD Maid may crash during migration but doesn't overwrite with corrupt data.

The lost exclusions can unfortunately not be recovered.
Crash tracking shows about ~100-200 beta testers were affected.

My mistake, sorry :(.

Don't update to beta v4.10.5.

There is bug that will likely require resetting the exclusions.

I'm working on a hotfix.

Post has attachment
Two apps (paid unlocker) vs In-app-purchase (IAP)

I've been thinking about changing the unlocker concept for a while and would like to share my thoughts on this and hear yours.

What we have now:
SD Maid currently has a free main app and a paid unlocker app. The free version of SD Maid detects the installed unlocker and enables the paid features. This exists because SD Maid is ~7 years old, at that time there were no IAPs in Google Play.

What we could have:
IAPs in SD Maids free version. The paid unlocker app still works, but may be unpublished.

Advantages of IAPs:
* Just need to install 1 app.
* A bit less development work as there is just one app to maintain.
* More granular control over pro features. This would allow for development of significant features such as cloud support (Dropbox/OneDrive/GDrive) as an extra IAP. I don't know how I would do this with the current concept.

Disadvantages of IAPs:
* I can not migrate users. Google Play does not support it. If you have bought the unlocker and you don't want to install two apps, then you have to buy it again via IAPs.
* IAPs don't work with Google Plays "family library" feature.
* IAPs add a dependency on Google Play Services to SD Maid, so to use IAPs you need GApps on your ROM.
* IAPs don't have a refund period.

Neutral concerns:
* IAPs are sometimes problematic when restoring apps on a device with multiple Google accounts, but so are paid apps.
* Some issues could be adressed by offering both IAPs and unlocker app (like Sync for Reddit). This may be confusing to users though.
* If I unpublish SD Maids Unlocker to reduce confusion for new users, some existing users may be confused because a simple search won't show the unlocker anymore in Google Play (you have to link it directly or go through "My apps").

Looking forward to hear everyones thoughts on this. No decision here is final and the poll is just for my curiosity.

Have a nice sunday everyone.
votes visible to Public
Switch to free app + in-app purchases
Keep free app + paid unlocker app

SD Maid v4.10.4 is moving out of beta to replace v4.9.5

There have been many changes, large and small, I'll give you a quick TL;DR here, but for all details check the changelog.

* The duplicates tool has been overhauled with a new UI and an automatic way of selecting which duplicates to keep. SD Maid will make the decision for you, but you can influence that decision by tweaking/rearranging criteria. Deletion is also "smarter" and will ensure that no "empty images" are left in galleries after deleting duplicates.

* Finally an adaptive icon, though the "effect" is subtle ;).

* Various small UI improvements, faster layout, improved dialogs and more.

* StorageAnalyzer should no longer choke and abort on missing items.

* I'm overhauling SD Maids internal UI framework to improve responsiveness and allow me to build complex interfaces more easily. QuickAccess, Exclusions and Duplicates have gotten that overhaul so far, other tools in future updates.

* Some internal default exclusions are now part of the normal exclusion manager and can thus be removed if so desired.

* Added a workaround for Nokia ROMs to fix permission setup. The new Android 7.0+ way doesn't work and SD Maid will show the manual selection on these Nokia ROMs as fallback.
Add a comment...

How is v4.10.4?

Are we ready to replace v4.9.5? :)

Post has attachment

Post has attachment
I made some good progress on the weekend so SD Maid v4.10.0 is here.

This update is dedicated to the duplicates tool and a beta-only release.

Let's start with the biggest change: The previous autoselection dialog is gone and SD Maid now performs an automatic selection based on a set of criterias you can adjust. So now you press the autoselection button and it just happens.

The previous dialog allowed you to select one and only one type of criterion to select files by. There isn't really a right and a wrong way to do that, but based on many mails I received there is certainly a popular preference. I've put these preferences as "defaults" into an extra screen (check the option menu) which you can adjust.

Currently we have the following defaults:

- Priority 1: Media Provider, try to keep files that are indexed by the Media Storage app and try to delete those that are not indexed. The most common type of support mail I get is people complaining that SD Maid deleted their images, because they only look in the gallery app, they think SD Maid deleted them all, but the remaining copy is just in a space that is not indexed.

- Priority 2: Storage location, assuming the user has an extra sdcard, try to keep the files on the sdcard and delete the files in internal storage. The assumption is that the user always wants to free space on internal storage.

- Priority 3: Path nesting, we prefer to keep shallowly nested files as those are easier to find and access.

- Priority 4: Modification date, we prefer older files because we assume that the newer file is an unwanted copy. E.g. older picture comes from the camera app, while the newer picture is a copy from an instant messenger app.

I'm looking for feedback whether you think this is the optimal default setup.

You can also find these details in the wiki:

The second new feature is "pruning media storage references". It's a not too rare occurence that apps show empty/grey thumbnails for image files that have been deleted, because the media storage database still contains a reference. SD Maid will now check the database for references to images deleted by the duplicates tool and then delete those references.

There have also been various changes to the user interface. I'm slowly changing some of SD Maids core UI architecture to allow for a more responsive UI interaction. The duplicates tool is just the first tool getting this treatment. The UI should lag less on low end devices and it should also no longer freeze when running selection on thousands of files. Play a bit around with the autoselection, using single click/long click on items and let me know how it goes.

I've also added a box that shows the task result prominently. Task results were previously rather hidden away (navdrawer, startpage, notifications) and you couldn't easily view them in the actual tool they belong too, which is a bit backwards, isn't it? I plan to add this "task result box" to other tools too. With more space to display infos we can then also make the result messages a bit more detailed.

Some texts such as the selection criterion explanations are not translatable yet as I'm looking for your feedback on the wording. Is it clear what each option? Please let me know.

Oh and the duplicates settings have been moved into their own file and gotten a "reset to default" option, once the other tools get this we can finally have a nice and clean backup option for settings :).

SD Maid v4.9.4 is currently in rollout and will replace v4.8.7.

Updating from v4.8.7 will get you:
* Faster scanning and deletion
* Improved hidden cache detection
* Easier permission setup
* A healthy amount of bugfixes (especially for Android 8.0+).
Add a comment...

Post has attachment
v4.9.1 is now available. This is a beta only version.

SD Maid switched from using `ctime` (metadata change) to `mtime` (content change) as we are mostly interested in file content, not metadata, especially with metadata change times sometimes being unreliable depending on the storage location.

This is now the first official version of SD Maid using RxShell (, an open-source library I wrote for using shells on Android. See for some more details on the how/why. I'll also be releasing another open-source library as extension to this that adds a few tools specific to root related tasks.

I've also written an open-source library to help use MVP principles in apps ( which I've also started integrating into SD Maid. SD Maid already uses MVP principles, but does not yet sepperate all concerns nicely (huge codebase, grew organically). I'm rewriting code pieces gradually. In the end this benefits us by allowing for easier fixes/enhancements and better unit test coverage to keep us error free.

This probably doesn't concern most of you beta testers, but secondary storage permission setup is now much easier on Android 7.0, no more manually selecting the sdcard path, just a yes/no popup. Android added a nice API for this since Android 7.0.

Android 8.0 related issues such as not being able to install APKs or shortcuts for Activities are fixed now too.

Thanks to nice user reports the AppCleaner can now also go a bit more aggressively after facebook related hidden caches.

Check the full changelog on GitHub for all the details.

Huge shoutout to everyone who created tickets on Github, check out:

I'm very happy about the increasing participation there as it makes my tasks so much easier.

v4.8.7 is now in rollout with updates to the clutter database.

Thanks for all reports!
Add a comment...
Wait while more posts are being loaded