As already mentioned, you can exclude analytics by the IP addresses indicated on the page https://firebase.google.com/docs/test-lab/android/overview#and_mobile_advertising
Here is some code to handle this (apache commons-net required) This should cover all current cases.
NOTE. You will need to call it only once when the application starts, because the Test Lab device will not change the IP addresses, and the NON Test Lab device will not. I suppose this suggests that a Wi-Fi connection is also established ...
private static boolean isTestLabIpAddress(Context context) { WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE); String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); // Log.i(TAG, "isTestLabIpAddress: ip: " + ip); for diagnosis, you may want this temporarily to be able to check the TestLab device logcat logs // https://firebase.google.com/docs/test-lab/android/overview#and_mobile_advertising List<String> cidrAddrs = new ArrayList<>(); //Physical devices cidrAddrs.add("108.177.6.0/23"); //Virtual devices cidrAddrs.add("35.192.160.56/29"); cidrAddrs.add("35.196.166.80/29"); cidrAddrs.add("35.196.169.240/29"); cidrAddrs.add("35.203.128.0/28"); cidrAddrs.add("35.234.176.160/28"); cidrAddrs.add("199.192.115.0/30"); cidrAddrs.add("199.192.115.8/30"); cidrAddrs.add("199.192.115.16/29"); for (String cidrRange : cidrAddrs) { SubnetUtils utils = new SubnetUtils(cidrRange); // build.gradle - implementation 'commons-net:commons-net:3.6' boolean isInRange = utils.getInfo().isInRange(ip); if (isInRange) { //Log.d(TAG, "isTestLabIpAddress: true: " + ip); return true; } } return false; }
source share