

Stetho: A new debugging platform for Android - longinoa
https://code.facebook.com/posts/393927910787513/

======
evmar
This looks really neat! As the post suggests, we also have been doing a lot of
janky Log calls to debug our app's network code.

I am really impressed by a lot of the Facebook open source releases. Each new
one makes me even sadder that you can't use them due to the crazy patent
license they've started using:

[https://github.com/facebook/stetho/blob/master/PATENTS](https://github.com/facebook/stetho/blob/master/PATENTS)

"The license granted hereunder will terminate, automatically and without
notice, for anyone that makes any claim (including by filing any lawsuit,
assertion or other action) alleging [...] that any right in any patent claim
of Facebook is invalid or unenforceable."

~~~
btown
I was going to write a rebuttal saying that it's unlikely that any of this
specific Software [Stetho] is covered by patent claims, so it wouldn't matter
if you lost the license to Facebook's patents.

But then I saw this: [http://stks.freshpatents.com/Facebook-Inc-
nm1.php](http://stks.freshpatents.com/Facebook-Inc-nm1.php)

314 patents in 2014, 69 just since the start of 2015. That's... just absurd.

~~~
kej
It wouldn't matter if this was covered or not. Their license is saying that
you can use their stuff as long as you don't question _any_ of their patents.

~~~
FeeTinesAMady
Github would earn a lot of respect if they simply disallowed that sort of
license for anything hosted with them.

~~~
FeeTinesAMady
Downvotes? Really? Github could make a stand here and disallow licenses that
evil and self-serving. With this license, anybody who even uses this software
can't challenge any patents of Facebook's. If Github said no, this is wrong,
they would set an example for everyone else and single this out as the
terrible license it is.

~~~
madeofpalk
Downvotes because its rather impractical, and Im sure many people don't want
GitHub to start arbitrarily banning projects because of a random set of
beliefs they have.

And then you have people that pay money to GitHub for code hosting...

~~~
FeeTinesAMady
But Github here is in the position where they are the only external party that
could do something about this, because the code is hosted on their site.

> ... Im sure many people don't want GitHub to start arbitrarily banning
> projects because of a random set of beliefs they have

It wouldn't be unprecedented and it wouldn't be arbitrary. Google Code, for
instance, only allows open source projects to be hosted with them. From what I
can tell about Github, they allow any license. Doesn't mean that they can't
change that policy.

Sure, it's easier to do nothing. But they alone could do _something_. And
Facebook will get the goodwill they want from this without much kickback
because nobody does anything.

------
jawns
PhoneGap has some debugging tools available that offer a similar approach:
[https://github.com/phonegap/phonegap/wiki/Debugging-in-
Phone...](https://github.com/phonegap/phonegap/wiki/Debugging-in-PhoneGap)

They've saved me a ton of time. Especially when you're using something like
PhoneGap, where you're coding in JS, it's nice to have your old familiar web-
based debugging console available.

------
msoad
Square has the same thing for iOS:

[https://github.com/square/PonyDebugger](https://github.com/square/PonyDebugger)

I'm sure Facebook was inspired with PonyDebugger to create this.

------
mrvagabond
I skimmed through their github page, but didn't see if they offer view
hierarchy debugging. Being able to easily navigate an xml dump of the screen
would be amazing using Chome Tools. Android Device Monitor is not the most
elegant of interfaces.

~~~
longinoa
As others have mentioned we are working on getting a hierarchy viewer built
now.

------
stevebot
Ah and I had just finally coughed up 50 dollars for my Charles license.
Charles is a nice tool, but this seems so much nicer as I don't see anywhere
that the user is required to setup a proxy manually on the phone.

This does make me wonder how their HTTP debugging works? I am assuming that
data is passed over USB. Are they using ADB underneath this all?

~~~
rentnorove
It requires you to compile a proxy into the application:

    
    
        OkHttpClient client = new OkHttpClient();
        client.networkInterceptors().add(new StethoInterceptor());

~~~
stevebot
How is that really a proxy if it gets compiled into your application? From
what others have said it sounds like the real mechanism is over adb.

~~~
longinoa
Its not a proxy, it requires that you build hooks into your http engine
(OkHttp/HttpUrlConnection) to forward events to the NetworkEventReporter
interface.

------
tarnic
Looks cool! But wait: does it mean that we have to add this instrumentation
code when debugging, but when releasing to the Play Store, we have to remember
to remove it? Or does it work only when the app is not signed and you can
attach the debugger?

~~~
jasta
Currently our recommendation is to use an if (DEBUG) block around your
initialization and then use proguard to remove the dead code in release. We
are working on a better solution which allows you to use build flavors in
gradle. The proguard solution is how Facebook apps strip it out today,
however.

That said, it is safe to ship the stetho engine in your release apps and it
adds virtually no runtime overhead to initialize due to our deferred init
design. For instance, Chrome for Android ships with the same system we have
and it is always enabled even for release builds.

See
[https://github.com/facebook/stetho/issues/16](https://github.com/facebook/stetho/issues/16)
to track our progress addressing this issue.

------
aceperry
Nice. Reminds me of a software monitor. Can't wait to see what other features
will become available.

