Intereting Posts
Отображение огромной карты с хорошей производительностью на Android? Плавающая кнопка действия не поднимается, когда в Snack bar отображается в android Что такое класс адаптера? Android – пользовательский интерфейс с настраиваемыми атрибутами Сохранение содержимого EditText в RecyclerView Жизненный цикл активности Android и блокировка / разблокировка устройства (Устаревший) Фрагмент onOptionsItemSelected не вызывается Вызывает метод libgdx SpriteBatch для начала и конца в несколько раз дороже? Не удалось подключиться к службе камеры Как сделать приложение Facebook новым приложением на Android? Как получить доступ к датчику сердечного ритма Android RAW DATA? (Отраженный свет, а не сердцебиение) Невидимая / прозрачная кнопка, которая работает как обычный в андроиде? Android Wear Пользовательские голосовые действия Не удается обнаружить Android на веб-сервере Android: TextView: удаление интервала и отступов сверху и снизу

Конфигурация Android в метаданных или в файле свойств?

Я пишу библиотеку, которая используется разработчиками, и у меня есть элементы конфигурации, такие как apiKey , environment и другие. Я хочу, чтобы разработчик установил эти значения, моя первая мысль заключалась в использовании файла Java Properties, который я загружаю в классе Application, но я видел, что Google Play и SDK Google Map предлагают разработчикам добавить их apiKey в тег метаданных в Android Manifest. Каков рекомендуемый способ?

Solutions Collecting From Web of "Конфигурация Android в метаданных или в файле свойств?"

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

Это так же просто, как использовать этот код в манифесте android-manifest

 <meta-data android:name="com.yourproject.apikey" android:value="apikey"/> 

И вы можете получить эти значения из своей библиотеки, как это

 try { ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = applicationInfo.metaData; String apiKey = bundle.getString("com.yourproject.apikey"); } catch (NameNotFoundException e) { //Resolve error for not existing meta-tag, inform the developer about adding his api key } 

Основными преимуществами этого подхода являются:

1) что вы можете позволить пользователю определять разные значения для каждого типа устройства, например, телефон, планшет или sdk-версию (это может быть неприменимо для вашего случая, но это точно)

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

3) Поскольку мета-теги в основном представляют собой набор, вам легче

  • Прочитайте эти значения в коде библиотеки.

  • Имеют значения по умолчанию, если пользователь не объявил требуемые метатеги.

(Я считаю, что для парсинга свойств из активов требуется больше кода без каких-либо больших преимуществ)

4) Вы также можете добавить метатеги конфигурации для действий, поставщиков и трансляции на вашем AndroidManifest.

5) Также я полагаю, что проще попросить потребителей вашей библиотеки добавить несколько метаинформаций в свой манифест Android, чем добавить файл свойств в свою папку с ресурсами. И я считаю, что это основная причина. Многие известные библиотеки Используйте такой подход, как google-play-service, google-maps, библиотеки отчетов о сбоях и множество библиотек, которые предоставляют пользовательскую аналитику.

Удачи

Похоже, что использование тега meta-data – это способ Android для этого, хотя я не могу найти официальную документацию, чтобы спорить о том, почему.

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

Пример:

 <meta-data android:value="foo.bar" android:name="@string/hello" /> 

Легко использовать этот <meta-data android:name="com.google.android.geo.API_KEY" android:value="API_KEY"/>