Diagnose Android Device Overheating via ADB
A skill for diagnosing Android device overheating via ADB - read-only baseline capture, controlled comparisons, and safety gating.
Why it matters
Identify the root cause of Android device overheating by systematically collecting thermal, battery, CPU, radio, and sensor telemetry through ADB, correlating evidence across controlled comparisons, and proposing minimal reversible interventions only after user approval.
Outcomes
What it gets done
Capture baseline device state including thermal service, battery stats, CPU activity, and system properties without modifying settings
Correlate thermal changes with specific subsystems like mobile radio signal strength, charging state, app CPU load, or sensor activity
Run controlled comparisons between conditions such as airplane mode versus cellular, charging versus unplugged, or Wi-Fi versus mobile data
Gate every intervention by presenting evidence and rollback commands before changing connectivity, stopping apps, or modifying device settings
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-diagnose-android-overheating | bash Overview
Diagnose Android Overheating
A skill for diagnosing Android device overheating via read-only ADB evidence - baseline capture, symptom-matched evidence branches, controlled comparisons, and confidence-rated findings before any intervention. Use it for physical Android devices showing heat, throttling, or abnormal drain - stop immediately for battery swelling, smoke, or chemical odor and seek repair support instead of continuing diagnosis.
What it does
This skill finds the most likely source of Android device heat by correlating thermal state, battery conditions, CPU activity, wakeups, radios, sensors, charging, and the user's own timeline of when the heat occurs - keeping diagnosis read-only by default and proposing only the smallest reversible intervention after explicit approval. It applies to a phone or tablet that's hot, warm while idle, thermally throttled, shutting down from heat, or draining unusually fast, whether during charging, weak signal, 5G, navigation, camera use, gaming, or background activity, and whether the goal is finding an offending app or checking whether a prior debloat/optimization attempt left settings that changed power or thermal behavior.
A hard safety stop comes before any software diagnosis: battery swelling, smoke, hissing, leaking, a sharp chemical odor, repeated thermal shutdowns, or heat too severe to handle safely all mean stopping immediately, disconnecting power if safe, powering the device off, keeping it away from flammable material, and getting manufacturer or qualified repair support - never suggesting a refrigerator or freezer, puncturing the device, continuing to charge it, or running a stress test.
Before collecting any data, the diagnostic contract confirms device ownership/authorization, defines what "hot" actually means (location, activity, charging state, network type, onset, whether it happens at idle too), records device model/OS version/recent changes/charger/ambient conditions, and notes that an attached USB cable itself charges and warms the device - preferring wireless ADB or short capture windows, and always selecting the correct device serial when more than one is attached rather than assuming the first listed. The workflow runs six steps: capture an untouched baseline first, before resetting Batterystats, force-stopping apps, or changing any settings, using read-only commands like:
adb devices -l
adb -s <serial> shell getprop ro.product.manufacturer
adb -s <serial> shell getprop ro.product.model
adb -s <serial> shell getprop ro.build.version.release
adb -s <serial> shell getprop ro.build.version.sdk
adb -s <serial> shell uptime
adb -s <serial> shell dumpsys battery
adb -s <serial> shell dumpsys thermalservice
adb -s <serial> shell dumpsys cpuinfo
adb -s <serial> shell top -n 1
Then choosing an evidence branch matched to the specific symptom (idle heat pulls battery history/alarms/jobs/sensors/radios; charging heat pulls battery/USB state plus an unplugged comparison; single-app heat pulls that process's CPU/jobs/wakelocks/network) rather than collecting a full bugreport, which can carry sensitive account and network data. A controlled comparison defines one pass/fail test before changing anything - airplane mode versus weak signal, Wi-Fi versus mobile data, charging versus unplugged - holding workload, brightness, and starting battery level as constant as practical. Attribution requires at least two independent signals (thermal severity plus sustained CPU, or heat-while-idle plus a persistent wakelock/alarm/job), since a hot battery alone, a single high-CPU snapshot, or a wakelock's mere existence without duration and timeline correlation doesn't prove a cause. The finding gets classified into one primary class (app/process load, modem/radio loop, connectivity, screen/camera/media, GPS/location, charging equipment, OS/OEM residue, hardware fault, normal workload heat, or insufficient evidence) with an explicit confidence level - confirmed, strongly supported, possible, or unknown - reserving "confirmed" for a real controlled comparison or direct timeline evidence.
Every intervention is gated by its own risk tier: read-only inspection can proceed within authorized scope; interruptive actions (stopping an app, changing connectivity) need the user's awareness and must never disrupt calls, authentication, navigation, alarms, or accessibility services; and persistent changes (settings, network mode, AppOps, debloating) need explicit approval, the exact pre-change value, a rollback command, and post-change verification. Disabling thermal protection, spoofing thermal status, editing thermal thresholds, or resetting the device are explicitly never acceptable as a generic fix, and one variable gets changed at a time with the old value restored afterward unless the user chooses to keep a verified change. Findings are reported in a fixed structure covering symptom, safety status, evidence, comparison, most likely cause, confidence, contributors, proposed next step, approval needed, rollback, and remaining uncertainty.
When to use - and when NOT to
Use it for physical Android phones and tablets showing heat, throttling, or abnormal drain - not for profiling an app's energy use during development, which needs a dedicated app-performance skill instead. Escalate to hardware support when persistent unexplained idle heat or abnormal charging heat shows weak software evidence, rather than continuing to test.
Inputs and outputs
Input is ADB access to the authorized device and the user's description of when and where the heat occurs. Output is a structured diagnostic report naming the most likely cause, its confidence level, contributing factors, and a proposed minimal reversible next test, with every mutation logged against its original value for rollback.
Integrations
It operates entirely through ADB shell commands (dumpsys battery, dumpsys thermalservice, dumpsys cpuinfo) and hands off to @android-cli for general device interaction, @android-dev when the root cause is in app source code, or @mobile-developer for broader app development questions.
Who it's for
Anyone diagnosing unexplained Android device heat or battery drain on their own authorized device who needs a read-only-first, evidence-correlated process rather than guessing from a single CPU snapshot or a generic "optimization" fix.
Source README
Diagnose Android Overheating
Overview
Find the most likely source of Android device heat by correlating thermal state, battery conditions, CPU activity, wakeups, radios, sensors, charging, and the user's timeline. Keep diagnosis read-only by default, distinguish evidence from inference, and propose only the smallest reversible intervention after the user approves it.
When to Use This Skill
- Use when an Android phone is hot, warm while idle, thermally throttled, shutting down from heat, or draining its battery unusually fast.
- Use when heat appears during charging, weak cellular signal, 5G use, navigation, camera use, gaming, media playback, tethering, or background activity.
- Use when the user wants to identify an offending app, service, wakelock, sensor, modem condition, or charging condition through ADB.
- Use when a previous Android optimization or debloat attempt may have left settings that changed power or thermal behavior.
- Use for physical phones and tablets. For profiling the energy use of an app under development, use an app-performance skill instead.
Safety Stop
Stop software diagnosis when the device shows battery swelling, smoke, hissing, leaking, a sharp chemical odor, repeated thermal shutdowns, or heat severe enough that it cannot be handled safely. Tell the user to disconnect power if this can be done safely, power the device off, keep it away from flammable material, and seek manufacturer or qualified repair support. Do not suggest cooling the device in a refrigerator or freezer, puncturing it, continuing to charge it, or running stress tests.
Diagnostic Contract
Before collecting data:
- Confirm the user owns or is authorized to inspect the device.
- Ask what “hot” means: location on the handset, activity, charging state, network type, onset, duration, and whether the heat also occurs while idle.
- Record the device model, Android version, recent OS/app changes, charger and cable, ambient conditions, and visible thermal warnings.
- Explain that an attached USB cable can charge and warm the device. Use wireless ADB or short capture windows when possible, and compare with the cable disconnected.
- Select a specific device serial when more than one ADB target is present. Never assume the first listed device is the intended phone.
Workflow
1. Capture an Untouched Baseline
Do not reset Batterystats, force-stop apps, clear caches, change network modes, alter AppOps, enable battery saver, or change developer settings before preserving the initial state.
Start with read-only commands:
adb devices -l
adb -s <serial> shell getprop ro.product.manufacturer
adb -s <serial> shell getprop ro.product.model
adb -s <serial> shell getprop ro.build.version.release
adb -s <serial> shell getprop ro.build.version.sdk
adb -s <serial> shell uptime
adb -s <serial> shell dumpsys battery
adb -s <serial> shell dumpsys thermalservice
adb -s <serial> shell dumpsys cpuinfo
adb -s <serial> shell top -n 1
If a service or option is unavailable, record that limitation. Do not turn missing output into a healthy verdict. Android and OEM builds expose different services, fields, permissions, and top syntax.
2. Choose the Evidence Branch
Read evidence-and-interpretation.md, then collect only the branches that match the symptom:
- heat while idle: battery history, power state, alarms, jobs, sensors, location, and radios;
- heat while charging: battery/USB state and a controlled unplugged comparison;
- heat under one app: process CPU, package memory, jobs, wakelocks, network, camera, and location;
- heat in weak signal or mobile data: telephony, connectivity, signal changes, and mobile-radio activity;
- heat during camera, navigation, gaming, or playback: CPU/GPU-adjacent state, display, camera/media, sensors, location, and network activity;
- heat after a setting change: capture current values and compare them with the known previous state before proposing rollback.
Do not collect a full bugreport unless narrow evidence is insufficient. Bugreports can contain account identifiers, app activity, network details, notifications, and other sensitive data.
3. Reproduce with a Controlled Comparison
Define one pass/fail comparison before changing anything. Examples:
- idle with airplane mode versus idle on weak cellular signal;
- same workload on Wi-Fi versus mobile data;
- charging versus unplugged after the battery level is stable;
- suspect app active versus closed by the user;
- screen on at fixed brightness versus screen off;
- before versus after the recent OS or app update, when a real reference exists.
Keep workload, duration, brightness, case, charger, ambient conditions, and starting battery level as constant as practical. Timestamp each observation. Avoid benchmarks or synthetic load unless the user explicitly asks and the device is not already thermally stressed.
4. Correlate, Do Not Guess
Require at least two independent signals before attributing the heat:
- thermal severity or rising battery temperature plus sustained process CPU;
- thermal change plus mobile-radio activity and poor signal;
- heat while idle plus persistent partial wakelock, alarm, job, sensor, or location activity;
- heat during charging plus charging state/current evidence and a cooler unplugged comparison;
- thermal throttling plus a workload-specific subsystem such as camera, GPU-heavy rendering, navigation, tethering, or media processing.
A hot battery does not identify the cause. A high CPU snapshot does not prove sustained load. A wakelock name does not prove meaningful energy use without duration and timeline correlation. Batterystats estimates are device-dependent and may be absent or incomplete.
5. Classify the Finding
Use one primary class and list plausible contributors separately:
- app or process CPU load;
- modem/radio and weak-signal loop;
- Wi-Fi, Bluetooth, tethering, or continuous transfer;
- screen, camera, video, GPU, or media processing;
- GPS, sensors, navigation, or location polling;
- charging equipment, charging mode, or simultaneous charge-and-load;
- OS/OEM service, post-update optimization, or configuration residue;
- battery aging or hardware fault;
- normal workload heat within the device's reported thermal state;
- insufficient evidence.
State confidence as confirmed, strongly supported, possible, or unknown. Reserve confirmed for a controlled comparison or direct timeline evidence that changes with the suspected cause.
6. Gate Every Intervention
Present the evidence and proposed experiment before changing the device.
- Read-only inspection may proceed within the user's authorized device scope.
- Interruptive actions, such as stopping an app or temporarily changing connectivity, require the user's awareness and must not disrupt calls, authentication, navigation, alarms, or accessibility services.
- Persistent settings, network-mode changes, AppOps, package disabling, debloating, or developer-option changes require explicit approval, an exact pre-change value, a rollback command, and post-change verification.
- Never disable thermal protection, spoof a thermal status, edit thermal thresholds, clear app data, reset the device, or remove packages as a generic overheating fix.
- Do not treat animation scale, background-process limits, forced GPU rendering, cache trimming, or forced Doze as root-cause fixes.
Change one variable at a time. After the test, restore the old value unless the user explicitly chooses to keep the verified change.
Output Format
Symptom and context:
Safety status:
Evidence collected:
Controlled comparison:
Most likely cause:
Confidence:
Contributors or alternatives:
Proposed next test or smallest fix:
Approval required:
Rollback:
Remaining uncertainty:
Examples
Idle Heat on Mobile Data
Correlate thermal and battery trends with signal state, mobile-radio activity, process CPU, and wakeups. A weak signal alone is not enough; show that the heat or radio activity falls during a comparable Wi-Fi or airplane-mode window before calling the modem loop the cause.
Heat After Installing an App
Compare the package's sustained CPU, jobs, alarms, network, location, and wakelock time with the symptom window. Do not force-stop or restrict it until the baseline is saved and the user approves an interruption.
Heat While Charging
Record charger/cable context, battery state, temperature trend, plugged source, and simultaneous workload. Compare against a safe unplugged window. Do not infer battery failure from temperature alone.
Best Practices
- Preserve raw output before filtering it; OEM labels and field layouts vary.
- Prefer trends and before/after windows over single snapshots.
- Separate surface warmth, battery temperature, and framework thermal severity.
- Keep a record of every mutation and its original value.
- Redact serials, phone numbers, SSIDs, account identifiers, notifications, and personal app activity before sharing logs.
- Escalate persistent unexplained idle heat or abnormal charging heat to hardware support when software evidence is weak.
Limitations
- ADB cannot prove battery internal resistance, physical damage, charger quality, or exact internal component temperature on every device.
- Thermal sensor values and thresholds are OEM-specific; some devices hide sensors or report status incompletely.
- Battery attribution is historical and model-dependent, not a laboratory power measurement.
- USB-connected observation can alter charging, radio, and thermal behavior.
- Root-only files and vendor services may be unavailable; do not bypass device security to obtain them.
Security & Safety Notes
- Operate only on a device the user owns or is authorized to inspect.
- Treat bugreports and raw system dumps as sensitive local artifacts.
- Never upload logs, install diagnostic APKs, enable network ADB, or expose the ADB daemon without explicit informed approval.
- Keep the workflow read-only until evidence supports a narrow experiment and the user approves it.
Common Pitfalls
- Filtering
thermalservicedown to one word: Preserve the complete output; status, sensor type, throttling severity, and vendor omissions all matter. - Calling the top CPU process the cause from one sample: Sample across the heat window and correlate with thermal change.
- Resetting Batterystats immediately: Save the pre-existing history first; reset only for an explicitly approved controlled capture.
- Applying several “optimizations” together: Test one reversible hypothesis at a time and verify the symptom, not just the setting.
- Treating missing OEM data as evidence of no problem: Report the blind spot and use an independent comparison or escalate.
Related Skills
@android-cli- Use for Android SDK, emulator, deployment, screenshots, and general device interaction.@android-dev- Use when the root cause is in Android application source code and the user wants an implementation fix.@mobile-developer- Use for broader mobile application development rather than handset-level diagnosis.
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.