a deep dive into open source android development

109
A Deep Dive into Open Source Android Development David Wu @wuman blog.wu-man.com Taipei Google Technology User Group (2013/01/02) Taipei Open Source Software User Group (2012/12/18) 元智大學資工學系 開放源碼於行動終端之發展講座 (2012/12/07) 1

Upload: david-wu

Post on 06-May-2015

9.776 views

Category:

Documents


0 download

DESCRIPTION

The increasing popularity of the Android platform over the past two years has encouraged many talented developers to contribute. Developers no longer need to invent their own wheels from scratch. Instead, many open source tools and libraries are becoming available for Android developers. In this talk we will take a deep dive into Android programming and how developers can leverage open source tools to bootstrap their Android apps. We will also talk about how developers can contribute back to the open source community.

TRANSCRIPT

Page 1: A Deep Dive into Open Source Android Development

A Deep Dive into Open Source Android

DevelopmentDavid Wu@wuman

blog.wu-man.com

Taipei Google Technology User Group (2013/01/02)

Taipei Open Source Software User Group (2012/12/18)

元智大學資工學系 開放源碼於行動終端之發展講座 (2012/12/07)

1

Page 2: A Deep Dive into Open Source Android Development

about.me/wuman2

Page 3: A Deep Dive into Open Source Android Development

Overview

• Why use open source?

• Popular open source Android libraries

• Why open source?

• How to open source

• Conclusion

3

Page 4: A Deep Dive into Open Source Android Development

Why use open source?

4

Page 5: A Deep Dive into Open Source Android Development

Better Quality

• Developed by many passionate developers

• Innovation and enhancements over time

• Improvements and bug fixes by more people

• Closest to user needs

5

Page 6: A Deep Dive into Open Source Android Development

Freedom

• Make custom changes to tailor to own needs

• Good open source software usually adheres to open standards and promotes interoperability

6

Page 7: A Deep Dive into Open Source Android Development

Learn from the Masters

• Open source developers are usually good at what they do

• The fastest way to improve is to learn from reading their code

• Discussions are usually carried out in the open via mailing lists

7

Page 8: A Deep Dive into Open Source Android Development

Not Possible Otherwise

• It is much harder to develop an Android app without using open source software

• Platform compatibility

• UI compatibility

8

Page 9: A Deep Dive into Open Source Android Development

Android app development is

NOT easy!

9

Page 10: A Deep Dive into Open Source Android Development

Apps targeting the widest audience need to care about platform compatibility

Jelly Bean

Ice Cream Sandwich

HoneycombGingerbread

Froyo

Eclair & olderVersion Codename API Distribution

1.5 Cupcake 3 0.1%

1.6 Donut 4 0.3%

2.1 Eclair 7 2.7%

2.2 Froyo 8 10.3%

2.3 - 2.3.2Gingerbread

9 0.2%

2.3.3 - 2.3.7Gingerbread

10 50.6%

3.1Honeycomb

12 0.4%

3.2Honeycomb

13 1.2%

4.0.3 - 4.0.4 Ice Cream Sandwich 15 27.5%

4.1Jelly Bean

16 5.9%

4.2Jelly Bean

17 0.8%

10

Page 11: A Deep Dive into Open Source Android Development

UI Requirements for Featured Apps

• Follow Android Design guidelines

• Navigation

• Action Bar

• Use common UI patterns and icons

11

Page 12: A Deep Dive into Open Source Android Development

Action Bar Incompatibility

• Before 3.0, there was no common pattern or API for in-app navigation.

• Action Bar API and pattern guidelines (tablet-only) are introduced in ICS.

• Additional API changes for the phone are introduced in Jelly Bean.

12

Page 13: A Deep Dive into Open Source Android Development

Theme Incompatibility

• There is not a common cross-platform default theme for developers to derive from.

13

Page 14: A Deep Dive into Open Source Android Development

Common UI Pattern Implementations

• Some common UI patterns are not provided as part of the Android framework.

• Pull-to-refresh ListView

• Sliding Drawer Menu (ViewDeck)

14

Page 15: A Deep Dive into Open Source Android Development

Common Tools and Usage Patterns

• Some common tools and usage patterns are not provided as part of the Android framework.

• LRU cache that persists to disk

• Image loading with cache support

• Logging and user feedback support

15

Page 16: A Deep Dive into Open Source Android Development

Popular Open Source Libraries

16

Page 17: A Deep Dive into Open Source Android Development

UI and Compatibility

17

Page 18: A Deep Dive into Open Source Android Development

ActionBarSherlock

http://actionbarsherlock.com/

18

Page 19: A Deep Dive into Open Source Android Development

Action Bar General Layout

• App icon and “up” affordance

• View switch control

• Action buttons

• Action overflow

19

Page 20: A Deep Dive into Open Source Android Development

Split Action Bar

• Main action bar

• Top bar via tabs or spinner

• Bottom bar with action buttons and overflow

20

Page 21: A Deep Dive into Open Source Android Development

Contextual Action Bars

21

Page 22: A Deep Dive into Open Source Android Development

HoloEverywhere

https://github.com/ChristopheVersieux/HoloEverywhere

• Back ports the Holo themes from Jelly Bean to Eclair and above

22

Page 23: A Deep Dive into Open Source Android Development

NineOldAndroids

• Back ports the android.animation.* API from Honeycomb to all previous platforms

• Drawing vs. View properties

http://nineoldandroids.com/

ObjectAnimator.ofFloat(myObject, "translationY", -myObject.getHeight()).start();

23

Page 24: A Deep Dive into Open Source Android Development

UnifiedPreference

https://github.com/saik0/UnifiedPreference

24

Page 25: A Deep Dive into Open Source Android Development

Android Support Package

• Back ports multi-pane Fragment support from Honeycomb to Donut

25

Page 26: A Deep Dive into Open Source Android Development

Android Support Package

• Includes ViewPager, PagerTitleStrip, PagerTabStrip implementations

26

Page 27: A Deep Dive into Open Source Android Development

Android Support Package

• Back ports all Notification features from Jelly Bean to Donut

27

Page 28: A Deep Dive into Open Source Android Development

Android Support Package

• Back ports asynchronous background Loader support from Honeycomb to Donut

• Includes implementation for a memory-based LruCache

28

Page 29: A Deep Dive into Open Source Android Development

Android-MenuDrawer

https://github.com/SimonVT/android-menudrawer

29

Page 30: A Deep Dive into Open Source Android Development

Android-PullToRefresh

https://github.com/chrisbanes/Android-PullToRefresh

30

Page 31: A Deep Dive into Open Source Android Development

Polaris

https://github.com/cyrilmottier/Polaris

31

Page 32: A Deep Dive into Open Source Android Development

Crouton

https://github.com/keyboardsurfer/Crouton

32

Page 33: A Deep Dive into Open Source Android Development

Android-Query

http://code.google.com/p/android-query/

• Enables easier UI manipulation via method chaining

AQuery aq = new AQuery(view);        aq.id(R.id.icon) .image(R.drawable.icon) .visible() .clicked(this, "someMethod");aq.id(R.id.name) .text(content.getPname());aq.id(R.id.time) .text(FormatUtility.relativeTime( System.currentTimeMillis(), content.getCreate())) .visible();aq.id(R.id.desc) .text(content.getDesc()) .visible();

33

Page 34: A Deep Dive into Open Source Android Development

Caching and Networking

34

Page 35: A Deep Dive into Open Source Android Development

DiskLruCache

• Back ports the DiskLruCache from Ice Cream Sandwich to all versions of Android

https://github.com/JakeWharton/DiskLruCache

35

Page 36: A Deep Dive into Open Source Android Development

TwoLevelLruCache

• A two-level LRU cache composed of

• first level memory-based LruCache

• second level disk-based DiskLruCache

http://wuman.github.com/TwoLevelLruCache/

36

Page 37: A Deep Dive into Open Source Android Development

AndroidImageLoader

• Asynchronous image loading

• Images are downloaded and saved to TwoLevelLruCache via a pool of background threads

• Supports Bitmap transformations

http://wuman.github.com/AndroidImageLoader/

37

Page 38: A Deep Dive into Open Source Android Development

HttpResponseCache

• Back ports the persistent HttpResonseCache from Ice Cream Sandwich to all versions of Android

• Provides transparent and automatic persistent caching of HTTP and HTTPS requests that use the HttpUrlConnection class

https://github.com/candrews/HttpResponseCache

38

Page 39: A Deep Dive into Open Source Android Development

HTTP-Request

• Provides a simpler and easier interface to HttpURLConnection

• Uses method chaining

https://github.com/kevinsawicki/http-request

HttpRequest.get("http://google.com").receive(System.out);

39

Page 40: A Deep Dive into Open Source Android Development

Concurrency and Communication

40

Page 41: A Deep Dive into Open Source Android Development

Tape

• Provides a persistent task queue

http://square.github.com/tape/

TaskQueueadd()

peek()remove()

Client UI

Server

ServiceUploadTask UploadTask

41

Page 42: A Deep Dive into Open Source Android Development

Otto

• An event bus forked from EventBus of Google Guava targeting the Android platform

http://square.github.com/otto/

Bus

Fragment Fragment

FragmentFragment

Service Activity

Publish Subscribe

42

Page 43: A Deep Dive into Open Source Android Development

Data Representation and Processing

43

Page 44: A Deep Dive into Open Source Android Development

GSON

• POJO to JSON bi-directional conversion

• Built-in serializers and deserializers for primitive data types

• Supports extensions for complex objects

http://code.google.com/p/google-gson/

44

Page 45: A Deep Dive into Open Source Android Development

Jackson JSON Processor

• Streaming JSON parser and serializer

• Supposedly faster than the built-in ones

http://wiki.fasterxml.com/JacksonHome

45

Page 46: A Deep Dive into Open Source Android Development

Json-Path

• XPath- and jQuery-like selector for JSON

{ "store": {    "book": [       { "category": "reference",        "author": "Nigel Rees",        "title": "Sayings of the Century",        "price": 8.95      },      { "category": "fianceection",        "author": "Evelyn Waugh",        "title": "Sword of Honour",        "price": 12.99,        "isbn": "0-553-21311-3"      }    ],    "bicycle": {      "color": "red",      "price": 19.95    }  }}

String author = JsonPath.read(json, "$.store.book[1].author");

http://code.google.com/p/json-path/

46

Page 47: A Deep Dive into Open Source Android Development

jOOX - Java Object Oriented XML

• XML manipulative parser with selector syntax

• XML document creation

https://github.com/jOOQ/jOOX

47

Page 48: A Deep Dive into Open Source Android Development

JSoup

• HTML parser for Java using jQuery-like selector syntax

• Manipulates HTML elements, attributes and text

• Prettifies HTML

http://jsoup.org/

48

Page 49: A Deep Dive into Open Source Android Development

OrmLite

• ORM library that persists POJO to SQLite databases

http://ormlite.com/

public class SimpleData {

! @DatabaseField(generatedId = true)! int id;! @DatabaseField(index = true)! String string;! @DatabaseField! long millis;! @DatabaseField! Date date;! @DatabaseField! boolean even;

! SimpleData() {! ! // needed by ormlite! }

! public SimpleData(long millis) {! ! this.date = new Date(millis);! ! this.string = (millis % 1000) + "ms";! ! this.millis = millis;! ! this.even = ((millis % 2) == 0);! }}

49

Page 50: A Deep Dive into Open Source Android Development

Google Guava

• Many utilities to make Java development easier

http://code.google.com/p/guava-libraries/

50

Page 51: A Deep Dive into Open Source Android Development

Dependency Injection

51

Page 52: A Deep Dive into Open Source Android Development

AndroidAnnotations

• Runtime injection of Android views, extras, system services, resources, etc.

• Method annotation to indicate which thread to run in

• Method annotation to bind event listeners to events

http://androidannotations.org/

52

Page 53: A Deep Dive into Open Source Android Development

RoboGuice

• Runtime injection of Android views, system services, resources, POJO, etc.

http://code.google.com/p/roboguice/

53

Page 54: A Deep Dive into Open Source Android Development

Dagger

• Compile-time dependency injection (binding validation) for Android

• Not as feature-rich as other dependency injection frameworks but much faster

• API very similar to Google Guice

http://square.github.com/dagger/

†54

Page 55: A Deep Dive into Open Source Android Development

Testing

55

Page 56: A Deep Dive into Open Source Android Development

Android Test Framework

• Built-in Android Test Project support

• Use AndroidTestCase to test non-visual components

• Use Instrumentation to control visual parts of an application

• Command line monkey tool to send random events to device

56

Page 57: A Deep Dive into Open Source Android Development

Robotium

• Black-box testing framework for Android

• Improved readability of test cases compared to standard Instrumentation tests

• Handles multiple Android activities

http://code.google.com/p/robotium/

57

Page 58: A Deep Dive into Open Source Android Development

Robotium

http://www.vogella.com/articles/AndroidTesting/article.html

// Check that we have the right activitysolo.assertCurrentActivity("wrong activiy", SimpleActivity.class);

// Click a button which will start a new Activity// Here we use the ID of the string to find the right buttonsolo.clickOnButton(solo.getString(R.string.button1));// Validate that the Activity is the correct onesolo.assertCurrentActivity("wrong activiy", SimpleListActivity.class);

// Open the menusolo.sendKey(Solo.MENU);solo.clickOnText("Preferences");solo.clickOnText("User");solo.clearEditText(0);Assert.assertTrue(solo.searchText(""));solo.enterText(0, "http//:www.vogella.com");Assert.assertTrue(solo.searchText("http//:www.vogella.com"));solo.goBack();

58

Page 59: A Deep Dive into Open Source Android Development

Mochito

• Android mocking framework

• API makes mocking tests very readable

http://code.google.com/p/mockito/

public void makePurchase(CreditCardManager creditCard) { if (creditCard.getCardType() == CREDIT_CARD_VISA) { creditCard.makePurchase(500); }}

public void testMasterCardTransaction() { CreditCardManager creditCard = Mockito.mock(CreditCardManager.class); Mockito.when(creditCard.getCardType()) .thenReturn(CREDIT_CARD_MASTER);

makePurchase(creditCard);

Mockito.verify(creditCard).getCardType(); Mockito.verifyNoMoreInteractions(creditCard);}

59

Page 60: A Deep Dive into Open Source Android Development

Robolectric

• Allows JVM unit testing with the JUnit4 framework

• Reduces testing time from minutes to seconds

• Intercepts Android class loading and forward method bodies to shadow objects

http://pivotal.github.com/robolectric/

60

Page 61: A Deep Dive into Open Source Android Development

Robolectric

http://pivotal.github.com/robolectric/

// Test class for MyActivity@RunWith(RobolectricTestRunner.class)public class MyActivityTest { private Activity activity; private Button pressMeButton; private TextView results;

@Before public void setUp() throws Exception { activity = new MyActivity(); activity.onCreate(null); pressMeButton = (Button) activity.findViewById(R.id.press_me_button); results = (TextView) activity.findViewById(R.id.results_text_view); }

@Test public void shouldUpdateResultsWhenButtonIsClicked() throws Exception { pressMeButton.performClick(); String resultsText = results.getText().toString(); assertThat(resultsText, equalTo("Testing Android Rocks!")); }}

61

Page 62: A Deep Dive into Open Source Android Development

User Feedback

62

Page 63: A Deep Dive into Open Source Android Development

ACRA

• Sends a detailed bug or crash report to Google Docs

http://acra.ch/

63

Page 64: A Deep Dive into Open Source Android Development

BugSense/Crittercism

• Collects bug and crash reports

• Generates analytics for crash reports

• Supports fix versioning and notifications

http://www.bugsense.com/docs/android

64

Page 65: A Deep Dive into Open Source Android Development

Google Analytics for Android

• Collect user engagement data and generate real time analytics

• Demo

https://developers.google.com/analytics/devguides/collection/android/v2/

65

Page 66: A Deep Dive into Open Source Android Development

Bootstrap Project Generator

66

Page 67: A Deep Dive into Open Source Android Development

Android Bootstrap

• Includes a full working implementation of

• Android support package

• android-maven-plugin

• RoboGuice

• ActionBarSherlock

• http-request

• GSON

• Robotium

• API on Parse.comhttp://www.androidbootstrap.com/

67

Page 68: A Deep Dive into Open Source Android Development

AndroidKickstartR

• Includes a full working implementation of

• Android support package

• android-maven-plugin

• AndroidAnnotations

• ActionBarSherlock

• NineOldAndroids

• ACRA

http://androidkickstartr.com/

68

Page 69: A Deep Dive into Open Source Android Development

Tools

69

Page 70: A Deep Dive into Open Source Android Development

Android Asset Studio

• Demo

http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html

70

Page 71: A Deep Dive into Open Source Android Development

Subtle Patterns

• Collection of free tilable textured patterns

• Demo

http://subtlepatterns.com/

71

Page 72: A Deep Dive into Open Source Android Development

Charles

• HTTP proxy that enables developers to view all HTTP/HTTPS traffic between the device and the Internet

http://www.charlesproxy.com/

72

Page 73: A Deep Dive into Open Source Android Development

Others

73

Page 75: A Deep Dive into Open Source Android Development

Why open source?

75

Page 76: A Deep Dive into Open Source Android Development

Better App Quality

• Normally for various practical reasons we don’t open source the entire app

• Open source useful components within the app into a library

• More debugging for you

• The process of open sourcing forces you to rethink your architecture critically

76

Page 77: A Deep Dive into Open Source Android Development

Reciprocity

• A way to give back to the community

• Feels good

77

Page 78: A Deep Dive into Open Source Android Development

Portfolio Buildup

• GitHub, not LinkedIn

78

Page 79: A Deep Dive into Open Source Android Development

Grow Faster

• The more you engage in the open source community, the faster you learn and grow as a tech professional.

• The process of open sourcing encompasses almost all areas of software development.

79

Page 80: A Deep Dive into Open Source Android Development

Better World

• What goes around comes around

• The template for this Keynote presentation is derived from an open source project!

https://github.com/JakeWharton/AndroidDesignKeynoteTheme

80

Page 81: A Deep Dive into Open Source Android Development

How to Open Source

81

Page 82: A Deep Dive into Open Source Android Development

Disclaimer

What follows is based on the presentation “Effective Open Source” given by Jake Wharton and additionally, a more elaborate presentation based on my own experiences.

https://github.com/JakeWharton/EffectiveOpenSource

82

Page 83: A Deep Dive into Open Source Android Development

Component Identification

• Identify the part of your app that can be extracted out as an isolated, reusable component.

• The component should serve to do a focused task very well.

83

Page 84: A Deep Dive into Open Source Android Development

Code Abstraction

• Extract the component into a separate package or module and expose only via a small set of public API.

• This is kind of like refactoring. The app should continue to work as expected and the module should be treated just like an external dependency.

• Reiterate the refactoring step several times until

• the exposed public API is minimal and clean

• the client code has good readability

84

Page 85: A Deep Dive into Open Source Android Development

Library Project Directory Structure

• Make the module either an independent Java library project or an Android library project depending on whether Android resources are needed in the library.

• Follow a common directory structure as defined in a maven archetype:

• org.apache.maven.archetypes/maven-archetype-quickstart

• de.akquinet.android.archetypes/android-release

85

Page 86: A Deep Dive into Open Source Android Development

Android Library Project Directory Structure

library/ Android Library project

test/ Android Test project

samples/ Samples project (Android project)

README Project’s readme

LICENSE Project’s license

NOTICE Notices and attributions required by libraries that the project depends on

86

Page 87: A Deep Dive into Open Source Android Development

Java Library Project Directory Structure

library/ Java library project

library/src/main/java/ Java library sources

library/src/test/java/ Test sources

samples/ Samples project (Android project)

README Project’s readme

LICENSE Project’s license

NOTICE Notices and attributions required by libraries that the project depends on

87

Page 88: A Deep Dive into Open Source Android Development

Include Tests

• Good libraries are always bundled with tests. It gives people confidence and ensures quality.

• Tests are never enough. Write as many as you can think of.

• Ensure all the tests are passed.

88

Page 89: A Deep Dive into Open Source Android Development

Code Quality and Style

• Standardize code conventions.

• Enforce coding style at compile time by using Checkstyle for Java.

• This ensures that future patches have a consistent coding style.

89

Page 90: A Deep Dive into Open Source Android Development

Inclusion of Examples

• Add at least one or more working examples.

• Separate examples to showcase a specific aspect of the library.

90

Page 91: A Deep Dive into Open Source Android Development

Documentation

• Make sure all exposed public APIs have documentation that follow the javadoc syntax.

• Ensure that a javadoc jar is generated for each release. This is best achieved via the maven-javadoc-plugin.

91

Page 92: A Deep Dive into Open Source Android Development

README

• Write a README that follows the Markdown syntax.

• It should include the following sections:

• project description

• how to obtain the library

• snippets of quick start sample code

• external dependencies

• license information

http://daringfireball.net/projects/markdown/syntax

92

Page 93: A Deep Dive into Open Source Android Development

Git Ignore

• Always include a .gitignore file to keep the source tree clean. There are many samples online.

• In general exclude these files:

• IDE-specific files (Eclipse.gitignore)

• OS-specific files (OSX.gitignore)

• Android outputs and binaries (Android.gitignore)

• Java compiled classes and package files (Java.gitignore)

https://github.com/github/gitignore

93

Page 94: A Deep Dive into Open Source Android Development

Build Management Tool

• Use a build management tool to help people painlessly build your code without needing to know much about the library.

• Most Android people use Maven.

• Write the configuration file that works with your build management tool. In the case of Maven it should be pom.xml.

94

Page 95: A Deep Dive into Open Source Android Development

Maven

• Install the latest com.jayway.maven.plugins.android.generation2/android-maven-plugin.

• The packaging for the library project should be either jar or apklib, depending on whether your library is a Java project or an Android Library project.

• The packaging for the samples project should be apk.

http://code.google.com/p/maven-android-plugin/

95

Page 96: A Deep Dive into Open Source Android Development

Build with Maven

• Make sure the build management tool builds your project correctly.

• For Maven, you should be able to run the following without errors:

http://maven.apache.org/pom.html

$  mvn  clean  install

96

Page 97: A Deep Dive into Open Source Android Development

Continuous Integration

• Setup continuous integration. The simplest open source service is Travis. Have your GitHub repository linked to Travis by activating a hook.

• Write the configuration file .travis.yml.

https://travis-ci.org/

language:  java                                                                                                                                                                                                                                                                                                                        

notifications:    email:  false

before_install:    -­‐  wget  http://dl.google.com/android/android-­‐sdk_r20.0.3-­‐linux.tgz    -­‐  tar  -­‐zxf  android-­‐sdk_r20.0.3-­‐linux.tgz    -­‐  export  ANDROID_HOME=~/builds/username/projectName/android-­‐sdk-­‐linux    -­‐  export  PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-­‐tools    -­‐  android  list  sdk      -­‐  android  update  sdk  -­‐-­‐filter  1,2,3  -­‐-­‐no-­‐ui  -­‐-­‐force

97

Page 98: A Deep Dive into Open Source Android Development

Site Setup

• Setup a project web site.

• If you’re lazy and wish to use just the GitHub README, then the best alternative is the DocumentUp service.

• Configure Travis indicator and Google Analytics tracking for the web site.

http://documentup.com/

<script  src="https://raw.github.com/jeromegn/DocumentUp/master/documentup.min.js"></script><script>

DocumentUp.document({repo:  "wuman/AndroidImageLoader",name:  "AndroidImageLoader",twitter:  ["wuman"],issues:  true,travis:  true,google_analytics:  "UA-­‐4156099-­‐13"

});</script>

98

Page 99: A Deep Dive into Open Source Android Development

Issue Management

• GitHub has built-in issue management support, although many developers consider Google Code to be better for issue management.

• Quick triage of issues

99

Page 100: A Deep Dive into Open Source Android Development

Mailing List

• Setup a Google Groups mailing list for the project so that people can have a place for discussion.

100

Page 101: A Deep Dive into Open Source Android Development

Downloadable Published Packages

• Always make the released packages (usually jars) available for download. Use the com.github.github/downloads-maven-plugin.

• If your library has dependencies, it is best to release a separate jar with dependencies using the maven-assembly-plugin.

https://github.com/github/maven-plugins

101

Page 102: A Deep Dive into Open Source Android Development

Release to Sonatype and Maven Central

• Sonatype provides an OSS repository hosting service for free. You can deploy snapshots and releases so that they are also synced periodically to Maven Central.

• Follow their detailed guide.

• In the end you should be able to deploy your project with:

https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide

$  mvn  clean  package  release:prepare$  mvn  release:perform

102

Page 103: A Deep Dive into Open Source Android Development

Promote the Library

• Write a blog post to talk about the motivations behind the project, technical explanations and sample code snippets. Also direct readers to the project page.

• Publish your project everywhere: social networks, related communities, etc.

• Encourage people to use and contribute.

• Ask for feedback.

103

Page 104: A Deep Dive into Open Source Android Development

Join the Android Community

• Follow these smart people on Google+:

• Googlers

• Chet Haase, Dan Morrill, Dianne Hackborn, Jean-Baptiste Quéru, Jeff Sharkey, Kirill Grouchnikov, Matias Duarte, Patrick Dubroy, Reto Meier, Roman Nurik, Romain Guy, Tor Norbye, Xavier Ducrohet

• Android Developers

• Community

• Bob Lee, Chris Banes, Cyril Mottier, David Wu (shameless plug), Eric Burke, Jake Wharton, Jesse Wilson, Lars Vogel, Steve Kondik

104

Page 105: A Deep Dive into Open Source Android Development

Conclusion

105

Page 106: A Deep Dive into Open Source Android Development

106

Page 107: A Deep Dive into Open Source Android Development

“Only the children know what they are looking for.”

The Little Prince

106

Page 108: A Deep Dive into Open Source Android Development

Thank you

107

Page 109: A Deep Dive into Open Source Android Development

Q & A

108