As mentioned, you can exclude analytics by the IP addresses listed in the page https://firebase.google.com/docs/test-lab/android/get-started#ip-blocks
Here is some code to handle this (requires apache commons-net)
This should cover all the current cases.
NOTE: You'll only need to call this once at app start, since a Test Lab device won't change IP addresses and a NON Test Lab Device will not become one. I guess this kinda assumes that the wifi connection is established also...
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;
}