Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Создание платной и бесплатной (урезаной) версии приложения.

#android


Есть готовое приложение. Стоит задача сделать еще одну версию с урезанным функционалом.
Вижу 2 пути решения:

Сделать в конфиге флаг и потом в
    местах вызова урезаемого контента
    воткнуть проверки (не знаю
    компилятор уберет неиспользуемые
    ветвления или нет).
Создать в репозитории отдельную
    ветку и там уже реально выпилить
    урезанный функционал.

Подскажите какой из этих методов лучше подойдет или может быть есть иной подход.    


Ответы

Ответ 1



Компилятор может убрать, а может и не убрать. Его задача сделать так, что бы поведение кода не поменялось от его манипуляций. По факту, для этого обычно используют два способа. Первый называется antenna и на хабре есть статья по его (или антенна - это она?) поводу. В результате получается препроцессор, как в С/С++. Позволят изголяться над кодом в широких пределах. Второй способ мне больше нравится и различные ide к нему относятся лучше. Суть в том, что платная функциональность выноситься в отдельные классы, а также пишутся "зеркальные классы" с тем же интерфейсом, но с пустыми реализациями. А потом любым способом правиться скрипт сборки (ant|gradle), что бы он для разных сборок использовал разные каталоги. Если в имя каталога включить имя сборки, то все ещё упрощается. К примеру, для платной версии (Paid) классы будут храниться в каталоге "ContentPaid", а для бесплатной (Free) - в "ContentFree". Этот способ может помочь и в других случаях. Пусть, нужно создать приложение для отображения новостей с сайта. Понятно, что они будут отличаться способом скачивания, способом приведения к читаемому виду, но вот код для отображения, для хранения и поиска по новостям будет один и тот же. Поэтому код скачивания и обработки выноситься в отдельные классы, которые будут храниться в отдельных каталогах, по каталогу на сайт. Если нужно будет написать для нового заказчика, то нужно будет только добавить пару классов.

Ответ 2



Прогон proguard'ом с включённым shrinking'ом уберёт весь неиспользуемый код.

Ответ 3



В любом случае для разных приложений будет нужен разный package ID. Я бы рекомендовал использовать для билда двух приложений(лайт и фул) из одного исходного кода такую штуку, как ANT. Вот ссылка на статью с примером: Using Ant in Android applications building automatization.

Ответ 4



Если флаг будет final static то компилятор уберет неиспользуемые ветвления. Я у себя задачу решал так: Устанавливал флаг public final static boolean LITE=true/false; и ветвился в коде Создавал 2 стартовых Activity скажем, mypackage.MyMainActivity и mypackage.lite.MyMainActivity Делал 2 манифеста с разными стартовыми активити, которые подставлял по мере необходимости.

Комментариев нет:

Отправить комментарий