andriod dev toolbox part 2
TRANSCRIPT
Android dev toolbox II
AVGeeks, 2016
Shem Magnezi@shemag8 | shem8.wordpress.com
Part 1 Libraries
Part 2 Tools
Why use external tools?
▣ Same as libraries- don't reinvent the wheel.
Why not?
▣ Proprietary solutions (Outsource them, Everything.me style!)
SystraceCollects system and application process execution data and generates detailed, interactive reports from devices
http://developer.android.com/tools/performance/systrace/index.html
Allocation trackingMonitor where objects are being allocated when you perform certain actions
http://developer.android.com/tools/studio/index.html#alloc-tracker
Trace viewTraceview can help you debug your application and profile its performance.
http://developer.android.com/tools/debugging/debugging-tracing.html
Hierarchy ViewerVisualizes your app's view hierarchy and profiles the relative rendering speed for each view.
http://developer.android.com/tools/performance/hierarchy-viewer/index.html
Developer optionsRealtime on device debugging.
http://developer.android.com/tools/device.html
HugoAnnotation-triggered method call logging for your debug builds.
@DebugLogpublic 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 CanaryA 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 HomeStandalone 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
ProbeAndroid applications performance testing tool.
python console.py --package your.package.name \
--activity TheActivityToRunProbeOn --repeat-count x \ --
timeout y
https://github.com/EverythingMe/probe
MagnetoMagneto allows you to write smart and powerful tests for Android apps.
http://getmagneto.com/
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.
StethoA debug bridge for Android applications
http://facebook.github.io/stetho/
Espresso APIs for writing UI tests to simulate user interactions within a single target app.
@Testpublic 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
RobolectricA 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/
Part 3 Resources
Android Arsenal
http://android-arsenal.com/
Droid Toolbox
http://droid-toolbox.com/
MaterialUp
http://www.materialup.com/
Android For Devs
http://www.android4devs.com/
Android library statistics (By Appbrain)
http://www.appbrain.com/stats/libraries
Android Developers Blog
http://android-developers.blogspot.co.il/
Google Developers @Medium
https://medium.com/google-developers
The developer show
https://www.youtube.com/playlist?list=PLOU2XLYxmsII8REpkzsy1bJHj6G1WEVA1
Android Weekly
http://androidweekly.net/
Part 4 People
Nick ButcherDesign/Developer Advocate @ Google
@crafty
Chet HasseAndroid animator @ Google
@chethaase
Chiu-Ki ChanAndroid developer, public speaker
@chiuki
Romain GuyWorking on awesome stuff at Google
@romainguy
Roman NurikDesigner @ Google
@romannurik
Kelly ShusterAndroid Engineer, Public speaker & tech diversity advocate.
@kellyshuster
Ian LakeDeveloper Advocate @ Google
@ianhlake
Joanna SmithDeveloper Advocate @ Google
@dontmesswithjo
Yigit BoyarUI toolkit team @Android/ Google
@yigitboyar
Lisa WrayAndroid @ Genius (prev Google & NYT)
@lisawrayz
Jake Whartonopen source practitioner and contributor, @square
@jakewharton
Colt McAnlisDeveloper Advocate @ Google
@duhroach
Thanks!Any questions?
You can find this presentation at:shem8.wordpress.com
[email protected] template by SlidesCarnival | Photographs by Unsplash