- SMS Cleaner is a tool for reading and batch deleting SMS messages on Android, built with Flutter framework.
- Although the UI framework Flutter supports cross-platform development, only Android SMS deletion functionality has been implemented.
- Get SMS permissions
- Copy SMS to clipboard
- Set/restore default SMS app
- Filter SMS messages by keywords
- Search SMS by phone number
- Remove/directly delete SMS from search results
- One-click batch deletion of queried SMS messages
- One-click export of all SMS messages to CSV file
- Flutter 3.47.2 (stable)
- Dart 3.13.2
- Gradle 9.3.1
- Android Gradle Plugin 9.1.0
- Kotlin 2.4.10
- compileSdk 37 / minSdk 26
- JDK 17
Build the release APK with fastforge:
dart pub global activate fastforge
fastforge release --name apkArtifacts are output to dist/. The APK is signed with the release keystore and packages arm64-v8a only (single ABI).
| Workflow | Trigger | Flutter Channel | Contents |
|---|---|---|---|
build.yml |
push main (version tags excluded) / opened PR | stable | dart analyze + flutter test + build APK + upload artifact |
manual.yml |
manual trigger | beta / master / stable selectable (default stable) | dart analyze + flutter test + build APK + upload artifact |
publish.yml |
version tag (e.g. 1.6.1+250725) |
stable | build APK + create draft Release |
permission_handlerupgraded to13.0.2: v13 requires compileSdk 37, soandroid/app/build.gradle.ktspinscompileSdk = 37(above Flutter 3.47 template 36) with AGP 9.1.0 + Android SDK Platform 37. Permission code follows the v13 request-driven pattern (never derivepermanentlyDeniedfromstatus).- Old plugins (e.g.
sms_advanced 1.1.0, from the AGP 4.1 era) lack anamespaceand hardcodecompileSdk 31. The rootandroid/build.gradle.ktsauto-fills the namespace fromproject.groupand raises the compileSdk of legacy library modules to 37. - Lint tasks are disabled in
android/build.gradle.kts(see the Call project note): legacy plugin buildscripts pin old AGP versions and crash the lint worker (AndroidLintWorkAction) when mixed with root AGP 9.1.0;extract*Annotationstasks are replaced with placeholder outputs. kotlin.incremental=falseis set inandroid/gradle.properties: on Windows, Kotlin incremental compilation cannot handle sources (pub cache on the C: drive) and build output (project on the D: drive) on different drives.sms_advancedapplies the Kotlin Gradle Plugin itself; future Flutter versions will reject this, so keep an eye out for an alternative.- Code quality is guaranteed by
dart analyze+flutter testin CI. - Run tests locally with
flutter test(platform channels are mocked, no device needed).
Sms
├─android # Android project configuration
├─assets # Assets
├─lib # Flutter source code
│ └─main.dart # App entry
├─.github/workflows # CI workflows
└─dist # Build output

