the 2016 android developer toolbox [greece]

82
#droidconGR16 THE 2016 ANDROID DEVELOPER TOOLBOX

Upload: nilhcem

Post on 11-Jan-2017

219 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: The 2016 Android Developer Toolbox [GREECE]

#droidconGR16

THE 2016 ANDROIDDEVELOPER TOOLBOX

Page 2: The 2016 Android Developer Toolbox [GREECE]

@Nilhcem

Page 3: The 2016 Android Developer Toolbox [GREECE]

#droidconGR16

Page 4: The 2016 Android Developer Toolbox [GREECE]

THE 2016 ANDROIDDEVELOPER TOOLBOX

Page 5: The 2016 Android Developer Toolbox [GREECE]
Page 6: The 2016 Android Developer Toolbox [GREECE]
Page 7: The 2016 Android Developer Toolbox [GREECE]

"Use the right tools for the right job"

Page 8: The 2016 Android Developer Toolbox [GREECE]
Page 9: The 2016 Android Developer Toolbox [GREECE]
Page 10: The 2016 Android Developer Toolbox [GREECE]

(with the Android Plugin for Gradle)

Page 11: The 2016 Android Developer Toolbox [GREECE]

BUILD VARIANTS

Page 12: The 2016 Android Developer Toolbox [GREECE]

U+2020https://github.com/JakeWharton/u2020

Page 13: The 2016 Android Developer Toolbox [GREECE]

DEBUG SCREENExample from Google iosched

Page 14: The 2016 Android Developer Toolbox [GREECE]

INTERNAL SETTINGS APPSimilar to U+2020 Sample app

Display build / device information

Change endpoint (restart process with)

Show logs ( )

Allow easy bug report capturing( )

Enable/Disable Takt / Stetho / Scalpel /Madge...

JakeWharton/ProcessPhoenix

pedrovgs/Lynx

mattprecious/telescope

Page 15: The 2016 Android Developer Toolbox [GREECE]

DROIDCON GREECE APPLICATIONhttps://github.com/Nilhcem/droidcongr-2016

Page 16: The 2016 Android Developer Toolbox [GREECE]

MEASURING TOOLS

Page 17: The 2016 Android Developer Toolbox [GREECE]

ANDROID STUDIO(Android Monitor tab)

Page 18: The 2016 Android Developer Toolbox [GREECE]
Page 19: The 2016 Android Developer Toolbox [GREECE]

DETECT MEMORY LEAKS

Page 20: The 2016 Android Developer Toolbox [GREECE]
Page 21: The 2016 Android Developer Toolbox [GREECE]

LEAK CANARYhttps://github.com/square/leakcanary

Page 22: The 2016 Android Developer Toolbox [GREECE]

FRAME RATE

build.gradle:

MyApplication.java:

https://github.com/wasabeef/Takt

c o m p i l e ' j p . w a s a b e e f : t a k t : 1 . 0 . 2 '

p u b l i c c l a s s M y A p p l i c a t i o n e x t e n d s A p p l i c a t i o n {

@ O v e r r i d e p u b l i c v o i d o n C r e a t e ( ) {

s u p e r . o n C r e a t e ( ) ;

T a k t . s t o c k ( t h i s ) . p l a y ( ) ;

}

}

Page 23: The 2016 Android Developer Toolbox [GREECE]

HUGOhttps://github.com/JakeWharton/hugo

Prefix classes/methods with:

@ D e b u g L o g

Result:

D r o i d c o n A p p V ⇢ o n C r e a t e ( ) V ⇢ i n i t G r a p h ( ) V ⇠ i n i t G r a p h [ 1 3 m s ] V ⇢ i n i t L o g g e r ( ) V ⇠ i n i t L o g g e r [ 1 m s ] V ⇠ o n C r e a t e [ 7 3 m s ]

Page 24: The 2016 Android Developer Toolbox [GREECE]

PIDCAThttps://github.com/JakeWharton/pidcat

$ p i d c a t c o m . n i l h c e m . d r o i d c o n g r

Page 25: The 2016 Android Developer Toolbox [GREECE]

ANDROIDDEVMETRICS

build.gradle:

MyApplication.java:

https://github.com/frogermcs/AndroidDevMetrics

a p p l y p l u g i n : ' c o m . f r o g e r m c s . a n d r o i d d e v m e t r i c s '

p u b l i c c l a s s M y A p p l i c a t i o n e x t e n d s A p p l i c a t i o n {

@ O v e r r i d e p u b l i c v o i d o n C r e a t e ( ) {

s u p e r . o n C r e a t e ( ) ;

A n d r o i d D e v M e t r i c s . i n i t W i t h ( t h i s ) ;

}

}

Page 26: The 2016 Android Developer Toolbox [GREECE]

CODE STATIC ANALYSIS TOOLS

Lint

Error Prone (Google)

Infer (Facebook)

Page 27: The 2016 Android Developer Toolbox [GREECE]
Page 28: The 2016 Android Developer Toolbox [GREECE]
Page 29: The 2016 Android Developer Toolbox [GREECE]
Page 30: The 2016 Android Developer Toolbox [GREECE]

SONARQUBEDockerfile:

F R O M j a v a : 8

M A I N T A I N E R N i l h c e m

R U N D E B I A N _ F R O N T E N D = n o n i n t e r a c t i v e a p t u p d a t e

R U N D E B I A N _ F R O N T E N D = n o n i n t e r a c t i v e a p t i n s t a l l - y w g e t u n z i p

R U N w g e t - q h t t p s : / / s o n a r s o u r c e . b i n t r a y . c o m / D i s t r i b u t i o n / s o n a r q u b e / s o n a r q u b e - 5 . 6 . z i p

R U N u n z i p - q q s o n a r q u b e - 5 . 6 . z i p - d / o p t /

R U N r m s o n a r q u b e - 5 . 6 . z i p

E X P O S E 9 0 0 0

C M D [ " / o p t / s o n a r q u b e - 5 . 6 / b i n / l i n u x - x 8 6 - 6 4 / s o n a r . s h " , " c o n s o l e " ]

Then launch:

$ d o c k e r b u i l d - t n i l h c e m / s o n a r q u b e . $ d o c k e r r u n - p 9 0 0 0 : 9 0 0 0 - d n i l h c e m / s o n a r q u b e

Page 31: The 2016 Android Developer Toolbox [GREECE]

SONARQUBE GRADLE CONFIGURATIONbuild.gradle:

a p p l y p l u g i n : ' o r g . s o n a r q u b e '

s o n a r q u b e { p r o p e r t i e s { d e f a p p P r o j e c t = p r o j e c t ( ' : a p p ' ) d e f a p p P r o j e c t B u i l d D i r = a p p P r o j e c t . b u i l d D i r

p r o p e r t y ' s o n a r . p r o j e c t K e y ' , ' d r o i d c o n g r ' p r o p e r t y ' s o n a r . p r o j e c t N a m e ' , ' D r o i d c o n G R 2 0 1 6 ' p r o p e r t y ' s o n a r . p r o j e c t V e r s i o n ' , a p p P r o j e c t . a n d r o i d . d e f a u l t C o n f i g . v e r s i o n N a m e

p r o p e r t y ' s o n a r . h o s t . u r l ' , ' h t t p : / / d o c k e r : 9 0 0 0 ' p r o p e r t y ' s o n a r . s o u r c e s ' , ' s r c ' p r o p e r t y ' s o n a r . s o u r c e E n c o d i n g ' , ' U T F - 8 ' p r o p e r t y ' s o n a r . j a v a . b i n a r i e s ' , ' b u i l d '

p r o p e r t y ' s o n a r . e x c l u s i o n s ' , ' * * / * T e s t . j a v a ' p r o p e r t y ' s o n a r . c o r e . c o d e C o v e r a g e P l u g i n ' , ' j a c o c o ' p r o p e r t y ' s o n a r . j a c o c o . r e p o r t P a t h ' , " $ a p p P r o j e c t B u i l d D i r / j a c o c o / t e s t P r o d u c t i o n D e b u g U n i t T e s t . e x e c " p r o p e r t y ' s o n a r . j u n i t . r e p o r t s P a t h ' , " $ a p p P r o j e c t B u i l d D i r / t e s t - r e s u l t s / p r o d u c t i o n D e b u g " } }

Then launch:

. / g r a d l e w : a p p : a s s e m b l e P r o d u c t i o n D e b u g : a p p : t e s t P r o d u c t i o n D e b u g U n i t T e s t : a p p : s o n a r q u b e

Page 32: The 2016 Android Developer Toolbox [GREECE]
Page 33: The 2016 Android Developer Toolbox [GREECE]
Page 34: The 2016 Android Developer Toolbox [GREECE]

TESTING TOOLS

Page 35: The 2016 Android Developer Toolbox [GREECE]

MOCK SERVER

Page 36: The 2016 Android Developer Toolbox [GREECE]

NODEJS + EXPRESS/ * S e t u p * / v a r f s = r e q u i r e ( ' f s ' ) ;v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; a p p . s e t ( ' p o r t ' , p r o c e s s . e n v . P O R T | | 8 0 8 0 ) ; v a r p o r t = a p p . g e t ( ' p o r t ' ) ;

/ * S p e a k e r s l i s t * / a p p . g e t ( ' / s p e a k e r s ' , f u n c t i o n ( r e q , r e s ) { r e s . t y p e ( ' a p p l i c a t i o n / j s o n ; c h a r s e t = u t f 8 ' ) ; r e s . s t a t u s ( 2 0 0 ) . s e n d ( f s . r e a d F i l e S y n c ( ' d a t a / s p e a k e r s . j s o n ' , ' u t f 8 ' ) ) ; } ) ;

/ * O t h e r w e b s e r v i c e s * / / / . . .

/ * S t a r t i n g t h e s e r v e r * / a p p . l i s t e n ( p o r t , f u n c t i o n ( ) { c o n s o l e . l o g ( ' E x p r e s s s e r v e r l i s t e n i n g o n p o r t ' + p o r t ) ; } ) ;

Page 37: The 2016 Android Developer Toolbox [GREECE]

NODEJS + EXPRESSSlow service

s l e e p ( 2 0 0 0 ) ;

f u n c t i o n s l e e p ( d u r a t i o n M i l l i s ) { v a r n o w = n e w D a t e ( ) . g e t T i m e ( ) ; w h i l e ( n e w D a t e ( ) . g e t T i m e ( ) < n o w + d u r a t i o n M i l l i s ) { / / d o n o t h i n g } } / / P l e a s e d o n o t t a k e p i c t u r e s o f t h i s s l i d e , / / T h i s i s n o t s o m e t h i n g I c a n b e p r o u d o f

Page 38: The 2016 Android Developer Toolbox [GREECE]

EXAMPLE

Then, go to:

https://github.com/Nilhcem/droidcongr-2016 /tree/master/mockserver

$ n p m i n s t a l l

$ n o d e s e r v e r . j s

h t t p : / / l o c a l h o s t : 8 9 9 0 /

Page 39: The 2016 Android Developer Toolbox [GREECE]

HOSTS EDITORhttps://play.google.com/store/apps/details?id=com.nilhcem.hostseditor

Page 40: The 2016 Android Developer Toolbox [GREECE]

HTTP DEBUGGING

Page 41: The 2016 Android Developer Toolbox [GREECE]

HTTP DEBUGGING

mitmproxy

Fiddler

Charles proxy

Page 42: The 2016 Android Developer Toolbox [GREECE]

CHARLES PROXYSimulate a slow connection

Repeat queries

Check the responses

Add some breakpoints to: Cancel an HTTP(s) call

Edit a request

Edit a response

Page 43: The 2016 Android Developer Toolbox [GREECE]

CANCEL A REQUEST

Page 44: The 2016 Android Developer Toolbox [GREECE]

EDIT A RESPONSE

Page 45: The 2016 Android Developer Toolbox [GREECE]

ANDROID STATERESTORING

Page 46: The 2016 Android Developer Toolbox [GREECE]

DON'T KEEP ACTIVITIES

Page 47: The 2016 Android Developer Toolbox [GREECE]

FILL RAMhttps://play.google.com/store/apps/details?id=com.tspoon.androidtoolbelt

Page 48: The 2016 Android Developer Toolbox [GREECE]

ADB + SIGTERM

Page 49: The 2016 Android Developer Toolbox [GREECE]

ANALYZING TOOLS

Page 50: The 2016 Android Developer Toolbox [GREECE]

DEVELOPER OPTIONS

Page 51: The 2016 Android Developer Toolbox [GREECE]
Page 52: The 2016 Android Developer Toolbox [GREECE]
Page 53: The 2016 Android Developer Toolbox [GREECE]

UIAUTOMATORVIEWER

Page 54: The 2016 Android Developer Toolbox [GREECE]

ANIMATIONSDeveloper options -> Animation scale

Page 55: The 2016 Android Developer Toolbox [GREECE]

ANIMATIONS

Make a screencast (API 19+):

VLC :

$ a d b s h e l l s c r e e n r e c o r d / s d c a r d / d e m o . m p 4

$ a d b p u l l / s d c a r d / d e m o . m p 4

P r e s s t h e k e y b o a r d ' E ' k e y t o s e e

f r a m e s o n e b y o n e

Page 56: The 2016 Android Developer Toolbox [GREECE]

APKTOOL + DEX2JAR + JD-GUI

http://ibotpeaches.github.io/Apktoolhttps://github.com/pxb1988/dex2jar

http://jd.benow.ca

Page 57: The 2016 Android Developer Toolbox [GREECE]

JADXhttps://github.com/skylot/jadx

Page 58: The 2016 Android Developer Toolbox [GREECE]

ANDROID STUDIO 2.2(Build > Analyze APK)

Page 59: The 2016 Android Developer Toolbox [GREECE]

STETHO

Page 60: The 2016 Android Developer Toolbox [GREECE]

STETHO - UI

Page 61: The 2016 Android Developer Toolbox [GREECE]

STETHO - NETWORK

Page 62: The 2016 Android Developer Toolbox [GREECE]

STETHO - RESOURCES

Page 63: The 2016 Android Developer Toolbox [GREECE]

STETHODUMPAPP

Page 64: The 2016 Android Developer Toolbox [GREECE]

STETHO - DUMPAPP

Page 65: The 2016 Android Developer Toolbox [GREECE]

STETHO - DUMPAPP

Page 66: The 2016 Android Developer Toolbox [GREECE]

SOME MORE DUMPAPP EXAMPLES$ d u m p a p p a c c e s s T o k e n i n v a l i d a t e $ d u m p a p p a c c e s s T o k e n s h o w f c e 1 2 3 5 4 2 5 d c d e a d b e e f 8 c a f e b a b e 4 2

$ d u m p a p p c l i p b o a r d g e t H e l l o

$ d u m p a p p c l i p b o a r d s e t " T e x t t o c o p y " $ d u m p a p p o n T r i m M e m o r y $ d u m p a p p o p e n I n t e n t s c h e m e : / / o p e n / s p e a k e r / 3

$ d u m p a p p g c m T o k e n u H y M K n E Q : A P A 9 1 b E H Z 6 a f F L Q Q M z K g S D j p 5 y _ 0 3 9 7 u s i t P q j _ B p 0 2

$ d u m p a p p g e o l o c D a t a L o c a t i o n [ f u s e d 2 2 . 5 4 3 0 8 8 3 , 1 1 4 . 1 0 4 3 2 0 5 a c c = 2 1 e t = + 2 1 m 5 s 4 9 2 m s ]

$ d u m p a p p r u n n i n g S e r v i c e s c o m . e x a m p l e . L o c a t i o n S e r v i c e

Page 67: The 2016 Android Developer Toolbox [GREECE]

STETHO - CUSTOM PLUGINhttp://code.tutsplus.com/tutorials/debugging-android-apps-with-facebooks-stetho--cms-24205

c l a s s A p p D u m p e r P l u g i n i m p l e m e n t s D u m p e r P l u g i n { @ O v e r r i d e p u b l i c S t r i n g g e t N a m e ( ) { r e t u r n " m y _ p l u g i n _ n a m e " ; }

@ O v e r r i d e p u b l i c v o i d d u m p ( D u m p e r C o n t e x t d u m p C o n t e x t ) t h r o w s D u m p E x c e p t i o n { P r i n t S t r e a m w r i t e r = d u m p e r C o n t e x t . g e t S t d o u t ( ) ; S t r i n g c o m m a n d N a m e = ( a r g s . i s E m p t y ( ) ) ? " " : a r g s . r e m o v e ( 0 ) ;

i f ( c o m m a n d N a m e . e q u a l s ( " t e s t " ) ) { o u t . p r i n t l n ( " H e l l o , W o r l d ! " ) ; } } }

Page 68: The 2016 Android Developer Toolbox [GREECE]

STETHO - CUSTOM PLUGIN

Page 69: The 2016 Android Developer Toolbox [GREECE]

STETHO - DUMPAPP (EXAMPLE)

(ActivityProvider in a dependency graph in debug)

@ S i n g l e t o n p u b l i c c l a s s A c t i v i t y P r o v i d e r i m p l e m e n t s A p p l i c a t i o n . A c t i v i t y L i f e c y c l e C a l l b a c k s {

p r i v a t e A c t i v i t y c u r r e n t A c t i v i t y ;

@ I n j e c t p u b l i c A c t i v i t y P r o v i d e r ( A p p l i c a t i o n a p p ) { a p p . r e g i s t e r A c t i v i t y L i f e c y c l e C a l l b a c k s ( t h i s ) ; }

p u b l i c A c t i v i t y g e t C u r r e n t A c t i v i t y ( ) { r e t u r n c u r r e n t A c t i v i t y ; }

@ O v e r r i d e p u b l i c v o i d o n A c t i v i t y R e s u m e d ( A c t i v i t y a c t i v i t y ) { c u r r e n t A c t i v i t y = a c t i v i t y ; }

@ O v e r r i d e p u b l i c v o i d o n A c t i v i t y P a u s e d ( A c t i v i t y a c t i v i t y ) { c u r r e n t A c t i v i t y = n u l l ; } }

Page 70: The 2016 Android Developer Toolbox [GREECE]

STETHO - DUMPAPP (EXAMPLE)

AppDumperPlugin.java

p r i v a t e v o i d d i s p l a y C u r r e n t S e s s i o n D a t a ( P r i n t S t r e a m w r i t e r ) {

A c t i v i t y a c t i v i t y = a c t i v i t y P r o v i d e r . g e t C u r r e n t A c t i v i t y ( ) ;

i f ( a c t i v i t y i n s t a n c e o f S e s s i o n D e t a i l s A c t i v i t y ) {

t r y {

/ / U s e r e f l e c t i o n t o a c c e s s p r i v a t e " s e s s i o n " f i e l d

F i e l d f i e l d = S e s s i o n D e t a i l s A c t i v i t y . c l a s s . g e t D e c l a r e d F i e l d ( " s e s s i o n " ) ;

f i e l d . s e t A c c e s s i b l e ( t r u e ) ;

S e s s i o n s e s s i o n = ( S e s s i o n ) f i e l d . g e t ( a c t i v i t y ) ;

w r i t e r . p r i n t l n ( n e w G s o n B u i l d e r ( ) . s e t P r e t t y P r i n t i n g ( ) . c r e a t e ( ) . t o J s o n ( s e s s i o n ) ) ;

} c a t c h ( E x c e p t i o n e ) {

w r i t e r . p r i n t l n ( e . g e t M e s s a g e ( ) ) ;

}

}

}

Page 71: The 2016 Android Developer Toolbox [GREECE]

STETHO CONSOLE + RHINO

Page 72: The 2016 Android Developer Toolbox [GREECE]

$#*!,I FORGOT THESE TOOLS!

Page 73: The 2016 Android Developer Toolbox [GREECE]

ADB + SHELL

# O p e n a d e e p l i n k i n g i n t e n t a d b s h e l l a m s t a r t - a a n d r o i d . i n t e n t . a c t i o n . V I E W - d " s c h e m e : / / a p p / d e e p / l i n k i n g "

# L i s t r u n n i n g s e r v i c e s a d b s h e l l d u m p s y s a c t i v i t y s e r v i c e s

# G e t t h e p a t h o f a n i n s t a l l a p p l i c a t i o n a d b s h e l l p m p a t h a p p . p a c k a g e . n a m e

# C l e a r a p p d a t a a d b s h e l l p m c l e a n a p p . p a c k a g e . n a m e

# T a k e a s c r e e n s h o t a d b s h e l l s c r e e n c a p - p | p e r l - p e ' \ ' ' s / \ x 0 D \ x 0 A / \ x 0 A / g ' \ ' ' > s c r e e n . p n g

# P a s t e t e x t f r o m y o u r c o m p u t e r c l i p b o a r d t o y o u r a n d r o i d d e v i c e p b p a s t e | s e d " s / % / % % / g " | s e d " s / / \ % \ s / g " | x a r g s a d b s h e l l i n p u t t e x t

Page 74: The 2016 Android Developer Toolbox [GREECE]

POSTMANhttps://www.getpostman.com/

Page 75: The 2016 Android Developer Toolbox [GREECE]

LOCKITOhttps://play.google.com/store/apps/details?id=fr.dvilleneuve.lockito

Page 76: The 2016 Android Developer Toolbox [GREECE]

ACCESSIBILITY SCANNERhttps://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.auditor

Page 77: The 2016 Android Developer Toolbox [GREECE]

VYSORhttp://www.vysor.io

Page 78: The 2016 Android Developer Toolbox [GREECE]

AS A CONCLUSION...

Page 79: The 2016 Android Developer Toolbox [GREECE]

CHOOSE ACCORDINGTO YOUR NEEDS AND

TASTES

Page 80: The 2016 Android Developer Toolbox [GREECE]

THE 2016 ANDROIDDEVELOPER TOOLBOX

Page 81: The 2016 Android Developer Toolbox [GREECE]

(EXAMPLE OF AN)ANDROID DEVELOPER

TOOLBOX

Page 82: The 2016 Android Developer Toolbox [GREECE]

https://twitter.com/Nilhcem

https://github.com/Nilhcem/droidcongr-2016

http://www.slideshare.net/Nilhcem/the-2016-android-developer-toolbox-greece

MASTER YOUR TOOLSTO BUILD BETTER APPS