Это всего лишь предложение. Мы столкнулись с одним и тем же, и именно так мы добились его работы. По-моему, это очень чисто, и да, он использует вкусы продукта.
Итак, у вас есть адрес класса, который отформатирован по-разному от страны к стране, но, конечно, имеет много общего кода. Для простоты предположим, что у вас есть только street_number
и street_name
, но по стране A
адрес должен быть отформатирован как street_number street_name
и по стране B
его следует отформатировать как street_name, street_number
.
, как мы сделали это, имеющей структуру проекта следующим образом:
src | |\ main |\ countryA |\ countryB
Так что проект имеет 2 вкусов - countryA
и countryB
. Вот соответствующий build.gradle
часть:
productFlavors {
countryA {
applicationId "com.countryA"
}
countryB {
applicationId "com.countryB"
}
}
Теперь для части кода. Так Address
это общий класс, который мы поместили внутрь main
и будет выглядеть более или менее, как:
public abstract class AbstractAddress {
private String streetNumber;
private String streetName;
// ... your favorite getters and setters plus some common methods
public abstract String getFormattedAddress();
}
Ключевым моментом здесь является то, что класс является абстрактным и суб-классы должны реализовать getFormattedAddress()
. Теперь в папке countryA
вы бы:
package com.myapp.addresses;
public class Address extends AbstractAddress {
public String getFormattedAddress() {
return getStreetNumber() + " " + getStreetName();
}
}
Теперь в том же пакете, в countryA
, но в папке countryB
«s, Вы должны были бы один и тот же класс, но с другой реализации:
package com.myapp.addresses;
public class Address extends AbstractAddress {
public String getFormattedAddress() {
return getStreetName() + ", " + getStreetNumber();
}
}
Gradle позаботится о создании задач для вас. Что-то на линиях assembleCountryA
и assembleCountryB
(Это также зависит от вариантов сборки, которые у вас есть). Конечно, вы также можете сгенерировать все apks, используя только одну задачу.
Так что, если я понимаю это право, град автоматически построит один APK с основным + файлы в countryA и один APk с основными + файлами в countryB? –
@ DanielStorch правильный. Gradle позаботится об этом для вас. – Fred
Спасибо, будет ли это означать, что я получаю 2 разных APK с разными именами? –