@stdio96

Как скомпилировать 1 из нескольких проектов на Android?

Здравствуйте. Есть Android проект для работы с разными API (vk, ok, fb...). Сейчас есть 1 класс, в котором прописаны все функции для работы с API. К примеру: vkPost(), vkDeletePost(), okPost(), fbPost() и тп. Хочу создать отдельные классы для каждой соц. сети (VKConfig, OKConfig, FBConfig...). Весь остальной код, кроме ресурсов, одинаковый. Ресурсы для каждой соц. сети лежат в папке app/src/appForVk/res, app/src/appForOk/res, app/src/appForFb/res. С ними все ок. При компиляции я выбираю какой проект хочу построить. Вопрос: как схожим образом добавить и эти 3+ .java класса. Чтобы не все подтягивались, а только тот, который запросил. Сейчас в gragle:
productFlavors {
        appForVk {
            applicationId 'com.social.myapp.vk'
        }
        appForOk {
            applicationId 'com.social.myapp.ok'
        }
}
.

Спасибо.
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
@DanilinEgor
Попробуйте такой вариант:
1) создаёте интерфейс для работы с разными API
public interface SocialApi {
    void post(Post post);
    void deletePost();
}

2) для каждой соц.сети имплементите этот интерфейс
public class VkApi implements SocialApi {
    @Override
    void post(Post post){}
    @Override
    void deletePost(){}
}

3) в productFlavors прописываете
productFlavors {
        appForVk {
            buildConfigField("com.social.myapp.SocialApi", 'api', "new com.social.myapp.vk.VkApi()")
            applicationId 'com.social.myapp.vk'
        }
        appForOk {
            buildConfigField("com.social.myapp.SocialApi", 'api', "new com.social.myapp.ok.OkApi()")
            applicationId 'com.social.myapp.ok'
        }
}

4) далее в BuildConfig будет сгенерировано поле
public static final com.social.myapp.SocialApi api = new com.social.myapp.vk.VkApi();

Через BuildConfig.api можно работать с соцсетью и реализация класса будет подменяться для разных ProductFlavor
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы