head first android apps dev tools

96
A Brain-Friendly Guide Android App Dev Tools Head First MOPCON shakalaca

Upload: shaka-huang

Post on 06-May-2015

2.880 views

Category:

Technology


5 download

DESCRIPTION

@ MOPCON talks about genymotion & gradle

TRANSCRIPT

Page 1: Head first android apps dev tools

A Brain-Friendly Guide

Android App Dev ToolsHead First

MOPCON shakalaca

Page 2: Head first android apps dev tools

Hello ! I’m Shaka

• CTO @ SmarTapper Co., Ltd.

• Consultant @ SleepNOVA, Inc.

http://about.me/shakalaca

Page 3: Head first android apps dev tools

Today’s topic

• Genymotion (101 session)

• w/ demo

• Gradle (201 session)

• w/ sample scripts

• Android Studio (201 session)

Page 4: Head first android apps dev tools

Genymotion

Page 5: Head first android apps dev tools

Myth : App development on Android is

FREE (or cheaper) than iOS

Page 6: Head first android apps dev tools

Really ?

• Don’t have to buy a Mac ... you’ll buy one eventually (look at me)

• There’s an emulator... you really use it ?

• Android phone is way cheaper than iPhone !... you mean those in the next page ?

Page 7: Head first android apps dev tools

http://goo.gl/tt8Rp

Page 8: Head first android apps dev tools

There’s no such thing as free lunch ..

Page 9: Head first android apps dev tools

Problems with emulator

• No play services (sort of)

• No camera

• “telnet localhost 5554” doesn’t make sense

• f5g really slow in arm based emulator

Page 10: Head first android apps dev tools

Survival guide !

• Intel x86 Emulator Accelerator

• Snapshot or Host GPU

Page 11: Head first android apps dev tools

Buy real phone(s) !

• For platform/screen specific issues

• Nexus is enough ...

• ... I’m not sure

Page 12: Head first android apps dev tools

Developers’ pain

https://www.youtube.com/watch?v=cOUK0JZvbwI

Page 13: Head first android apps dev tools

It’s a bird.. It’s a plane.. It’s Genymotion !

http://www.genymotion.com

Page 14: Head first android apps dev tools

Is it the one ?

• Android x86 emulator based on AndroVM open source project

• http://androvm.org/

• (In some case) faster than SDK emulator

• Multi-platform

• IDE plugins

Page 15: Head first android apps dev tools

Good for ..

• Test applications

• Fast & cable free

• Screencast

• Use your favorite software (for me: QuickTime for OS X)

Page 16: Head first android apps dev tools

And gamers love it ..

https://www.google.com.tw/search?q=神魔之塔+genymotion

Page 17: Head first android apps dev tools

Features (HW)

• Camera

• GPS

• Battery

• Speaker / Microphone

• Rotation

• Physical keys

Page 18: Head first android apps dev tools

Features (SW)

• API 16 & 17, 18 in preview

• Play store (service)

• Root access

• OpenGL

• Virtual keys

• Full screen (F11)

Page 19: Head first android apps dev tools

Resolution

• 1280x800

• 720x1080

• 1080x1920

• 480x800

• 1024x600

• Customizable

Page 20: Head first android apps dev tools

Screen size• Nexus One (3.7”)

• Nexus S (4”)

• Galaxy Nexus (4.65”)

• Nexus 7 (7”)

• Galaxy S4/HTC One/Xperia Z (5”)

• WSVGA Tablet (7”)

• WXGA Tablet (10.1”)

Page 21: Head first android apps dev tools

Demo time !

Page 22: Head first android apps dev tools

Tips !

Page 23: Head first android apps dev tools

Control• Buttons

• Rotation: ctrl + F11

• Full screen: F11

• Gestures

• Zoom: ctrl + mouse left/right

• Tile: ctrl + mouse up/down

• Rotate: ctrl + shift + mouse left/right

Page 24: Head first android apps dev tools

Launch from CLI

• VBoxManage list vms • "Galaxy Nexus - 4.2.2 - with Google Apps - API 17 -

720x1280" {fbbd7f3e-188d-4a9b-8cdc-5b70c1554f5b}

• player --vm-name <VM name/id> • /Application/Genymotion.app/Contents/MacOS/player --vm-name "Galaxy

Nexus - 4.2.2 - with Google Apps - API 17 - 720x1280"

Page 25: Head first android apps dev tools

genyshell• Example: Setup gps to somewhere in Taipei

• Content of file “gps_loc”

• gps setstatus enabled

• gps setlatitude 25.03

• gps setlongitude 121.54

• Command to apply configurations

• genyshell -f gps_loc

Page 26: Head first android apps dev tools

Change resolution• Dummy way: Set in menu before launch

• Geek way: Set through adb

• adb shell am display-size 800x480

• adb shell am display-density 240

• adb shell am display-size reset

• For 4.3+

• adb shell wm size 800x480

• adb shell wm density 240

Page 27: Head first android apps dev tools

Use my scripts :p

• adb root

• https://gist.github.com/shakalaca/6716635

• screenshot

• https://gist.github.com/shakalaca/6822570

• migration tool

• https://github.com/shakalaca/GenymotionVMMigrationTool

Page 28: Head first android apps dev tools

Gradle enabled android project

Page 29: Head first android apps dev tools

What is gradle ?Gradle is build automation evolved. Gradle can automate the building, testing, publishing, deployment and more of software packages or other types of projects such as generated static websites, generated documentation or indeed anything else. !Gradle combines the power and flexibility of Ant with the dependency management and conventions of Maven into a more effective way to build. Powered by a Groovy DSL and packed with innovation, Gradle provides a declarative way to describe all kinds of builds through sensible defaults. Gradle is quickly becoming the build system of choice for many open source projects, leading edge enterprises and legacy automation challenges.

- http://www.gradle.org/

Page 30: Head first android apps dev tools

.. short version

An open source build system that combines the power of Ant & Maven but easy to use

Page 31: Head first android apps dev tools

Why (google wants to change the

build system to) gradle ?

• My guess..

• Simplify and unify project dependency management in IDE & CLI

• Think about Eclipse & ant (ci server)

• Android Studio is coming !BETA

Page 32: Head first android apps dev tools

Should I use it ?

• For small project

• Easy to convert

• For large project

• Worth trying if it can simplify the configurations (dependency)

• For project with variants

• Time for better management tool

Page 33: Head first android apps dev tools

Will it blow up my projects ?

It’s 2013 now, you should have SCM … right ?

Page 34: Head first android apps dev tools

How gradle works ?• Lifecycle

• Initialization

• Configuration

• Execution

• Build scripts

• build.gradle

• settings.gradle (optional)

• gradle.properties (optional)

http://www.gradle.org/docs/current/userguide/build_lifecycle.html

Page 35: Head first android apps dev tools

Command

• gradle <task name>

• tasks

• clean

• assemble

• assembleRelease

• assembleDebug

• aR / asD

Page 36: Head first android apps dev tools

Android integration

• gradle android plugin

• http://tools.android.com/tech-docs/new-build-system/

• output

• <project>/build/apk/

Page 37: Head first android apps dev tools

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Page 38: Head first android apps dev tools
Page 39: Head first android apps dev tools

Eclipse project

Page 40: Head first android apps dev tools
Page 41: Head first android apps dev tools

Dependencies

• compile files(‘libs/android-support-v4.jar’)

• compile fileTree(dir: ‘libs’, include: ‘*.jar’)

• compile ‘com.android.support:support-v4:18.0.0’

Page 42: Head first android apps dev tools

Android packages!

• com.android.support:support-v4:18.0.0

• com.android.support:appcompat-v7:18.0.0

• com.android.support:gridlayout-v7:18.0.0

• com.android.support:support-v7-mediarouter:18.0.0

• com.android.support:support-v13:18.0.0

• com.google.android.gms:play-services:3.2.65

Page 43: Head first android apps dev tools

defaultConfig

• versionCode

• versionName

• minSdkVersion

• targetSdkVersion

• packageName

• signingConfig

• proguardFile

• proguardFiles

• testPackageName

• testInstrumentationRunner

Page 44: Head first android apps dev tools

Happy building

• Put build.gradle in project directory

• Build: gradle assemble

• build/apk/

• Install: gradle installDebug or gradle installRelease

Page 45: Head first android apps dev tools

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Page 46: Head first android apps dev tools

Project structure

Page 47: Head first android apps dev tools

app

Page 48: Head first android apps dev tools

include library project

Page 49: Head first android apps dev tools

ActionBarSherlock

Page 50: Head first android apps dev tools

Happy building

• Put build.gradle & settings.gradle in app project directory

• Put build.gradle in library project directory

• Build: gradle assemble

• build/apk/

Page 51: Head first android apps dev tools

settings.gradle

• Used in multi-project hierarchy

• Define projects to be used in build

Page 52: Head first android apps dev tools

settings.gradle

Page 53: Head first android apps dev tools

er.. no direct way ?

Page 54: Head first android apps dev tools
Page 55: Head first android apps dev tools
Page 56: Head first android apps dev tools

Known issue

• Library project is always “release” build

• define your own debug flags..

• <application /> in AndroidManifest.xml

Page 57: Head first android apps dev tools

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Page 58: Head first android apps dev tools
Page 59: Head first android apps dev tools

Build types

• default 2 types: debug & release

• for debugging & signing

Page 60: Head first android apps dev tools

Build types

• debuggable

• jniDebugBuild

• renderscriptDebugBuild

• renderscriptOptimLevel

• packageNameSuffix

• versionNameSuffix

• signingConfig

• zipAlign

• runProguard

• proguardFile

• proguardFiles

Page 61: Head first android apps dev tools

Tips

• Save your gradle.properties in ~/.gradle/

• .. If you work alone

Page 62: Head first android apps dev tools
Page 63: Head first android apps dev tools

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Page 64: Head first android apps dev tools

Build variant

• Creating different versions of same application

• free/paid

• multi-apk

• Build Variant = Build Type + Product Flavor

Page 65: Head first android apps dev tools

Product flavor

• Defines a customised version of application build by the project

• Free / Paid

• Amazon / Play Store / blah store

• Same type as defaultConfig

Page 66: Head first android apps dev tools
Page 67: Head first android apps dev tools

Build

• gradle assemblePaid

• gradle aPD / gradle aPR

• gradle assembleFree

• gradle aFD / gradle aFR

Page 68: Head first android apps dev tools
Page 69: Head first android apps dev tools

One more thing..

Page 70: Head first android apps dev tools

gradle wrapper

• Setup gradle automatically

• $ANDROID_HOME/tools/templates/gradle/wrapper/

• for gradle 1.7+

• execute “gradle wrapper”

Page 71: Head first android apps dev tools
Page 72: Head first android apps dev tools

Compatible with older version of gradle

• change gradleVersion

• run ‘./gradlew wrapper’

Page 73: Head first android apps dev tools

Summary

• Simple android project

• Sign release key

• Run proguard

• Build variants

• Wrapper

Page 74: Head first android apps dev tools

All samples are here

http://github.com/shakalaca/learning_gradle_android

Page 75: Head first android apps dev tools

Maven repository

Page 76: Head first android apps dev tools

Why & How ?

• Time is money

• Use aar instead of re-compiling everything

• aar: Binary distribution of an Android Library Project

• http://tools.android.com/tech-docs/new-build-system/aar-format

Page 77: Head first android apps dev tools

Project layout

Page 78: Head first android apps dev tools

root-build.gradle

Page 79: Head first android apps dev tools

library/build.gradle

Page 80: Head first android apps dev tools

project/build.gradle

• archivesBaseName

• version

Page 81: Head first android apps dev tools

app/build.gradle

Page 82: Head first android apps dev tools

How

• deploy library

• ./gradlew deploy

• use local repository

• ./gradlew as -PuseRepo

Page 83: Head first android apps dev tools
Page 84: Head first android apps dev tools

Performance boost

• in ~/.gradle/gradle.properties

• org.gradle.daemon=true

• org.gradle.parallel=true (be careful)

• stop the daemon

• gradle --stop

Page 85: Head first android apps dev tools

Refresh cache

• --refresh-dependencies

• stay up-to-date (?)

http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:cache_command_line_options

Page 86: Head first android apps dev tools

References• Documentation

• http://tools.android.com/tech-docs/new-build-system (Guide / Samples)

• http://www.gradle.org/documentation

• Forums

• https://plus.google.com/u/0/communities/114791428968349268860

• https://groups.google.com/forum/#!forum/adt-dev

• http://stackoverflow.com/questions/tagged/gradle

• Tool

• http://gradleplease.appspot.com/

Page 87: Head first android apps dev tools

Or follow me @

• G+

• http://google.com/profiles/shakalaca

• Blog

• http://23pin.logdown.com

• Taipei GDG (G+ Community)

• https://plus.google.com/communities/100566773212437391191

Page 88: Head first android apps dev tools

Q & A

Page 89: Head first android apps dev tools

Bonus !

Page 90: Head first android apps dev tools
Page 91: Head first android apps dev tools

Remove jars in output apk

Page 92: Head first android apps dev tools

Remove jars in certain build type

Page 93: Head first android apps dev tools

Launch after install

Page 94: Head first android apps dev tools

Move out and rename output apk files

• android.applicationVariant.all { variant -> variant.assemble.doLast { do_the_magic } }

• variant.zipAlign

• true: extra variant.outputFile

• false: variant.packageApplication.outputFile

• https://gist.github.com/shakalaca/6422811

Page 95: Head first android apps dev tools

NDK support

• https://gist.github.com/pboos/5802233#file-ndk-build-gradle

Page 96: Head first android apps dev tools

For other issues ..

• Google Maps Android API v2 gradle integration

• Different resources for build types

• http://23pin.logdown.com/posts/144771-google-maps-android-api-v2-gradle-integration

• Gradle and GCM project integration

• Difference in AndroidManifest.xml

• http://23pin.logdown.com/posts/144770-gradle-and-gcm-project-integration