#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 манифеста с разными стартовыми активити, которые подставлял по мере необходимости.
Комментариев нет:
Отправить комментарий