simon stewart, facebook engineer - building facebook for android
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 2: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/2.jpg)
The Challenge
>300 engineers
>150,000 files
>100,000 commits
![Page 3: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/3.jpg)
There is no Android team
![Page 4: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/4.jpg)
How do we “move fast”?
![Page 5: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/5.jpg)
Build fast
![Page 6: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/7.jpg)
How the code is organized
Text
http://www.flickr.com/photos/darwinbell/3030214710/
![Page 8: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/8.jpg)
Code review
![Page 9: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/9.jpg)
Image macros
QuickTime™ and aGIF decompressor
are needed to see this picture.
![Page 10: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/10.jpg)
Dependency injection
http://www.flickr.com/photos/31246066@N04/5253179784/
![Page 11: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/14.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/15.jpg)
Dependency Graph
AR AR
AR
ALAL AL
AL AL
AL
AB
GR
AB
GR
![Page 16: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/16.jpg)
Dependency Graph
AR AR
AR
ALAL AL
AL AL
AL
AB
GR
AB
GR
![Page 17: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/17.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/18.jpg)
Test fast
![Page 19: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/19.jpg)
Developers write tests
![Page 20: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/20.jpg)
Unit tests
http://www.flickr.com/photos/aracelota/4773084433/
![Page 21: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/21.jpg)
Larger tests
http://www.flickr.com/photos/amphalon/6510474165/
![Page 22: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/22.jpg)
Deploy fast
![Page 23: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/23.jpg)
Dogfood, Alpha and Beta
![Page 24: Simon Stewart, Facebook engineer - Building Facebook for Android](https://reader036.vdocument.in/reader036/viewer/2022062513/554f90c0b4c905435d8b506d/html5/thumbnails/24.jpg)
Questions?