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.

Reply via email to