droidcon moscow 2015. Настоящий build должен делать 3 вещи собрать,...

Post on 21-Jan-2018

171 Views

Category:

Mobile

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Процесс сборки мобильного приложения

Кирилл Харьков

• Собрать• Проверить• Задеплоить

Задачи

• Собрать• Проверить• Задеплоить

Задачи

Сборка

Сборка

Сборка

Сборка

• 3 продукта• A, B, C

Сборка

• 3 продукта• A, B, C

• 8 вариантов• Debug• Alpha/Branch• Beta/Corp Beta• Release• Unit\Ui Test

Сборка

• 3 продукта• A, B, C

• 8 вариантов• Debug• Alpha/Branch• Beta/Corp Beta• Release• Unit\Ui Test

3 * 8 = 24

Сборка

productFlavors {A{

...}B{

...}C{

...}

}

Сборка

buildTypes {release {

…}debug {

…}alpha {

…}

}

Сборка

productFlavors {A{

...android.buildTypes {

...alpha {

…hockeyApp {

[appId: 'b45-------1b', note: project.issues, releaseType: '2']}

}}

}}

Сборка

Ресурсы

Сборка

Ресурсы• Общие для всех продуктов (A, B, C)

Сборка

Ресурсы• Общие для всех продуктов (A, B, C)• Отдельные для каждого продукта

Сборка

Ресурсы• Общие для всех продуктов (A, B, C)• Отдельные для каждого продукта• Общие ресурсы для группы продуктов (B, C)

Сборка

Папки ресурсов• res – общие для A, B, C• res_bc – общие для B, C• res_a, res_b, res_c - частные

Сборка

Ресурсы продуктов• A = res + res_a• B = res + res_bc + res_b• C = res + res_bc + res_c

Сборка

• Ресурсы• Исходники• Манифесты• Assets• Тесты

• Собрать• Проверить• Задеплоить

Задачи

• Собрать• Проверить• Задеплоить

Задачи

Тестирование

• Статический анализ

Тестирование

• Статический анализ• Встроенные правила

Тестирование

• Статический анализ• Встроенные правила• Корпоративные правила

Тестирование

• Статический анализ

Тестирование

• Статический анализ• Unit tests

Тестирование

@AcquireCookie@LargeTestpublic void testDeleteNonExistingFolder() {

DeleteFolder delete = runDeleteFolder(999);assertERROR_FOLDER_NOT_EXIST(delete);

}

Тестирование

@AcquireCookie@LargeTestpublic void testDeleteNonExistingFolder() {

DeleteFolder delete = runDeleteFolder(999);assertERROR_FOLDER_NOT_EXIST(delete);

}@MockMethod(response = RESPONSE_NOT_EXISTS)public void testDeleteNonExistingFolderMock() {

testDeleteNonExistingFolder();}

Тестирование

• Статический анализ• Unit tests

Тестирование

• Статический анализ• Unit tests• Ui tests

Тестирование

• Новый функционал

Тестирование

• Новый функционал• Баг

Тестирование

• Новый функционал• Баг• Сценарии, затрагивающие сторонние сервисы

Тестирование

• Ui Test Framework• Ui Automator• Robotium/Espresso• Appium• …

Тестирование

/*** Synchronously wait for the application to be idle. Can not be called* from the main application thread -- use {@link #start} to execute* instrumentation in its own thread.*/public void waitForIdleSync() {

validateNotAppThread();Idler idler = new Idler(null);mMessageQueue.addIdleHandler(idler);mThread.getHandler().post(new EmptyRunnable());idler.waitForIdle();

}

Тестирование

• Ui Test Framework• Ui Automator• Robotium/Espresso• Appium• …

Test Support Library

• Собрать• Проверить• Задеплоить

Задачи

• Собрать• Проверить• Задеплоить

Задачи

• Разные каналы (Alpha, Beta, …)

Деплой

• Разные каналы (Alpha, Beta, …)• Площадки (форумы, соц. сети, маркеты)

Деплой

• Разные каналы (Alpha, Beta, …)• Площадки (форумы, соц. сети, маркеты)

Деплой

Спасибо за внимание!

Кирилл Харьков

+7 926 052 23 17

k.kharkov@corp.mail.ru

xka39k@gmail.com

top related