Ответ 1
Я ведущий разработчик Android в Taplytics. Мы делаем именно то, о чем вы говорите!
В основе, на самом деле довольно просто. Очевидно, я не могу подробно рассказать о том, что мы делаем, но я могу дать вам общую идею!
Прежде всего, если вы являетесь одним из этих тестов A/B, я определенно рекомендую вам подклассировать элементы пользовательского интерфейса. Это намного быстрее, чем другие решения, потому что его код работает, когда вы хотите его (я объясню это позже). Самый простой способ - подкласс View
и работать оттуда.
Технология тестирования A/B те же, что и практически любая информация, которую вы получаете с сервера и представляете пользователю. Там нет никакой разницы.
Теперь, чтобы ответить на ваш комментарий "одной строки кода", ну, там секретный соус. В iOS этим разработчикам повезло, что метод swizzling, в котором они могут буквально видеть, когда метод вызывается и заменяет его своими вещами, Это делает вещи относительно легкими!
Но для Android? Ну, нет такой удачи. Взгляните на входные параметры для каждой платформы тестирования A/B/Analytics на Android: Foo.start(AppContext, "apiKey");
Магия в AppContext. Appcontext - это, по сути, интерфейс для самого Android. Это то, что делает его Android, а не просто Java. В AppContext есть информация обо всем: какие действия выполняются, когда они работают, какие намерения передаются, почти все. С помощью AppContext у вас есть много контроля и информации о приложении.
Оттуда вы в основном создаете дерево AppContext. Каждый маленький бит информации, который вам нужен из приложения, просто отделяет AppContext. AppContext → Деятельность → Просмотры. AppContext → Activites → Views → Fragments → Fragment Views. AppContext → Услуги → Push. Mixpanel на самом деле называет это "ViewCrawling" в своем решении, что может дать вам лучшую визуальную визуализацию происходящего.
Вы просто создаете это большое дерево обмотки с ветвями, входящими в каждый маленький аспект приложения, поэтому, когда вы хотите что-то изменить, вы можете найти его в своем дереве! Как только вы есть то, что вы хотите, вы просто захватываете информацию с сервера (или локального кеша), будь то JSON или XML или что-то еще, и внесите необходимые изменения на основе этой информации.
Но, как я уже говорил, используйте свои собственные элементы пользовательского интерфейса. Вам гораздо проще определить, что нужно изменить, прежде чем рисовать элемент. Особенно, если вы используете подкласс View, вам не нужно много кода вообще. Однострочная установка - это чистое удобство и делает все для меня (SDK dev) намного сложнее. Но я не могу пойти и попросить людей изменить каждый вид в своем приложении, чтобы быть подклассом моих собственных вещей, не так ли?
Так оно и есть. Для этого требуется интенсивное знание Android SDK, чтобы он мог ползать по всем его аспектам по мере необходимости. Идея проста, но более глубокие казни становятся невероятно сложными.
Я открыт для любых вопросов! Это реальный общий обзор всего этого, и он становится более сложным, поэтому попросите прочь.