2016-03-09 2 views
2

Возможно, проблема может быть недействительной. И пункты, которые я упоминаю здесь, могут быть немного неправильными, поскольку я не совершенен и не эксперт.Модифицированное программирование на Android

У меня есть приложение для покупок, и я хочу начать создание модульного приложения. Как и я хочу добавить Affiliate User (модуль, который добавляет определенные функции или это отобразит некоторые дополнительные страницы в приложении) в приложении.

Аналогичная ситуация возникает в рамках Framework: мы добавляем и включаем определенный модуль, а в обратной структуре загружают все по мере необходимости.

для этого, я хочу следующие изменения, такие как:

  1. добавить запись в NavigationView отображающее "Партнерская Label".
  2. загрузить фрагменты (просто добавив еще один фрагмент для еще одной метки/опции из режима навигации).

Предположим, у меня есть проект библиотеки, содержащий фрагмент и весь соответствующий код.

Как создать приложение автоматически, скажем так, написав «true» где-нибудь в XML?

Автоматически означает здесь добавляется метка, Intents выполняются по щелчку этикетки и т.д.

<Modules> 
<enable>true/false</enable> 
</Modules> 

Это только простой сценарий.

ответ

1

Вы можете сделать это (как и везде, когда дело доходит до написания кода) различными способами.

  1. Путь к файлу: Создайте новый файл с именем modules.txt с парами значений ключей. Загрузите файл и проверьте, включен ли модуль или нет.
  2. Путь «Константа»: Сделайте абстрактный класс, который содержит только общедоступные статические конечные переменные, которые описывают ваши модули.
  3. «Диспетчер пакетов» путь: См create Android Application plugins/extensions (apk)
  4. «множество» APK пути: Обратите внимание, что это не Рекомендуемое!

мы рекомендуем разработать и опубликовать один APK

multiple apk support

1

Чтобы добавить codewing Ответим, вы можете также использовать возможности управления ресурсами Gradle для достижения этой цели, так что вы только когда-либо нужно смотреть в одном месте для статуса с включенным/отключенным.

Для этого у вас есть 2 надежных варианта.

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

<bool name="module_x_enabled">true</bool> 

Второй будет вводить свои значения в строку ресурса после Gradle объединяет ресурсы, добавляя что-то вроде этого к вашей сборке. Gradle файл, а затем сравнивая, что позволило значение:

<string name="module_x_enabled">MODULE_X_ENABLED_PLACEHOLDER</string> 


android.applicationVariants.all{ variant -> 
    variant.mergeResources.doLast{  
     replaceInValues(variant, 'MODULE_X_ENABLED_PLACEHOLDER', MODULE_X_ENABLED) 
    } 
} 

def replaceInValues(variant, fromString, toString) { 
    File valuesFile = file("${buildDir}/intermediates/res/merged/${variant.dirName}/values/values.xml") 
    String content = valuesFile.getText('UTF-8') 
    content = content.replaceAll(fromString, toString) 
    valuesFile.write(content, 'UTF-8') 
} 

Где MODULE_X_ENABLED будет установка в вашем gradle.properties файле как:

MODULE_X_ENABLED=true 

Edit: или еще лучше,

Почему бы не тянуть настройки из какого-то сервера, так что вам не нужно, чтобы восстановить и перезапустить, чтобы обновить модуль клиента?

+0

Извините @Guardanis, я мало разбирался в процессе, связанном только с изменениями строк и градуировкой. Поскольку я новичок в технологии Android. Я попытаюсь получить более релевантную информацию, чтобы я мог понять, что представляет собой контент. – Killer

+0

Пожалуйста, руководствоваться вещами, на которые я должен ссылаться (понимая процесс градации и т. Д.), Или, пожалуйста, объясните немного больше. – Killer

+0

Используете ли вы Gradle/Android Studio или задавали вопрос о другой системе сборки? – Guardanis