W4
Session	
  
4/15/2015	
  11:00	
  AM	
  
	
  
	
  
	
  
"Mastering Android
Development Tools"
	
  
Presented by:
Luke Wallace
Bottle Rocket	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
Brought	
  to	
  you	
  by:	
  
	
  
	
  
	
  
340	
  Corporate	
  Way,	
  Suite	
  300,	
  Orange	
  Park,	
  FL	
  32073	
  
888-­‐268-­‐8770	
  ·∙	
  904-­‐278-­‐0524	
  ·∙	
  sqeinfo@sqe.com	
  ·∙	
  www.sqe.com
Luke Wallace
Bottle Rocket
Luke Wallace leads all Android development at Bottle Rocket. Luke wrote
several of the first Android apps for Bottle Rocket and continues to oversee every
project to maintain quality and push the bounds of what’s possible. A strong
proponent of the Android platform, he is an invaluable resource for getting the
Android perspective on news and trends within the industry. With his technical
knowledge and humor, Luke loves educating people about Android.	
  
4/8/15	

1	

Mastering Android
Development Tools
Luke Wallace
@lukeluca
Introduction
4/8/15	

2	

Some of our Android Apps
Agenda
•  Storing Code
•  Writing Code
•  Using Libraries
•  Checking Code
•  Building Code
•  Testing Code
•  Deploying Code
4/8/15	

3	

What’s the point?
BUT!	

ShakespeareMichelangelo
Use Good Tools
•  Stuff You Know
•  Eclipse
•  Android Studio
•  9-Patch Generator
•  Lint Rules
•  Don’t use a typewriter to paint
4/8/15	

4	

Store code
•  Bitbucket
•  Cloud-based Git repository
•  Team-based Access Control
•  Cheap
Git branches
4/8/15	

5	

Git branches - git flow
origin/develop
(progress builds)
origin/release/1.0
origin/release/1.1
[origin/]feature/x
Writing Code - Eclipse
•  Traditional method of Android development
•  Windows, Mac, and Linux support
•  Lots of existing support
•  XML layout support is okay, better than v1.0
•  Old and Busted now
•  No further development
•  Dev site says to stop using it now!
4/8/15	

6	

Writing Code - Android Studio
•  New Standard
- reached 1.0 late 2014
•  Still in heavy development
•  Migration is getting easier
•  We’re using it on new
projects, and migrating
old projects too it as time
permits.
Checking Code - Lint
•  Command Line tool
•  Part of Android Developer Tools
•  Lots of support from the Android team
•  Our rule: No Warnings!
4/8/15	

7	

Custom Lint Rules
•  Little Documentation
•  Lots of setup (for the first one)
•  Few examples (beyond the built in ones)
•  android.googlesource.com/platform/sdk/
[build]/lint/libs/lint_checks/src/
•  Codify your internal rules
•  Tip: 3-line Custom Manifest
Libraries
•  Android Support Library
•  ViewPager
•  DrawerLayout
•  ActionBarSherlock ActionBarCompat
•  Square Libraries (OkHttp, Picasso, etc.)
•  Ion, Volley, etc.
•  Home Grown (BRShared)
4/8/15	

8	

Analyze
•  Charles
•  HTTP proxy - analyze requests & responses
•  supports HTTPS with some additional effort
Analyze
•  Hierarchy Viewer
4/8/15	

9	

One Weird Trick!
Add ViewServer to use Hierarchy Viewer on real
devices!
Continuous Integration
•  Jenkins
•  Every 15 minutes (random per project)
•  Check for new code
•  Build (using Ant or gradle)
•  DO IT!
4/8/15	

10	

Jenkins - Multiple Builds
•  Debug
•  Release
•  Staging Servers
•  Free
•  Paid
•  Amazon Appstore
•  Google Play
Jenkins - Multiple Builds
•  use your build.xml to change config URL or
other parameters at build time.
<property environment="env"/>	
<target name="preprocess-build-number" if="env.BUILD_NUMBER">	
<echo>Setting build number: ${env.BUILD_NUMBER}</echo>	
<replaceregexp 	
file="res/values/build_config.xml"	
match="build_number&quot;&gt;.*?&lt;"	
replace="build_number&quot;&gt;${env.BUILD_NUMBER}&lt;"	
/>	
</target>
4/8/15	

11	

Jenkins - Multiple Builds
•  use your build.xml to change config URL or
other parameters at build time.
<target name="preprocess-release" if="build.target.release">	
<echo>Configuring build_config.xml for a release build</echo> 	
<replaceregexp 	
file="res/values/build_config.xml" 	
match="version_name&quot;&gt;.*?&lt;" 	
replace="version_name&quot;&gt;@string/version_name_production&lt;"	
/>	
</target>	
Jenkins - Multiple Builds
•  Gradle build system makes this easier
4/8/15	

12	

Jenkins + Lint
Automated Testing
•  We have it, barely
•  JUnit + Android extensions
•  AndroidTestCase
•  monkeyrunner
•  Robolectric
4/8/15	

13	

Real Devices
Automatic Crash Collection
ACRA - Application Crash Reporting for Android
•  http://acra.ch
•  Sends crashes to Google Docs
•  Can send reports directly to your backend, or
several hosted options.
4/8/15	

14	

Emulators
•  Google Provided Emulator
•  x86
•  Genymotion - $$$ for commercial use
Google Play Dev Portal
Alpha - Beta - Production %
Get Optimization Tips
Analyze common devices
Respond to Reviews
4/8/15	

15	

Google Play Dev Portal
Google Play Dev Portal
User Statistics
4/8/15	

16	

Google Play Dev Portal
Google Play Dev Portal
4/8/15	

17	

Google Play Dev Portal
Reviews
Questions?

Mastering Android Development Tools

  • 1.
      W4 Session   4/15/2015  11:00  AM         "Mastering Android Development Tools"   Presented by: Luke Wallace Bottle Rocket                 Brought  to  you  by:         340  Corporate  Way,  Suite  300,  Orange  Park,  FL  32073   888-­‐268-­‐8770  ·∙  904-­‐278-­‐0524  ·∙  sqeinfo@sqe.com  ·∙  www.sqe.com
  • 2.
    Luke Wallace Bottle Rocket LukeWallace leads all Android development at Bottle Rocket. Luke wrote several of the first Android apps for Bottle Rocket and continues to oversee every project to maintain quality and push the bounds of what’s possible. A strong proponent of the Android platform, he is an invaluable resource for getting the Android perspective on news and trends within the industry. With his technical knowledge and humor, Luke loves educating people about Android.  
  • 3.
  • 4.
    4/8/15 2 Some of ourAndroid Apps Agenda •  Storing Code •  Writing Code •  Using Libraries •  Checking Code •  Building Code •  Testing Code •  Deploying Code
  • 5.
    4/8/15 3 What’s the point? BUT! ShakespeareMichelangelo UseGood Tools •  Stuff You Know •  Eclipse •  Android Studio •  9-Patch Generator •  Lint Rules •  Don’t use a typewriter to paint
  • 6.
    4/8/15 4 Store code •  Bitbucket • Cloud-based Git repository •  Team-based Access Control •  Cheap Git branches
  • 7.
    4/8/15 5 Git branches -git flow origin/develop (progress builds) origin/release/1.0 origin/release/1.1 [origin/]feature/x Writing Code - Eclipse •  Traditional method of Android development •  Windows, Mac, and Linux support •  Lots of existing support •  XML layout support is okay, better than v1.0 •  Old and Busted now •  No further development •  Dev site says to stop using it now!
  • 8.
    4/8/15 6 Writing Code -Android Studio •  New Standard - reached 1.0 late 2014 •  Still in heavy development •  Migration is getting easier •  We’re using it on new projects, and migrating old projects too it as time permits. Checking Code - Lint •  Command Line tool •  Part of Android Developer Tools •  Lots of support from the Android team •  Our rule: No Warnings!
  • 9.
    4/8/15 7 Custom Lint Rules • Little Documentation •  Lots of setup (for the first one) •  Few examples (beyond the built in ones) •  android.googlesource.com/platform/sdk/ [build]/lint/libs/lint_checks/src/ •  Codify your internal rules •  Tip: 3-line Custom Manifest Libraries •  Android Support Library •  ViewPager •  DrawerLayout •  ActionBarSherlock ActionBarCompat •  Square Libraries (OkHttp, Picasso, etc.) •  Ion, Volley, etc. •  Home Grown (BRShared)
  • 10.
    4/8/15 8 Analyze •  Charles •  HTTPproxy - analyze requests & responses •  supports HTTPS with some additional effort Analyze •  Hierarchy Viewer
  • 11.
    4/8/15 9 One Weird Trick! AddViewServer to use Hierarchy Viewer on real devices! Continuous Integration •  Jenkins •  Every 15 minutes (random per project) •  Check for new code •  Build (using Ant or gradle) •  DO IT!
  • 12.
    4/8/15 10 Jenkins - MultipleBuilds •  Debug •  Release •  Staging Servers •  Free •  Paid •  Amazon Appstore •  Google Play Jenkins - Multiple Builds •  use your build.xml to change config URL or other parameters at build time. <property environment="env"/> <target name="preprocess-build-number" if="env.BUILD_NUMBER"> <echo>Setting build number: ${env.BUILD_NUMBER}</echo> <replaceregexp file="res/values/build_config.xml" match="build_number&quot;&gt;.*?&lt;" replace="build_number&quot;&gt;${env.BUILD_NUMBER}&lt;" /> </target>
  • 13.
    4/8/15 11 Jenkins - MultipleBuilds •  use your build.xml to change config URL or other parameters at build time. <target name="preprocess-release" if="build.target.release"> <echo>Configuring build_config.xml for a release build</echo> <replaceregexp file="res/values/build_config.xml" match="version_name&quot;&gt;.*?&lt;" replace="version_name&quot;&gt;@string/version_name_production&lt;" /> </target> Jenkins - Multiple Builds •  Gradle build system makes this easier
  • 14.
    4/8/15 12 Jenkins + Lint AutomatedTesting •  We have it, barely •  JUnit + Android extensions •  AndroidTestCase •  monkeyrunner •  Robolectric
  • 15.
    4/8/15 13 Real Devices Automatic CrashCollection ACRA - Application Crash Reporting for Android •  http://acra.ch •  Sends crashes to Google Docs •  Can send reports directly to your backend, or several hosted options.
  • 16.
    4/8/15 14 Emulators •  Google ProvidedEmulator •  x86 •  Genymotion - $$$ for commercial use Google Play Dev Portal Alpha - Beta - Production % Get Optimization Tips Analyze common devices Respond to Reviews
  • 17.
    4/8/15 15 Google Play DevPortal Google Play Dev Portal User Statistics
  • 18.
    4/8/15 16 Google Play DevPortal Google Play Dev Portal
  • 19.
    4/8/15 17 Google Play DevPortal Reviews Questions?