Xavier, any updates here?

On Thursday, 23 April 2015 20:36:07 UTC+3, Xavier Ducrohet wrote:
>
> terminate() doesn't kill adb, it just stops a few long running ddmlib 
> threads. We should absolutely call it, if we're not doing it it's a a bug.
>
> The trick is to kill it at the right time. I'll look into it.
>
> On Thu, Apr 23, 2015 at 8:36 AM, 'Siva Velusamy' via adt-dev <
> [email protected] <javascript:>> wrote:
>
>> 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 <[email protected] 
>> <javascript:>> 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 <
>>> [email protected] <javascript:>> 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 <[email protected] 
>>>> <javascript:>> 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 [email protected] <javascript:>.
>>>>
>>>>
>>>>> 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 
>>>> [email protected] <javascript:>.
>>>> 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 [email protected] <javascript:>.
>>> 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 [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Xavier Ducrohet
> Android SDK Tech Lead
> Google Inc.
> http://developer.android.com | http://tools.android.com
>
> Please do not send me questions directly. 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.

Reply via email to