Andriod dev toolbox part 2

Preview:

Citation preview

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

smagnezi8@gmail.comPresentation template by SlidesCarnival | Photographs by Unsplash