Подтвердить что ты не робот

Поддержание как бесплатных, так и сторонних версий приложения

Я хочу создать PRO-версию моего приложения для Android и задавался вопросом, как структурировать мой репозиторий.

Знайте, что у меня есть ветки ствола и функции. Я хотел бы поставить про версию в другой ветке, но, может быть, есть лучший способ? Например, может быть, я должен создать две ветки - одну для бесплатной версии, другую для pro?

Pro версия будет иметь дополнительные функции и будет без рекламы, так, например. Я не хочу включать библиотеки AdMob в версию pro.

Есть ли у вас какой-либо опыт или предложения относительно наилучшего способа структурирования хранилища в этом случае?

EDIT: Я думаю, что нашел лучшее решение (для моего приложения) в этом потоке: http://groups.google.com/group/android-developers/browse_thread/thread/4ad3d67f735f16d7/948b4f9eee2490a3

Трюк, обсуждаемый там, касается наличия другого приложения, которое служит только для разблокировки функциональности PRO в реальном приложении. Приложение для разблокировки оплачивается на рынке, и фактическое приложение просто проверяет наличие его на устройстве.

4b9b3361

Ответ 1

Я знаю, что вы уже приняли решение, но у меня есть другое предложение, которое могло бы помочь другим.

Я использую git для своего репозитория. Создание и поддержка веток очень просто. У меня есть мой главный "pro" репозиторий и "свободная" ветвь. Я делаю все изменения кода мастером. Моя "свободная" ветвь отличается только тем, какие изменения вызывают "свободное" поведение. Всякий раз, когда я делаю внесение изменений в код, я передаю его мастер-ветке, затем переключаюсь на свободную ветку и использую команду "rebase", чтобы догнать ее с помощью мастера.

Он отбрасывает изменение, которое заставляет его вести себя как "свободная" версия, применяет изменения, которые я сделал для освоения, а затем повторно применяет "свободные" изменения.

Мне не нужно поддерживать две версии. Мне не нужно забывать переключать какой-то переключатель или делать те же изменения взад и вперед. Он довольно гладкий, и мне он нравится лучше, чем второе приложение, которое запускает про-поведение, потому что я могу разделить библиотеки, которые не нужны для рассматриваемой версии.

Ответ 2

Я бы предположил, что не поддерживаю две ветки, но у меня есть время выполнения или время компиляции, чтобы отключить функциональность PRO для бесплатной версии. Вы даже можете удалить ненужную DLL при создании.

Поддержание двух ветвей означает проблемы с фиксацией в двух местах, что станет скорее проблемой, поскольку ветки неизбежно расходятся.

Ответ 3

Я нашел простой способ сделать это в eclipse. Я был очень удивлен, насколько легко это было когда-то я обнаружил это.

  • В свойствах проекта для com.app.free проверьте "Is Library" как истину (вы должны скомпилировать проект хотя бы один раз, прежде чем изменять это, иначе вы получите сообщение об ошибке, заявив, что проекты библиотеки не могут быть скомпилированы, если вы получаете эта ошибка просто не проверяет, компилирует, а затем повторно проверяет.
  • создать новый проект com.app.pro
  • добавить проект com.app.free в качестве библиотеки в настройках проекта в разделе android proproject
  • создать новый класс MyApplication в com.app.pro и расширить Application
  • override onCreate() ПРИМЕЧАНИЕ. Для тех же копий/папок это НЕ то же самое, что и пакет onCreate (Bundle savedInstanceState). Вы должны удалить аргумент Bundle, поскольку это приложение не является активным.
  • Затем добавьте или установите статическую переменную, которая будет считана в методе проверки для проверки лицензии. EX: IS_PRO = true; то метод проверки читает переменную и возвращает true, если IS_PRO имеет значение true.
  • Скопировать содержимое содержимого манифеста com.app.free в com.app.pro
  • добавить android: name= "MyApplication" к тегу приложения в манифесте com.app.pro
  • append com.app.free перед атрибутом name для всех действий. (это заставляет приложение знать, что ваши действия можно найти в библиотечном пакете, который является бесплатной версией) EX: android: name= ". MainActivity" = > android: name= "com.app.free.MainActivity"
  • Теперь скомпилируйте и у вас есть pro version

Этот метод предполагает, что вы используете глобальный метод проверки. Например, я создал класс, который соединяет пользователей с БД, размещенным в моем домене, который определяет, когда пользователь впервые установил приложение. Для любых профи только действия я проверяю LicenseClass.isValidLicense(), который сравнивает даты и возвращает true, если оно меньше желаемого количества дней. в функции isValidLicense() я проверяю, установлено ли для Application.IS_PRO значение true и возвращает true, если оно есть.

Итак, теперь вы можете сделать так много изменений, однако часто, и все, что вам нужно сделать, это перекомпилировать оба. Единственное, о чем нужно помнить, - это то, что когда-либо внесенные вами изменения в манифест com.app.free должны отражаться в профи. Но это относится к любому приложению, потому что приложения для Android требуют, чтобы вы объявляли, какие действия вы собираетесь использовать независимо от того, что.

ПРИМЕЧАНИЕ. Вы можете удалить все ресурсы и ресурсы (не удаляйте сами папку res), которые автоматически генерируются при создании проекта, поскольку они не будут использоваться. Кроме того, единственным файлом класса является файл MyApplication с шага 3. Это означает, что вы также можете удалить класс MainActivity.class, который также автоматически генерируется, так как он также никогда не используется. Вы также можете удалить теги, которые не используются в используемой версии pro. EX: У меня есть активность BuyPro, которая открывается, если проверка не выполняется. Поскольку валидация никогда не завершится неудачей в про версии, она не требуется. Конечно, все эти удаления необязательны, просто давая вам знать, что я узнал.

CONS: Единственное, что я нашел до сих пор, это то, что вы не можете использовать операторы switch с вашими переменными ресурсов, потому что они больше не являются константами. Поэтому, когда вы используете проект как библиотеку, любая переменная, которую вы создаете в файле strings.xml, например, автоматически переопределяется, если вы объявляете переменную с тем же именем в про-версии. Для меня это не конус, потому что мне не нравится использование состояний switch в java, потому что они ограничивают вас только включением типа int и требуют постоянных значений. Это означает, что в java я обычно имею к нам, если... еще ничего в любом случае. Плюс Eclipse на самом деле поможет преобразовать операторы switch, если вы поместите курсор на ключевое слово переключателя и нажмите Ctrl + 1, а затем нажмите "конвертировать", если хотите. Кроме того, мне очень полезно, что ресурсы переопределены, потому что вы можете делать такие вещи, как change app_name от "app free" до "pro pro" или загружать новый шаблон, например, для приложения, просто создав новую версию в том месте, где он существует в бесплатном приложении. EX: если res/values ​​/string.xml содержит 100 строковых переменных, но все, что вам нужно или нужно изменить в про-версии, это имя_пользователя, просто воссоздайте res/values ​​/string.xml(НЕ копировать) и добавьте переменную app_name, Теперь переменная app_name в бесплатной версии будет переопределена, что означает, что файл string.xml в pro-версии должен содержать только переменную 1 вместо 100, поскольку ее единственная переменная, которая была изменена. Очень просто.: -)

EDIT: я узнал, что eclipse не позволяет экспортировать .apk для библиотек, поэтому вам нужно снять флажок "Является ли библиотека" в бесплатной версии после того, как вы добавили ее в качестве библиотеки в про-версии. Насколько я могу судить, единственное, что это делает, - это заставить eclipse не предупреждать вас об ошибке оператора switch. Кроме того, это работает нормально.

Ответ 4

У вас есть одна версия с public static final boolean IS_PRO, которая будет определять поведение free/pro.

EDIT:
Пакет вещь. Скажем, все ваши классы находятся в com.myapp.android.free.
Затем в AndroidManifest.xml вы объявляете package = "com.myapp.android" для платной версии и package="com.myapp.android.free" для бесплатного.
Если вы используете полные имена для действий, сервисов и т.д., Вам больше не придется ничего менять.

Я не стал бы удалять неиспользуемые библиотеки из платной версии. Если вы это сделаете, вам придется сделать это вручную.