🔎Preview
MagnaX - Real-time collection tool for Android/iOS performance data.
Quickly locate and analyze performance issues to improve application performance and quality. No need for ROOT/jailbreak, plug and play.
📦Requirements
- Install Python 3.10 + (supports up to Python 3.14) Download
- Install adb and configure environment variables (MagnaX's adb may not necessarily fit your computer) Download
💡 If Windows users need to test iOS, install and start iTunes. Documentation
💡 For iOS 17+ devices, you need to start the pymobiledevice3 tunnel service first:
# macOS/Linux (requires sudo)
sudo python3 -m pymobiledevice3 remote start-tunnel
# Or run as a background daemon
sudo python3 -m pymobiledevice3 remote tunneld
📥Installation
default
pip install -U magnax (pip install magnax==version)
mirrors
pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple -U magnax
💡 If your network is unable to download through [pip install -U magnax], please try using mirrors to download, but the download of MagnaX may not be the latest version.
🚀Quickstart
default
python -m magnax
customize
python -m magnax --host=ip --port=port
🏴Python API
# magnax version : >= 1.0.0
from magnax.public.apm import AppPerformanceMonitor
from magnax.public.common import Devices
d = Devices()
processList = d.getPid(deviceId='ca6bd5a5', pkgName='com.bilibili.app.in') # for android
print(processList) # ['{pid}:{packagename}',...]
apm = AppPerformanceMonitor(pkgName='com.bilibili.app.in',platform='Android', deviceId='ca6bd5a5', surfaceview=True,
noLog=False, pid=None, record=False, collect_all=False, duration=0)
# apm = AppPerformanceMonitor(pkgName='com.bilibili.app.in', platform='iOS') only supports one device
# surfaceview: False = gfxinfo (Developer - GPU rendering mode - adb shell dumpsys gfxinfo)
# noLog : False (Save test data to log file)
# ************* Collect a performance parameter ************* #
cpu = apm.collectCpu() # %
memory = apm.collectMemory() # MB
memory_detail = apm.collectMemoryDetail() # MB
network = apm.collectNetwork(wifi=True) # KB
fps = apm.collectFps() # HZ
battery = apm.collectBattery() # level:% temperature:°C current:mA voltage:mV power:w
gpu = apm.collectGpu() # %
disk = apm.collectDisk()
thermal = apm.collectThermal()
# ************* Collect all performance parameter ************* #
if __name__ == '__main__':
apm = AppPerformanceMonitor(pkgName='com.bilibili.app.in',platform='Android', deviceId='ca6bd5a5', surfaceview=True,
noLog=False, pid=None, record=False, collect_all=True, duration=0)
# apm = AppPerformanceMonitor(pkgName='com.bilibili.app.in', platform='iOS', deviceId='xxxx', noLog=False, record=False, collect_all=True, duration=0)
#duration: running time (second)
#record: record android screen
apm.collectAll(report_path=None) # report_path='/test/report.html'
# in other python file
from magnax.public.apm import initPerformanceService
initPerformanceService.stop() # stop magnax
🏴Service API
Start the service in the background
# magnax version >= 1.0.0
macOS/Linux: nohup python3 -m magnax &
Windows: start /min python3 -m magnax &
Request performance data from api
Android: http://{ip}:{port}/apm/collect?platform=Android&deviceid=ca6bd5a5&pkgname=com.bilibili.app.in&target=cpu
iOS: http://{ip}:{port}/apm/collect?platform=iOS&pkgname=com.bilibili.app.in&target=cpu
target in ['cpu','memory','memory_detail','network','fps','battery','gpu']
🔥Features
-
No ROOT/Jailbreak: No need of Root for Android devices, Jailbreak for iOS devices. Efficiently solving the test and analysis challenges in Android & iOS performance.
-
Data Integrality: We provide the data about CPU, GPU, Memory, Battery, Network,FPS, Jank, etc., which you may easy to get.
-
Beautiful Report: A beautiful and detailed report analysis, where to store, visualize, edit, manage, and download all the test cases collected with MagnaX no matter where you are or when is it.
-
Useful Monitoring Settings: Support setting alarm values, collecting duration, and accessing mobile devices on other PC machines during the monitoring process.
-
PK Model: Supports simultaneous comparative testing of two mobile devices.
- 🌱2-devices: test the same app on two different phones.
- 🌱2-apps: test two different apps on two phones with the same configuration.
-
Collect In Python/API: Support Python and API to collect performance data, helping users easily integrate into automated testing processes.
Develop
Dependencies
| Package | Purpose |
|---|---|
| flask >= 3.1.0 | Web framework |
| loguru | Logging |
| openpyxl >= 3.1.0 | Excel report export (.xlsx) |
| pymobiledevice3 >= 2.0.0 | iOS device control |
| py-ios-device >= 2.0.0 | iOS performance data collection |
| fire | CLI argument parsing |
| psutil | System process utilities |
| opencv-python | Screen recording |
Debug
- Remove
magnax.prefix in import paths
# example
from magnax.view.apis import api
# change to
from view.apis import api
- Run debug server
cd magnax
python debug.py
Browser
Terminal
- windows: PowerShell
- macOS:iTerm2 (https://iterm2.com/)
💕Thanks
Metadata
Release files for magnax 1.5.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| magnax-1.5.2.tar.gz | 21.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| magnax-1.5.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.4 MB
Release files / magnax-1.5.2.tar.gz
| Download URL | magnax-1.5.2.tar.gz |
|---|---|
| Size | 21.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
67237e874add4e0e4c961fb78a11f745810d69f14f5206020ef3df233b0e3797
|
|
BLAKE2b-256 checksum How to use checksums |
51b70735f75b4a539dd7e949312f7d1a90fb9e22f394f001deea005b98001842
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / magnax-1.5.2-py3-none-any.whl
| Download URL | magnax-1.5.2-py3-none-any.whl |
|---|---|
| Size | 21.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
88addb8044a88c1d7c7ebc6454e765e80a583ac9be060a0a4ccb4eabeb15e7fc
|
|
BLAKE2b-256 checksum How to use checksums |
a15e6665f59138a092965fed81e4c4912d222b41916f6d01fe85a76a51d5eebb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|