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

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

Ответ 1

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

это так же просто, как использовать этот код в 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, библиотеки отчетов о сбоях и множество библиотек, которые предоставляют пользователю аналитику.

Удача

Ответ 2

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

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

Пример:

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

Ответ 3

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