Real-time network monitor, latency tracker, quality analyzer, and background speed visualizer for Android.
- JDK 17+ (Temurin/OpenJDK): https://adoptium.net/temurin/releases/?version=17
- Internet access on first build (bootstraps Gradle 9.1.0 and the Android SDK platform 36)
Double-click or run from a command prompt:
build.bat :: debug APK -> apk\NetPulse-debug.apk
build.bat assembleRelease :: signed release APK -> apk\NetPulse-release.apk
build.bat testDebugUnitTestbuild.bat automatically:
- Checks for JDK 17+ (on
PATHorJAVA_HOME). - Finds the Android SDK (
ANDROID_HOME/ANDROID_SDK_ROOT/%LOCALAPPDATA%\Android\Sdk) and, if missing, downloads the command-line tools and installsplatforms;android-36+build-tools;36.0.0. - Creates
local.propertiespointing at the SDK. - Downloads Gradle 9.1.0 once and generates
gradlew/gradlew.bat(the wrapper is not committed as a binary). - For release builds, generates
my-upload-key.jks+keystore.properties(both git-ignored) on first run. - Copies the finished APK into the
apk/folder.
gradlew.bat assembleDebug
gradlew.bat assembleReleasegradlew.bat testDebugUnitTest :: unit + Robolectric tests
gradlew.bat connectedDebugAndroidTest :: instrumented tests (device/emulator)- Debug builds use the standard auto-generated debug keystore (
~/.android/debug.keystore); no extra setup is required. - Release APKs are unsigned if no keystore is present (a keystore can also be configured through
KEYSTORE_PATH,STORE_PASSWORD,KEY_PASSWORDenv vars or akeystore.propertiesfile). - The foreground services use
foregroundServiceType="specialUse"because Android 15+ restrictsdataSyncservices to 6 hours/day and forbids starting them fromBOOT_COMPLETED. values-facontains the complete Persian localization; Wi-Fi SSID display additionally requires the app's location permission (requested automatically when a Wi-Fi SSID cannot be read).