>From my experience I know that three parameters are extremely useful when working with multiple devices on CI:
1. The timeout for installing apks, which can easily be reached if devices are connected through a socket from a remote machine and when uploading big apks. 2. The number of threads which access one adb server at the same time in parallel. The broken pipe error seems to be system dependent, e.g. ubuntu is worse than mac. For mac I found that 4 threads is the sweet spot. 3. A list of device serials which identify the devices to run tests on. I wish all of these parameters would be configureable through the android gradle plugin or from cli. I know that the abstract DeviceProvider class has a getMaxThreads() method which is currently hardcoded to 0 which causes the subsequent logic to use as many threads as the system has processors. Maybe that logic could be refactored to use 0 as a default and allow the property to be set from cli, like: ./gradlew connectedCheck -DandroidMaxThreads=4. Concerning the timeout I think the getTimeout() method of the DeviceProvider would be the right place to start, though it seems that the timeout is not used consistently. I found at least three different timeouts used for running install/sync commands: DdmPreferences.getTimeout(), System.getenv("ADB_INSTALL_TIMEOUT") and DeviceProvider.getTimeout(). Obviously one can be configured from the user already, although it might not have the expected effect. Maybe the internals of the android tools could find some common ground to specify those seemingly equivalent timeouts and maybe it would also allow to set the timeout from within the gradle config or from cli (e.g. ./gradlew connectedCheck -DandroidInstallTimeout=60000). Concerning the serials (emphasis on plural), I am currently running a self-patched version of the android gradle plugin which supports a system property which allows to specify a set of serials to run on, e.g. ./gradlew connectedCheck -DandroidSerials=emulator-5554,emulator-5556 If there is an agreement, I would be happy to contribute this change to upstream and I would also like to contribute to solutions for the timeout and maxThreads problem. On Tuesday, November 4, 2014 at 8:07:24 PM UTC+1, Kevin Brotcke wrote: > > Reviving this thread in case others stumble upon it. I recently added the > ANDROID_SERIAL property support released in Android Gradle plugin 0.14.0 > (2014/10/31). > > https://code.google.com/p/android/issues/detail?id=75407 > > On Thursday, April 4, 2013 10:45:07 AM UTC-4, Per Christian Henden wrote: >> >> Hi group! >> >> When executing the build I have multiple devices available for adb, and >> this makes the InstallTask fail with an adb error ("more than one device >> and emulator"). >> The reason for the multiple devices is that this happens on a build >> server (Jenkins) where there are multiple Android projects building at the >> same time, each using their own emulator. >> To install an apk in this environment 'adb' must be given a device >> serial, for example 'adb -s emulator-5554 install myapp.apk'. >> >> Do you have any suggestions on a workaround for this limitation in the >> gradle plugin? >> My ideas so far are to overwrite the InstallTask or to somehow supply the >> ANDROID_SERIAL environment variable to the InstallTask. >> When ANDROID_SERIAL is available, adb will use that device. >> >> Cheers >> PC: >> > -- You received this message because you are subscribed to the Google Groups "adt-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to adt-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.