Android development at mercari 2015

30
Android Development at Merari 2015 Tomoaki Imai @ Roppongi.aar #2 11/17/2015

Transcript of Android development at mercari 2015

Page 1: Android development at mercari 2015

Android Development at Merari 2015Tomoaki Imai @ Roppongi.aar #2 11/17/2015

Page 2: Android development at mercari 2015

Hi I’m Tomo(今井智章)twitter: tomoaki_imai github: tomoima525

Page 3: Android development at mercari 2015

Launched App in US market on September 2014

http://www.slideshare.net/tomoakiimai2/us-localization

Page 4: Android development at mercari 2015

What has changed / kept the same so far?

Page 5: Android development at mercari 2015

See our changes from KPT stand point

K eep

P roblem

T ry

What we keep doing since 2014

Issues we worked on

What we are currently working on

Page 6: Android development at mercari 2015

But before we go, Let’s talk about our current status

Page 7: Android development at mercari 2015

How we develop now• IDE

- Eclipse -> Android Studio

• Teams

- Tokyo & San Francisco

- 3 Android Engineers

• 1 source code, 2 product (US/JP)

• Powered by lots of external services…

Page 8: Android development at mercari 2015

See our changes from KPT stand point

K eep

P roblem

T ry

What we keep doing since 2014

Issues we worked on

What we are currently working on

Page 9: Android development at mercari 2015

Standup meeting• JST 11AM(PST 6PM), 10min, everyday

• Between Tokyo & San Francisco office

• The best way to track progress, issues

JP Office Hours

US Office Hours

6PM PST

11AM JST

Standup Meeting

Updating tickets Code reviews

Feedback

Page 10: Android development at mercari 2015

1 repository, 2 products• Both Apps have the same UI, but some features are

different

• Package names

• Targeting single language

US -> com.mercariapp.mercari JP -> com.kouzoh.mercari

US -> English JP -> Japanese

US JP

ex) Shipping

Page 11: Android development at mercari 2015

Set up flavors for targeted languages

def PACKAGE_NAME = "com.kouzoh.mercari"def PACKAGE_NAME_US = "com.mercariapp.mercari"

productFlavors { jp { minSdkVersion 9 applicationId PACKAGE_NAME manifestPlaceholders = [appName:"@string/app_name"] resConfigs "ja" } us { minSdkVersion 14 applicationId PACKAGE_NAME_US resConfigs "en" } }

Page 12: Android development at mercari 2015

Set up flavors for targeted languages

def PACKAGE_NAME = "com.kouzoh.mercari"def PACKAGE_NAME_US = "com.mercariapp.mercari"

productFlavors { jp { minSdkVersion 9 applicationId PACKAGE_NAME manifestPlaceholders = [appName:"@string/app_name"] resConfigs "ja" } us { minSdkVersion 14 applicationId PACKAGE_NAME_US resConfigs "en" } }

Change package name

Page 13: Android development at mercari 2015

Set up flavors for targeted languages

def PACKAGE_NAME = "com.kouzoh.mercari"def PACKAGE_NAME_US = "com.mercariapp.mercari"

productFlavors { jp { minSdkVersion 9 applicationId PACKAGE_NAME manifestPlaceholders = [appName:"@string/app_name"] resConfigs "ja" } us { minSdkVersion 14 applicationId PACKAGE_NAME_US resConfigs "en" } }

Apply targeted language

Page 14: Android development at mercari 2015

Support older SDK versionImporting a library which min SDK version is more recent than App's min SDK version fails with an error

Error:Execution failed for task ':Tasks:processDebugManifest'.> Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smaller than version 10 declared in library /Users/tomo/Projects/mercari/Tasks/build/intermediates/exploded-aar/com.aviary.android/aviary/21.0.2/AndroidManifest.xml Suggestion: use tools:overrideLibrary=“com.aviary.android.feather.library" to force usage

ex) App’s min SDK -> 9 Aviary’s min SDK -> 10

Page 15: Android development at mercari 2015

Support older SDK version

Use overridelibrary marker to avoid the build error

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:installLocation="auto"> <uses-sdk tools:overrideLibrary=“com.aviary.android.feather.library”…

Page 16: Android development at mercari 2015

See our changes from KPT stand point

K eep

P roblem

T ry

What we keep doing since 2014

Issues we worked on

What we are currently working on

Page 17: Android development at mercari 2015

Word Translations• Transifix was used to prevent omission of

translationTranslation

TeamEngineer

3. Translate wordings

5. Push string.xml

4. Pull string.xml

2. Push string.xml

1. Pull string.xml

string.xml should be updated to the latest

to avoid conflict

Page 18: Android development at mercari 2015

Word Translations• However, too much time was taken for

changing one wordTranslation

TeamEngineer

3. Translate wordings

5. Push string.xml

4. Pull string.xml

2. Push string.xml

1. Pull string.xml

string.xml should be updated to the latest

to avoid conflict

Page 19: Android development at mercari 2015

How we changed translation process

• Wordings are decided on Redmine

• Created a check list to prevent omission

Translation Team

Engineer

Push string.xml

Product Manager

Page 20: Android development at mercari 2015

Analyzation• External analysis tools are easy way to collect

logs and visualize data

Page 21: Android development at mercari 2015

Analyzation• External analysis tools are easy way to collect

logs and visualize data

• On the other hand…

- Not suitable for analyzing into deeper meanings

- Data are stocked in each analysis tools

Page 22: Android development at mercari 2015

In-house Analysis platform : Pascal

• Now every logs are fully accessible from BQ

Page 23: Android development at mercari 2015

See our changes from KPT stand point

K eep

P roblem

T ry

What we keep doing since 2014

Issues we worked on

What we are currently working on

Page 24: Android development at mercari 2015

Reducing the size of App• Modularize functions- Set flavor to dependencies

- Split codes by flavor

Page 25: Android development at mercari 2015

Reducing the size of App• Look over the size of images

• Remove unused libraries, methods…

4.6MB→721KB

Page 26: Android development at mercari 2015

Reducing the size of App

• Size went down by 25%!!16.5 MB -> 12.4 MB

• Though did not raise the install rate… :-(

Page 27: Android development at mercari 2015

In-house AB testing• Apptimize for mobile AB Testing

• Some issues

- Can configure AB test programatically

- Segment specific users from GUI

- Analyzing data in detail was not so easy

- Not enough for complex testing including server-side

- Wanted to control A/B test from our server

Page 28: Android development at mercari 2015

In-house AB testing{ result: "OK", data: { experiment_results: [ { name: "003_buy_button_colors", variant: 3, metadata: { color : blue} } ] },

Request testing data

Page 29: Android development at mercari 2015

In-house AB testing{ result: "OK", data: { experiment_results: [ { name: "003_buy_button_colors", variant: 3, metadata: { color : blue} } ] },

Send testing result to Pascal

ABTest.runTest(ABTestList.BUY_BUTTON.getTestName(), new ABTest.ABTestRunner() { @Override public void run(ABTestContent content) { int id = content.getVariant(); switch (id) { . . .}

Page 30: Android development at mercari 2015

See our changes from KPT stand point

K eep

P roblem

T ry

Daily standup meeting 1 source code 2 products

Changed translation flow Developed in-house Analysis tool

Reducing the size of App Developing in-house AB Testing tool