I'm not sure what the gradle plugin does, maybe xav@ can chime in. But as far as gradle invoked from Studio goes, we don't invoke anything that uses the device directly from the IDE...Unless ofcourse you explicitly invoke a gradle task such as the one for running tests.
On Wed, Apr 22, 2015 at 11:22 PM, Roman Mazur <mazur.ro...@gmail.com> wrote: > So is it true that Android Gradle plugin does not call terminate? Because > otherwise it would kill adb server started by Android Studio? > > On Thu, 23 Apr 2015 at 01:51 'Siva Velusamy' via adt-dev < > adt-dev@googlegroups.com> wrote: > >> The usage as followed by Studio is: >> >> To create: >> >> 1. AndroidDebugBridge.init(clientSupport); >> 2. bridge = AndroidDebugBridge.createBridge(myAdb.getPath(), false); >> >> Finally, when the IDE is closing: >> >> 1. AndroidDebugBridge.disconnectBridge(); >> 2. AndroidDebugBridge.terminate(); >> >> >> You can see this in action at >> https://android.googlesource.com/platform/tools/adt/idea/+/studio-1.3-dev/android/src/com/android/tools/idea/ddms/adb/AdbService.java >> >> The issue here is that terminate() will result in the adb server being >> killed. This is not always appropriate, see >> https://code.google.com/p/android/issues/detail?id=73772: some users run >> Studio from the command line, and expect adb server to be running after >> Studio quits. The proposed solution right now would be to kill the server >> only if it was actually started by Studio. But we don't have an API for >> that yet in ddmlib. >> >> Coming to your use case, I don't know the exact interactions between the >> gradle plugin and the spoon plugin, but if your plugin terminates adb >> server that it launched, then that would be ok, but if it happens to >> terminate adb launched by gradle, then it seems like you are violating the >> assumption of the gradle plugin. >> >> So for now, you could call terminate() if you know somehow that the >> entire gradle invocation is terminating, or not call it and live with the >> issue that the adb server will keep running.. >> >> >> On Wed, Apr 22, 2015 at 3:15 PM, Roman Mazur <mazur.ro...@gmail.com> >> wrote: >> >>> 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 adt-dev+unsubscr...@googlegroups.com. >> >> >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "adt-dev" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/adt-dev/1BgTs8Bs6_Q/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> adt-dev+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > -- > 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. > -- 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.