Есть много подходов, которые вы можете использовать, но я не думаю, что вы сможете использовать один и тот же APK для обеих целей из-за того, как работает магазин Google Play. Я полагаю, что покупки в приложении - самое близкое к распространению одного и того же APK в разных регионах (платных и бесплатных). Это означает, что вам необходимо определить, когда пользователь должен платить за ваше приложение ... и вот в чем проблема ... зная, из какой страны ваш пользователь.
Подход, который я бы использовал, заключается в создании двух APK без особых усилий путем создания двух вариантов продукта (бесплатный, платный). Опять же, используя этот подход, вы получите ДВА АПК , но, насколько мне известно, это наиболее эффективный способ достижения вашей цели распространения.
Причина, по которой я считаю этот подход более эффективным, заключается в том, что вам не нужно добавлять много кода в код для определения страны устройства. Фактически, независимо от того, какой метод вы используете для определения страны устройства (или пользователя), вы почти никогда не сможете многое сделать с этой информацией. GPS-местоположение не является хорошим индикатором (пользователь может быть индийским туристом в Испании или испанским туристом в Индии), телефонные услуги также не будут работать для телефонов или планшетов без SIM-карт. По этой причине я сосредоточу свой ответ на двух вариантах продукта и создании двух APK.
Чтобы создать эти два продукта, вам нужно объявить их в Gradle ...
android {
flavorDimensions "version"
productFlavors {
free {
dimension "version"
applicationIdSuffix ".free"
versionNameSuffix "-free"
}
paid {
dimension "version"
applicationIdSuffix ".paid"
versionNameSuffix "-paid"
}
}
}
Приведенное выше заявление просто говорит Android Studio о том, что приложение использует два варианта продукта (бесплатный и платный) и что applicationId
(и название версии) будут дополнены именем версии.
Это необходимо, потому что вы будете генерировать два APK.
Следует отметить, что все разновидности продукта будут «наследовать» настройки, определенные в разделе defaultConfig
, поэтому вы должны определить все общие конфигурации в defaultConfig
Теперь, когда вы синхронизируете проект, Android Studio будет создавать варианты сборки на основе этих разновидностей продукта. Вот пример одного из моих проектов, в которых НЕ используются вкусы продуктов ...
Это просто использование общих типов сборки отладки / выпуска, но если бы я настроил упомянутые выше разновидности продукта, вы бы увидели здесь 4 варианта сборки:
- freeDebug
- freeRelease
- paidDebug
- paidRelease
Теперь, когда вы переключаете варианты сборки, вы можете предоставлять разные реализации классов, разные ресурсы и т. Д., И, самое главное, вы будете создавать разные APK для каждого варианта сборки при сборке (или упаковке) своего приложения.
Таким образом, вы получите бесплатный релиз APK и платный релиз APK, который вы можете раздельно распространять в Google Play. Может показаться, что у вас есть два разных приложения, но дело в том, что (с точки зрения разработки) это почти одно и то же приложение, разработанное с использованием Product Flavors, и усилия по созданию этих двух приложений минимальны !!!
Имея в виду все вышесказанное, вы можете видеть, что "довольно легко":
- Добавление подписок или покупок в приложении только к одному вкусу / варианту (Платно)
- Раздай бесплатный в Индию
- Распределите платное по всему миру
Теперь я действительно не знаю, есть ли простой способ достичь последнего пункта (3) ... распространение в Google Play во все страны, кроме одной (Индия). Это может быть непростой задачей - выбирать одну страну за раз