2014-12-12 2 views
2

Я хочу, чтобы с помощью градации выстроили 2-3 разных APK, где изменилось имя приложения и некоторые строки кода. Я не хочу менять целые каталоги или целые файлы, только фрагменты кода, возможно ли это? Я попытался понять Build variants and Product flavor. но не может понять, как это работает. Также это tutorial.Gradle несколько приложений для Android

Thanks

ответ

3

Это всего лишь предложение. Мы столкнулись с одним и тем же, и именно так мы добились его работы. По-моему, это очень чисто, и да, он использует вкусы продукта.

Итак, у вас есть адрес класса, который отформатирован по-разному от страны к стране, но, конечно, имеет много общего кода. Для простоты предположим, что у вас есть только 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, используя только одну задачу.

+0

Так что, если я понимаю это право, град автоматически построит один APK с основным + файлы в countryA и один APk с основными + файлами в countryB? –

+0

@ DanielStorch правильный. Gradle позаботится об этом для вас. – Fred

+0

Спасибо, будет ли это означать, что я получаю 2 разных APK с разными именами? –

Смежные вопросы