Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Android development at mercari 2015

2.044 Aufrufe

Veröffentlicht am

This slides is about Android development at Mercari( CtoC mobile app ). Explains what has changed / kept the same since we launched our app in 2014.

Veröffentlicht in: Ingenieurwesen
  • Als Erste(r) kommentieren

Android development at mercari 2015

  1. 1. Android Development at Merari 2015 Tomoaki Imai @ Roppongi.aar #2 11/17/2015
  2. 2. Hi I’m Tomo(今井智章) twitter: tomoaki_imai github: tomoima525
  3. 3. Launched App in US market on September 2014 http://www.slideshare.net/tomoakiimai2/us-localization
  4. 4. What has changed / kept the same so far?
  5. 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. 6. But before we go, Let’s talk about our current status
  7. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 20. Analyzation • External analysis tools are easy way to collect logs and visualize data
  21. 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. 22. In-house Analysis platform : Pascal • Now every logs are fully accessible from BQ
  23. 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. 24. Reducing the size of App • Modularize functions - Set flavor to dependencies - Split codes by flavor
  25. 25. Reducing the size of App • Look over the size of images • Remove unused libraries, methods… 4.6MB→721KB
  26. 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. 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. 28. In-house AB testing { result: "OK", data: { experiment_results: [ { name: "003_buy_button_colors", variant: 3, metadata: { color : blue} } ] }, Request testing data
  29. 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. 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

×