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.

Reply via email to