AndroidDebugBridge is a part of ddms Java library. It provides Java interface to what we can do with adb command line.
To get an ADB client using this library, one can use a sequence of init and createBridge methods. AndroidDebugBridge also has terminate method. And its documentation says that this method must be called when you are done with the client. AndroidDebugBridge is apparently used by Android Gradle plugin. For example, in tasks that install APK on a device. Here is an example: https://android.googlesource.com/platform/tools/base/+/gradle_1.1.3/build-system/builder/src/main/java/com/android/builder/testing/ConnectedDeviceProvider.java#60 Although we can see how init and createBridge are used, I cannot find any calls to terminate() in Android Gradle plugin. Usage search in IDEA shows only 2 usages in AndroidDebugBridgeTest. This was the reason I contributed some changes to the Spoon tool. This tool runs instrumentation test on devices accessible via USB and generates pretty test reports that include screenshots. To do this, the tool uses AndroidDebugBridge to install APKs and pull screenshot files from a device. In older versions ADB was initialized with init(false) method (that cannot be called twice beforeterminate is invoked) and createBridge invocation that was forcing a new bridge. https://github.com/square/spoon/blob/parent-1.1.5/spoon-runner/src/main/java/com/squareup/spoon/SpoonUtils.java#L100-L104 When all the tests have been run and screenshots pulled from the device, Spoon would call terminate()method: https://github.com/square/spoon/blob/parent-1.1.5/spoon-runner/src/main/java/com/squareup/spoon/SpoonDeviceRunner.java#L359 Such an implementation was causing troubles when spoon was run from the Gradle plugin for multiple flavors: stanfy/spoon-gradle-plugin#4 (comment) <https://github.com/stanfy/spoon-gradle-plugin/issues/4#issuecomment-35062456> As a result I changed how AndroidDebugBridge is used in Spoon. Now initialization matches the code inConnectedDevice https://github.com/square/spoon/blob/parent-1.1.9/spoon-runner/src/main/java/com/squareup/spoon/SpoonUtils.java#L101-L105 and terminate() is not used. Now it works well with Gradle plugin and I can easily get Spoon reports for multiple application/library bariants. However, this seems to have sparked new problems to some guys that use standalone Spoon tool. square/spoon#251 <https://github.com/square/spoon/issues/251> Standalone tool hangs after reports are generated. Hence, I'm going to push another change :). And my guess is that correct usage would be gettingterminate() invocation back to the code but stick to not forcing a new bridge in createBridge. Could somebody clarify what is the correct usage scenario for AndroidDebugBridge taking into account that we want to call createBridge multiple times (to get Spoon reports for different build variants)?. Thanks! -- 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
