SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Android Development
at Merari 2015
Tomoaki Imai @ Roppongi.aar #2 11/17/2015
Hi I’m Tomo(今井智章)
twitter: tomoaki_imai
github: tomoima525
Launched App in US market
on September 2014
http://www.slideshare.net/tomoakiimai2/us-localization
What has
changed / kept
the same so
far?
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
But before we go,
Let’s talk about our current status
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…
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
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
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
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"

}

}
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
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
Support older SDK version
Importing 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
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”…
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
Word Translations
• Transifix was used to prevent omission of
translation
Translation
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
Word Translations
• However, too much time was taken for
changing one word
Translation
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
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
Analyzation
• External analysis tools are easy way to collect
logs and visualize data
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
In-house Analysis platform : Pascal
• Now every logs are fully accessible from BQ
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
Reducing the size of App
• Modularize functions
- Set flavor to dependencies
- Split codes by flavor
Reducing the size of App
• Look over the size of images
• Remove unused libraries, methods…
4.6MB→721KB
Reducing the size of App
• Size went down by 25%!!
16.5 MB -> 12.4 MB
• Though did not raise the install rate… :-(
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
In-house AB testing
{
result: "OK",
data: {
experiment_results: [
{
name: "003_buy_button_colors",
variant: 3,
metadata: { color : blue}
}
]
},
Request testing data
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) { . . .}
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

Mais conteúdo relacionado

Mais procurados

Buck outside Valley
Buck outside ValleyBuck outside Valley
Buck outside Valley
Bruno Rocha
 
Dynamic bpm design by doing lightning talk
Dynamic bpm design by doing lightning talkDynamic bpm design by doing lightning talk
Dynamic bpm design by doing lightning talk
ITD Systems
 

Mais procurados (20)

Look, Ma! No servers! Serverless application development with MongoDB Stitch
Look, Ma! No servers! Serverless application development with MongoDB StitchLook, Ma! No servers! Serverless application development with MongoDB Stitch
Look, Ma! No servers! Serverless application development with MongoDB Stitch
 
排隊 Paiduei App, | React Native | iOS | Android
排隊 Paiduei App, | React Native | iOS | Android排隊 Paiduei App, | React Native | iOS | Android
排隊 Paiduei App, | React Native | iOS | Android
 
Buck outside Valley
Buck outside ValleyBuck outside Valley
Buck outside Valley
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Ciao: Continuous Integration for Apps on OpenStack
Ciao: Continuous Integration for Apps on OpenStackCiao: Continuous Integration for Apps on OpenStack
Ciao: Continuous Integration for Apps on OpenStack
 
Mobile development with React Native — one year in production
Mobile development with React Native — one year in productionMobile development with React Native — one year in production
Mobile development with React Native — one year in production
 
Unpacking Developer Experience
Unpacking Developer ExperienceUnpacking Developer Experience
Unpacking Developer Experience
 
Postman Webinar: Postman 101
Postman Webinar: Postman 101Postman Webinar: Postman 101
Postman Webinar: Postman 101
 
Angular TS(typescript)
Angular TS(typescript)Angular TS(typescript)
Angular TS(typescript)
 
QAAgility Presentation - Cucumber with Appium
QAAgility Presentation - Cucumber with AppiumQAAgility Presentation - Cucumber with Appium
QAAgility Presentation - Cucumber with Appium
 
An Introduction to Appium Desktop
An Introduction to Appium DesktopAn Introduction to Appium Desktop
An Introduction to Appium Desktop
 
OpenAPI development with Python
OpenAPI development with PythonOpenAPI development with Python
OpenAPI development with Python
 
Dynamic bpm design by doing lightning talk
Dynamic bpm design by doing lightning talkDynamic bpm design by doing lightning talk
Dynamic bpm design by doing lightning talk
 
ng-conf NativeScript and Angular 2 Workshop
ng-conf NativeScript and Angular 2 Workshopng-conf NativeScript and Angular 2 Workshop
ng-conf NativeScript and Angular 2 Workshop
 
Enterprise E-Commerce Webinar #3: Bringing Your API to Market
Enterprise E-Commerce Webinar #3: Bringing Your API to MarketEnterprise E-Commerce Webinar #3: Bringing Your API to Market
Enterprise E-Commerce Webinar #3: Bringing Your API to Market
 
I Love APIs - Oct 2015
I Love APIs - Oct 2015I Love APIs - Oct 2015
I Love APIs - Oct 2015
 
Api First Design
Api First DesignApi First Design
Api First Design
 
Optimize your delivery and quality with the right release methodology and too...
Optimize your delivery and quality with the right release methodology and too...Optimize your delivery and quality with the right release methodology and too...
Optimize your delivery and quality with the right release methodology and too...
 
Jenkins Reviewbot
Jenkins ReviewbotJenkins Reviewbot
Jenkins Reviewbot
 
Get Your Node.js API Swaggering with OpenAPI Spec
Get Your Node.js API Swaggering with OpenAPI SpecGet Your Node.js API Swaggering with OpenAPI Spec
Get Your Node.js API Swaggering with OpenAPI Spec
 

Destaque

Destaque (20)

Debot android debugging library
Debot android debugging libraryDebot android debugging library
Debot android debugging library
 
Tips for better CI on Android
Tips for better CI on AndroidTips for better CI on Android
Tips for better CI on Android
 
US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development
 
Sleep Hacks: How to Sleep Better
Sleep Hacks: How to Sleep BetterSleep Hacks: How to Sleep Better
Sleep Hacks: How to Sleep Better
 
The power of digital assessment
The power of digital assessmentThe power of digital assessment
The power of digital assessment
 
What Happens at School Stays on YouTube
What Happens at School Stays on YouTubeWhat Happens at School Stays on YouTube
What Happens at School Stays on YouTube
 
What I learned about communication in Sanfrancisco
What I learned about communication in SanfranciscoWhat I learned about communication in Sanfrancisco
What I learned about communication in Sanfrancisco
 
The Creative Classroom
The Creative ClassroomThe Creative Classroom
The Creative Classroom
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
 
Android Architecture
Android ArchitectureAndroid Architecture
Android Architecture
 
Introducing Cardio
Introducing CardioIntroducing Cardio
Introducing Cardio
 
例の縛るやつ(Data binding)
例の縛るやつ(Data binding)例の縛るやつ(Data binding)
例の縛るやつ(Data binding)
 
Developing better debug_components
Developing better debug_componentsDeveloping better debug_components
Developing better debug_components
 
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできること
 
bacteriophage
bacteriophage bacteriophage
bacteriophage
 
Coordinator Layout Behavior
Coordinator Layout BehaviorCoordinator Layout Behavior
Coordinator Layout Behavior
 
-英文校正エナゴが教える- ジャーナル採択率を高めるには?
-英文校正エナゴが教える- ジャーナル採択率を高めるには?-英文校正エナゴが教える- ジャーナル採択率を高めるには?
-英文校正エナゴが教える- ジャーナル採択率を高めるには?
 
Development at Mercari
Development at MercariDevelopment at Mercari
Development at Mercari
 
これからの設計の話をしよう
これからの設計の話をしようこれからの設計の話をしよう
これからの設計の話をしよう
 

Semelhante a Android development at mercari 2015

Nitin_updated_Profile
Nitin_updated_ProfileNitin_updated_Profile
Nitin_updated_Profile
Nitin Saxena
 
Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"
GoIT
 
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code DeploysDevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
Andreas Grabner
 

Semelhante a Android development at mercari 2015 (20)

Sam segal resume
Sam segal resumeSam segal resume
Sam segal resume
 
INF104 - HCL Domino AppDev Pack – The Future of Domino App Dev Nobody Knows A...
INF104 - HCL Domino AppDev Pack – The Future of Domino App Dev Nobody Knows A...INF104 - HCL Domino AppDev Pack – The Future of Domino App Dev Nobody Knows A...
INF104 - HCL Domino AppDev Pack – The Future of Domino App Dev Nobody Knows A...
 
GoPro, Inc. Case study: Dive into the details of our web applications
GoPro, Inc. Case study: Dive into the details of our web applicationsGoPro, Inc. Case study: Dive into the details of our web applications
GoPro, Inc. Case study: Dive into the details of our web applications
 
Droidcon thessaloniki 2015
Droidcon thessaloniki 2015Droidcon thessaloniki 2015
Droidcon thessaloniki 2015
 
SamSegalResume
SamSegalResumeSamSegalResume
SamSegalResume
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
 
Gowrisankar_Resume
Gowrisankar_ResumeGowrisankar_Resume
Gowrisankar_Resume
 
Go Pro, Inc. Case Study: Dive into the details of our node.js applications
Go Pro, Inc. Case Study: Dive into the details of our node.js applicationsGo Pro, Inc. Case Study: Dive into the details of our node.js applications
Go Pro, Inc. Case Study: Dive into the details of our node.js applications
 
Orchestrate Your End-to-end Mainframe Application Release Pipeline
Orchestrate Your End-to-end Mainframe Application Release PipelineOrchestrate Your End-to-end Mainframe Application Release Pipeline
Orchestrate Your End-to-end Mainframe Application Release Pipeline
 
Nitin_updated_Profile
Nitin_updated_ProfileNitin_updated_Profile
Nitin_updated_Profile
 
4 Phases followed by the Android Application Development Company.pdf
4 Phases followed by the Android Application Development Company.pdf4 Phases followed by the Android Application Development Company.pdf
4 Phases followed by the Android Application Development Company.pdf
 
CSC 404 | Final Presentation
CSC 404 | Final PresentationCSC 404 | Final Presentation
CSC 404 | Final Presentation
 
Webinar on How to use MyAppConverter
Webinar on How to use  MyAppConverterWebinar on How to use  MyAppConverter
Webinar on How to use MyAppConverter
 
How to feature flag and run experiments in iOS and Android
How to feature flag and run experiments in iOS and AndroidHow to feature flag and run experiments in iOS and Android
How to feature flag and run experiments in iOS and Android
 
CV_AmalMandal
CV_AmalMandalCV_AmalMandal
CV_AmalMandal
 
Jetpack compose session1 (1).pptx
Jetpack compose session1 (1).pptxJetpack compose session1 (1).pptx
Jetpack compose session1 (1).pptx
 
Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"
 
Usable Software Design
Usable Software DesignUsable Software Design
Usable Software Design
 
Anmol
AnmolAnmol
Anmol
 
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code DeploysDevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
 

Último

Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak HamilCara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Kandungan 087776558899
 
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
dollysharma2066
 
Integrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - NeometrixIntegrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - Neometrix
Neometrix_Engineering_Pvt_Ltd
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
Epec Engineered Technologies
 
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Último (20)

Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak HamilCara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
 
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
 
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced LoadsFEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
 
Integrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - NeometrixIntegrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - Neometrix
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.ppt
 
Bhosari ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For ...
Bhosari ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For ...Bhosari ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For ...
Bhosari ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For ...
 
22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
 
Work-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxWork-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptx
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
A Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna MunicipalityA Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna Municipality
 
Employee leave management system project.
Employee leave management system project.Employee leave management system project.
Employee leave management system project.
 
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 

Android development at mercari 2015

  • 1. Android Development at Merari 2015 Tomoaki Imai @ Roppongi.aar #2 11/17/2015
  • 2. Hi I’m Tomo(今井智章) twitter: tomoaki_imai github: tomoima525
  • 3. Launched App in US market on September 2014 http://www.slideshare.net/tomoakiimai2/us-localization
  • 4. What has changed / kept the same so far?
  • 5. 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
  • 6. But before we go, Let’s talk about our current status
  • 7. 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…
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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"
 }
 }
  • 12. 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
  • 13. 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
  • 14. Support older SDK version Importing 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
  • 15. 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”…
  • 16. 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
  • 17. Word Translations • Transifix was used to prevent omission of translation Translation 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
  • 18. Word Translations • However, too much time was taken for changing one word Translation 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
  • 19. 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
  • 20. Analyzation • External analysis tools are easy way to collect logs and visualize data
  • 21. 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
  • 22. In-house Analysis platform : Pascal • Now every logs are fully accessible from BQ
  • 23. 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
  • 24. Reducing the size of App • Modularize functions - Set flavor to dependencies - Split codes by flavor
  • 25. Reducing the size of App • Look over the size of images • Remove unused libraries, methods… 4.6MB→721KB
  • 26. Reducing the size of App • Size went down by 25%!! 16.5 MB -> 12.4 MB • Though did not raise the install rate… :-(
  • 27. 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
  • 28. In-house AB testing { result: "OK", data: { experiment_results: [ { name: "003_buy_button_colors", variant: 3, metadata: { color : blue} } ] }, Request testing data
  • 29. 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) { . . .}
  • 30. 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