head first android apps dev tools

Post on 06-May-2015

2.880 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

@ MOPCON talks about genymotion & gradle

TRANSCRIPT

A Brain-Friendly Guide

Android App Dev ToolsHead First

MOPCON shakalaca

Hello ! I’m Shaka

• CTO @ SmarTapper Co., Ltd.

• Consultant @ SleepNOVA, Inc.

http://about.me/shakalaca

Today’s topic

• Genymotion (101 session)

• w/ demo

• Gradle (201 session)

• w/ sample scripts

• Android Studio (201 session)

Genymotion

Myth : App development on Android is

FREE (or cheaper) than iOS

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 ?

http://goo.gl/tt8Rp

There’s no such thing as free lunch ..

Problems with emulator

• No play services (sort of)

• No camera

• “telnet localhost 5554” doesn’t make sense

• f5g really slow in arm based emulator

Survival guide !

• Intel x86 Emulator Accelerator

• Snapshot or Host GPU

Buy real phone(s) !

• For platform/screen specific issues

• Nexus is enough ...

• ... I’m not sure

Developers’ pain

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

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

http://www.genymotion.com

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

Good for ..

• Test applications

• Fast & cable free

• Screencast

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

And gamers love it ..

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

Features (HW)

• Camera

• GPS

• Battery

• Speaker / Microphone

• Rotation

• Physical keys

Features (SW)

• API 16 & 17, 18 in preview

• Play store (service)

• Root access

• OpenGL

• Virtual keys

• Full screen (F11)

Resolution

• 1280x800

• 720x1080

• 1080x1920

• 480x800

• 1024x600

• Customizable

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”)

Demo time !

Tips !

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

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"

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

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

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

Gradle enabled android project

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/

.. short version

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

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

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

Will it blow up my projects ?

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

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

Command

• gradle <task name>

• tasks

• clean

• assemble

• assembleRelease

• assembleDebug

• aR / asD

Android integration

• gradle android plugin

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

• output

• <project>/build/apk/

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Eclipse project

Dependencies

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

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

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

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

defaultConfig

• versionCode

• versionName

• minSdkVersion

• targetSdkVersion

• packageName

• signingConfig

• proguardFile

• proguardFiles

• testPackageName

• testInstrumentationRunner

Happy building

• Put build.gradle in project directory

• Build: gradle assemble

• build/apk/

• Install: gradle installDebug or gradle installRelease

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Project structure

app

include library project

ActionBarSherlock

Happy building

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

• Put build.gradle in library project directory

• Build: gradle assemble

• build/apk/

settings.gradle

• Used in multi-project hierarchy

• Define projects to be used in build

settings.gradle

er.. no direct way ?

Known issue

• Library project is always “release” build

• define your own debug flags..

• <application /> in AndroidManifest.xml

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Build types

• default 2 types: debug & release

• for debugging & signing

Build types

• debuggable

• jniDebugBuild

• renderscriptDebugBuild

• renderscriptOptimLevel

• packageNameSuffix

• versionNameSuffix

• signingConfig

• zipAlign

• runProguard

• proguardFile

• proguardFiles

Tips

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

• .. If you work alone

Step by step tutorial

• Basic

• Dependency

• Sign / Proguard

• Variant

Build variant

• Creating different versions of same application

• free/paid

• multi-apk

• Build Variant = Build Type + Product Flavor

Product flavor

• Defines a customised version of application build by the project

• Free / Paid

• Amazon / Play Store / blah store

• Same type as defaultConfig

Build

• gradle assemblePaid

• gradle aPD / gradle aPR

• gradle assembleFree

• gradle aFD / gradle aFR

One more thing..

gradle wrapper

• Setup gradle automatically

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

• for gradle 1.7+

• execute “gradle wrapper”

Compatible with older version of gradle

• change gradleVersion

• run ‘./gradlew wrapper’

Summary

• Simple android project

• Sign release key

• Run proguard

• Build variants

• Wrapper

All samples are here

http://github.com/shakalaca/learning_gradle_android

Maven repository

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

Project layout

root-build.gradle

library/build.gradle

project/build.gradle

• archivesBaseName

• version

app/build.gradle

How

• deploy library

• ./gradlew deploy

• use local repository

• ./gradlew as -PuseRepo

Performance boost

• in ~/.gradle/gradle.properties

• org.gradle.daemon=true

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

• stop the daemon

• gradle --stop

Refresh cache

• --refresh-dependencies

• stay up-to-date (?)

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

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/

Or follow me @

• G+

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

• Blog

• http://23pin.logdown.com

• Taipei GDG (G+ Community)

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

Q & A

Bonus !

Remove jars in output apk

Remove jars in certain build type

Launch after install

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

NDK support

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

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

top related