simon stewart, facebook engineer - building facebook for android

24
Simon Stewart [email protected] github.com/shs96c @shs96c Move Fast and Build Things

Upload: howtoweb

Post on 11-May-2015

212 views

Category:

Technology


3 download

DESCRIPTION

How does Facebook build its Android app? How are they working to improve the quality, speed and stability? In this talk, we'll cover everything Facebook's Android team does from source control, builds, testing and release, and show you how you can do the same. More details on: http://2013.howtoweb.co/

TRANSCRIPT

Page 1: Simon Stewart, Facebook engineer - Building Facebook for Android

Simon [email protected]

github.com/shs96c@shs96c

Move Fast and Build Things

Page 2: Simon Stewart, Facebook engineer - Building Facebook for Android

The Challenge

>300 engineers

>150,000 files

>100,000 commits

Page 3: Simon Stewart, Facebook engineer - Building Facebook for Android

There is no Android team

Page 4: Simon Stewart, Facebook engineer - Building Facebook for Android

How do we “move fast”?

Page 5: Simon Stewart, Facebook engineer - Building Facebook for Android

Build fast

Page 6: Simon Stewart, Facebook engineer - Building Facebook for Android

The working copy

▪We use git for source control

▪Two branches we care about day-to-day:

▪ master

▪ stable

Page 7: Simon Stewart, Facebook engineer - Building Facebook for Android

How the code is organized

Text

http://www.flickr.com/photos/darwinbell/3030214710/

Page 8: Simon Stewart, Facebook engineer - Building Facebook for Android

Code review

Page 9: Simon Stewart, Facebook engineer - Building Facebook for Android

Image macros

QuickTime™ and aGIF decompressor

are needed to see this picture.

Page 10: Simon Stewart, Facebook engineer - Building Facebook for Android

Dependency injection

http://www.flickr.com/photos/31246066@N04/5253179784/

Page 11: Simon Stewart, Facebook engineer - Building Facebook for Android

We needed a better tool

▪Minimal overhead in creating a module

▪Keep boilerplate out of the codebase

▪ IDE friendly

▪Faster clean builds

▪Faster incremental builds

▪Support ad-hoc build steps

Page 12: Simon Stewart, Facebook engineer - Building Facebook for Android

Buck: an Android build system

▪build rule procedure for producing output files from input files

▪build file file (named BUCK) where build rules are declared

▪build target string identifier for a build rule

Page 13: Simon Stewart, Facebook engineer - Building Facebook for Android

Build Target

//java/com/facebook/share:ui

Root of the repository

Directory where the build file can be found

Name of the build rule

Page 14: Simon Stewart, Facebook engineer - Building Facebook for Android

Build Rule

android_library( name = 'ui', srcs = glob(['**/*.java']), deps = [ '//android_res/com/facebook/share:res', '//java/com/facebook/base:base', '//third-party/java/guava:guava', ], visibility = [ 'PUBLIC' ],)

Page 15: Simon Stewart, Facebook engineer - Building Facebook for Android

Dependency Graph

AR AR

AR

ALAL AL

AL AL

AL

AB

GR

AB

GR

Page 16: Simon Stewart, Facebook engineer - Building Facebook for Android

Dependency Graph

AR AR

AR

ALAL AL

AL AL

AL

AB

GR

AB

GR

Page 17: Simon Stewart, Facebook engineer - Building Facebook for Android

Buck is Open Source!

▪Available on GitHub: https://github.com/facebook/buck/

▪Documentation galore: http://facebook.github.com/buck/

▪Apache 2.0 License

▪Written in Java and a smattering of Python

▪Works on OS X and Linux

Page 18: Simon Stewart, Facebook engineer - Building Facebook for Android

Test fast

Page 19: Simon Stewart, Facebook engineer - Building Facebook for Android

Developers write tests

Page 20: Simon Stewart, Facebook engineer - Building Facebook for Android

Unit tests

http://www.flickr.com/photos/aracelota/4773084433/

Page 21: Simon Stewart, Facebook engineer - Building Facebook for Android

Larger tests

http://www.flickr.com/photos/amphalon/6510474165/

Page 22: Simon Stewart, Facebook engineer - Building Facebook for Android

Deploy fast

Page 23: Simon Stewart, Facebook engineer - Building Facebook for Android

Dogfood, Alpha and Beta

Page 24: Simon Stewart, Facebook engineer - Building Facebook for Android

Questions?