Package
com.sec.android.app.hwmoduletest
HwModuleTest
Guidance
Labelled "HwModuleTest" on Galaxy devices, this is a Samsung-signed system package with no launcher entry: this site records it as not user-facing on every observation, and the signing key it shares with the rest of the Samsung system estate also signs the framework. It belongs to Samsung's factory and hardware test tooling. The clearest sourceable evidence for that is what it declares: android.permission.HARDWARE_TEST, which the Android platform manifest defines as allowing access to hardware peripherals and describes as intended only for hardware testing, at signature protection level and not for third-party use. Alongside it sit permissions that match a per-component test harness, including MANAGE_FINGERPRINT, HIGH_SAMPLING_RATE_SENSORS, MODIFY_AUDIO_SETTINGS, BLUETOOTH_ADMIN, DEVICE_POWER and VIBRATE. It also holds keystring permissions belonging to com.sec.android.app.lcdtest, com.sec.factory and com.sec.testingsettings. A keystring is one of the star-and-hash sequences typed into the dialler to reach a hidden engineering screen, and those declarations are consistent with the keystring family covered by this site's notes on DRParser Mode and Service mode. They establish what this package declares, not that it is itself reachable from the dialler: no source examined here demonstrates a runtime route. Samsung publishes no functional documentation for this package, so which individual test screens it presents is not sourceable here, and descriptions circulating on APK catalogues are not a basis for a claim. Version note. Samsung's own Common Criteria application lists record it at version 9 on Android 9-era Galaxy S10+ firmware and 11 on Android 11-era Galaxy S20 FE and S20 Ultra firmware, matching the Android major version in each case. This site records later builds from "12" through to "2.0.13.0", so dotted version names appear in the later builds observed here rather than the Android major number used earlier; which Android release introduced that change, and why, could not be sourced. Nothing sourced suggests the package has been superseded or modularised: it is observed here from API 28 through API 37. For Android Enterprise, EMM and kiosk use, it is worth separating visibility from exposure. Being non-user-facing it will not appear in a launcher, so administrators normally meet it in an EMM app inventory rather than on a device. Where a build does make engineering screens reachable from the dialler, that is the exposure that matters on a locked-down device, and the practical control is the allowlist: keep the dialler and other system apps out of a kiosk allowlist unless they are needed, then test the finished build by actively trying to escape it. In the Android Management API the documented lever is an application policy with installType BLOCKED, which the reference defines as the app being blocked and unable to install, and uninstalled if it was installed under a previous policy; the reference does not state what that does to a package preinstalled in the system image, so confirm the outcome on the device model in question. Samsung documents neither what depends on this package nor what service and repair workflows need it, so disabling is rated caution rather than treated as a routine debloat target.
- core/res/AndroidManifest.xml (android.permission.HARDWARE_TEST) - Android platform source →
- Galaxy S10+ LTE (G975F) application list - Samsung Knox CC Mode documentation →
- Galaxy S20 FE 5G (G781B) application list - Samsung Knox CC Mode documentation →
- Galaxy S20 Ultra 5G (G988W) application list - Samsung Knox CC Mode documentation →
- Policies resource (ApplicationPolicy installType) - Android Management API →
- How do I prevent users from escaping kiosk (lock task) mode? - Jason Bayton →
- Package provenance for com.sec.android.app.hwmoduletest - Android System App Database →
Package intelligence
Observed signing, permission, version and size signals from contributing devices - descriptive of that sample, not a verdict. These come from the v2 Package Search sync, which not every device has contributed to yet, so for some packages this detail is partial or not present at all.
- Signed by the device maker's own signing key (Samsung), so it is an OEM preinstall, but 2 different certificates appear across the fleet, so OEMs ship their own builds of it. It also signs the Android framework, so it is a platform-level key on its device(s). Inferred from the certificate appearing only on Samsung devices (508 packages, 10196 observations).
- Its largest observed manifest declares 26 permissions: 9 signature or system-level, 8 install-time and 9 vendor or uncatalogued.
- APK size ranges from 1.5 MB to 5.1 MB across the reporting device profiles, so the build differs substantially between them.
- Never reported as user-facing, so it runs as a background or system component rather than an app the user opens.
Declared permissions (26)
Largest permission set observed for this package. Text is Android's own published description where one exists; platform permissions Android does not document show their granted protection level (in grey) instead; vendor or unknown constants show the name only.
| Permission | Description |
|---|---|
ACCESS_CHECKIN_PROPERTIES |
Signature or privileged system permission. |
BLUETOOTH |
Allows the app to view the configuration of the Bluetooth on the phone, and to make and accept connections with paired devices. |
BLUETOOTH_ADMIN |
Allows the app to configure the local Bluetooth phone, and to discover and pair with remote devices. |
CHANGE_CONFIGURATION |
Signature or privileged system permission. |
DEVICE_POWER |
Signature-level system permission, for platform-signed apps. |
HARDWARE_TEST |
Signature-level system permission, for platform-signed apps. |
HIGH_SAMPLING_RATE_SENSORS |
Allows the app to sample sensor data at a rate greater than 200 Hz |
MANAGE_FINGERPRINT |
Signature or privileged system permission. |
MODIFY_AUDIO_SETTINGS |
Allows the app to modify global audio settings such as volume and which speaker is used for output. |
MODIFY_PHONE_STATE |
Signature or privileged system permission. |
MOUNT_UNMOUNT_FILESYSTEMS |
Signature or privileged system permission. |
RECEIVE_BOOT_COMPLETED |
Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the phone and allow the app to slow down the overall phone by always running. |
REORDER_TASKS |
Allows the app to move tasks to the foreground and background. The app may do this without your input. |
VIBRATE |
Allows the app to control the vibrator. |
WAKE_LOCK |
Allows the app to prevent the phone from going to sleep. |
WRITE_MEDIA_STORAGE |
Signature or privileged system permission. |
WRITE_OWNER_DATA |
- |
WRITE_SETTINGS |
Allows the app to modify the system's settings data. Malicious apps may corrupt your system's configuration. |
sec.BARCODE_READ |
- |
com.samsung.android.permission.ACCESS_SYSTEM_KEY_DISPATCHING |
- |
com.samsung.android.permission.FINGERPRINT_PRIVILEGED |
- |
com.samsung.difactorycamera.permission.ACCESS |
- |
com.sec.android.app.hwmoduletest.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION |
- |
com.sec.android.app.lcdtest.permission.KEYSTRING |
- |
com.sec.factory.permission.KEYSTRING |
- |
com.sec.testingsettings.permission.KEYSTRING |
- |
Manage on devices
ADB commands for this package (the inverse of each is included so you can undo). Run from an authorised shell or wire the equivalent into your DPC. Verify on a test device first - this database doesn’t yet classify which packages are safe to change. --user 0 targets the current user; drop it (and use a privileged shell) to act device-wide.
/system, so Restore re-adds it (-k keeps app data)Seen on
Each record is a device profile (make + model + Android version). Each unique handset that syncs against a matching profile will increase the observations of a package, thereby increasing confidence that a package is expected to be on a device.
| OEM | Model | Android | Provenance | Observations | Last seen |
|---|---|---|---|---|---|
| Samsung | SM-A125F | Android 12 | OEM Samsung | 1 | 21 Jan 2026 |
| Samsung | SM-A135F | Android 14 | OEM Samsung | 3 | 21 Jan 2026 |
| Samsung | SM-A137F | Android 14 | - | 1 | 17 Jan 2026 |
| Samsung | SM-A236B | Android 14 | OEM Samsung | 2 | 10 Apr 2026 |
| Samsung | SM-A266B | Android 15 | - | 2 | 21 Aug 2025 |
| Samsung | SM-A266B | Android 16 | - | 1 | 26 Jan 2026 |
| Samsung | SM-A346B | Android 15 | OEM Samsung | 1 | 27 Jul 2026 |
| Samsung | SM-A515F | Android 13 | - | 1 | 30 Jun 2025 |
| Samsung | SM-A528B | Android 13 | - | 1 | 19 Jun 2025 |
| Samsung | SM-A536B | Android 15 | - | 1 | 19 Jun 2025 |
| Samsung | SM-A536B | Android 16 | OEM Samsung | 1 | 29 Jul 2026 |
| Samsung | SM-A556B | Android 15 | - | 1 | 1 Jul 2025 |
| Samsung | SM-A566B | Android 16 | OEM Samsung | 3 | 12 Sep 2026 |
| Samsung | SM-F721B | Android 15 | - | 1 | 9 Jul 2025 |
| Samsung | SM-F766B | Android 16 | - | 1 | 11 Nov 2025 |
| Samsung | SM-F971B | Android 17 | OEM Samsung | 1 | 18 Sep 2026 |
| Samsung | SM-G766B | Android 15 | - | 1 | 17 Oct 2025 |
| Samsung | SM-G766B | Android 16 | OEM Samsung | 1 | 5 Sep 2026 |
| Samsung | SM-G780F | Android 13 | OEM Samsung | 1 | 29 Dec 2025 |
| Samsung | SM-G973U | Android 12 | OEM Samsung | 2 | 10 Jun 2026 |
| Samsung | SM-G991B | Android 15 | OEM Samsung | 1 | 19 Apr 2026 |
| Samsung | SM-M315F | Android 12 | - | 1 | 2 Feb 2026 |
| Samsung | SM-N950U1 | Android 9.0 | - | 1 | 20 Aug 2025 |
| Samsung | SM-N986B | Android 13 | - | 9 | 17 Jul 2025 |
| Samsung | SM-S721U | Android 15 | - | 5 | 5 Aug 2025 |
| Samsung | SM-S731B | Android 16 | OEM Samsung | 1 | 11 Aug 2026 |
| Samsung | SM-S906B | Android 15 | - | 1 | 2 Jun 2025 |
| Samsung | SM-S908U | Android 16 | OEM Samsung | 2 | 17 Sep 2026 |
| Samsung | SM-S921B | Android 15 | OEM Samsung | 2 | 22 Jul 2025 |
| Samsung | SM-S921B | Android 16 | OEM Samsung | 1 | 17 Sep 2026 |
| Samsung | SM-S921U | Android 15 | - | 1 | 19 Jun 2025 |
| Samsung | SM-S926B | Android 16 | OEM Samsung | 1 | 14 Apr 2026 |
| Samsung | SM-S928B | Android 16 | OEM Samsung | 2 | 12 Jun 2026 |
| Samsung | SM-S928U1 | Android 15 | - | 1 | 12 Sep 2025 |
| Samsung | SM-S931B | Android 15 | - | 1 | 20 Sep 2025 |
| Samsung | SM-S931B | Android 16 | - | 1 | 23 Nov 2025 |
| Samsung | SM-S936B | Android 16 | - | 1 | 18 Dec 2025 |
| Samsung | SM-S937B | Android 15 | - | 1 | 25 Aug 2025 |
| Samsung | SM-S938B | Android 15 | - | 2 | 25 Aug 2025 |
| Samsung | SM-S942B | Android 17 | OEM Samsung | 1 | 25 May 2026 |
| Samsung | SM-S948U | Android 16 | - | 1 | 9 Sep 2026 |
| Samsung | SM-T636B | Android 15 | - | 2 | 12 Oct 2025 |
| Samsung | SM-T976B | Android 13 | - | 1 | 21 Jul 2025 |
| Samsung | SM-X716B | Android 15 | - | 1 | 27 Jun 2025 |
| Samsung | SM-X910 | Android 14 | - | 1 | 26 Jun 2025 |
| Samsung | SM-X910 | Android 15 | - | 1 | 12 Sep 2025 |
Known labels
Locale-aware display names seen in the wild.
| Label | Locale | Seen |
|---|---|---|
| HwModuleTest | en-gb | 26 |
| HwModuleTest | en | 20 |
| HwModuleTest | en-us | 19 |
| HwModuleTest | it-IT | 5 |
| HwModuleTest | nl-nl | 5 |
| HwModuleTest | de-de | 3 |
| HwModuleTest | en-nl | 3 |
| HwModuleTest | 2 | |
| HwModuleTest | en-GB | 2 |
| HwModuleTest | es-ES | 2 |
| HwModuleTest | es-es | 2 |
| HwModuleTest | es-us | 2 |
| HwModuleTest | fr-fr | 2 |
| HwModuleTest | it-it | 2 |
| HwModuleTest | fr-dz | 1 |
| HwModuleTest | pl-pl | 1 |
| HwModuleTest | en-au | 1 |
| HwModuleTest | ru-ru | 1 |
| HwModuleTest | es-US | 1 |
| HwModuleTest | en-US | 1 |
| HwModuleTest | pl-PL | 1 |
| HwModuleTest | fr-FR | 1 |