The second part of the Android dev toolbox lecture,
This time we’ll focus on collection of tools and resources that help you build better apps in less time.
Systrace
Collects system and application process execution data and generates detailed, interactive reports from devices
http://developer.android.com/tools/performance/systrace/index.html
Allocation tracking
Monitor where objects are being allocated when you perform certain actions
http://developer.android.com/tools/studio/index.html#alloc-tracker
Trace view
Traceview can help you debug your application and profile its performance.
http://developer.android.com/tools/debugging/debugging-tracing.html
Hierarchy Viewer
Visualizes your app's view hierarchy and profiles the relative rendering speed for each view.
http://developer.android.com/tools/performance/hierarchy-viewer/index.html
Hugo
Annotation-triggered method call logging for your debug builds.
@DebugLog
public String getName(String first, String last) {
SystemClock.sleep(15); // Don't ever really do this!
return first + " " + last;
}
https://github.com/JakeWharton/hugo
V/Example: ⇢ getName(first="Jake", last="Wharton")
V/Example: ⇠ getName [16ms] = "Jake Wharton"
Leak Canary
A memory leak detection library for Android and Java.
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
https://github.com/square/leakcanary
Phone Home
Standalone library that sends logs from remote Android devices to a central server for debugging.
PhoneHomeConfig.getInstance()
// enable or disable log flushing
.enabled(false)
// wait for this many log events before flushing ...
.batchSize(100)
// ... or until this many seconds have passed between flushes
.flushIntervalSeconds(1800)
// when developing, log all messages to logcat, then flush everything to the sink
.debugLogLevel(android.util.Log.VERBOSE)
// in production, only log INFO messages and above to logcat, then flush everything to the sink
.productionLogLevel(android.util.Log.INFO)
// specify the sink that receives flushed logs. Required if you enable log flushing
.logSink(new PhoneHomeSink() {
public void flushLogs(final List<PhoneHomeLogEvent> logEvents) {
// flush log events to your backend
}
});
https://github.com/nebulabsnyc/PhoneHome
Probe
Android applications performance testing tool.
python console.py --package your.package.name
--activity TheActivityToRunProbeOn --repeat-count x --
timeout y
https://github.com/EverythingMe/probe
Monkey testing
adb shell monkey -p your.package.name -v 500
http://developer.android.com/tools/help/monkey.html
The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user
events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the
Monkey to stress-test applications that you are developing, in a random yet repeatable manner.
Espresso
APIs for writing UI tests to simulate user interactions within a single target app.
@Test
public void changeText_sameActivity() {
// Type text and then press the button.
onView(withId(R.id.editTextUserInput))
.perform(typeText(mStringToBetyped), closeSoftKeyboard());
onView(withId(R.id.changeTextBt)).perform(click());
// Check that the text was changed.
onView(withId(R.id.textToBeChanged))
.check(matches(withText(mStringToBetyped)));
}
http://developer.android.com/training/testing/ui-testing/espresso-testing.html
Robolectric
A unit test framework that de-fangs the Android SDK jar so you can test-drive the development of your Android
app
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {
@Test
public void clickingButton_shouldChangeResultsViewText() throws Exception {
MyActivity activity = Robolectric.setupActivity(MyActivity.class);
Button button = (Button) activity.findViewById(R.id.button);
TextView results = (TextView) activity.findViewById(R.id.results);
button.performClick();
assertThat(results.getText().toString()).isEqualTo("Robolectric Rocks!");
}
}
http://robolectric.org/
Nick Butcher
Design/Developer Advocate @ Google
@crafty
Chet Hasse
Android animator @ Google
@chethaase
Chiu-Ki Chan
Android developer, public speaker
@chiuki
Romain Guy
Working on awesome stuff at Google
@romainguy
Roman Nurik
Designer @ Google
@romannurik
Kelly Shuster
Android Engineer, Public speaker &
tech diversity advocate.
@kellyshuster
Ian Lake
Developer Advocate @ Google
@ianhlake
Joanna Smith
Developer Advocate @ Google
@dontmesswithjo
Yigit Boyar
UI toolkit team @Android/ Google
@yigitboyar
Lisa Wray
Android @ Genius (prev Google & NYT)
@lisawrayz
Jake Wharton
open source practitioner and contributor, @square
@jakewharton
Colt McAnlis
Developer Advocate @ Google
@duhroach
Thanks!
Any questions?
You can find this presentation at:
shem8.wordpress.com
smagnezi8@gmail.com
Presentation template by SlidesCarnival | Photographs by Unsplash