元数据或属性文件中的Android配置?

元数据或属性文件中的Android配置?,android,android-manifest,Android,Android Manifest,我正在编写一个供开发人员使用的库,我有一个配置项,如apiKey,environment等。我想让开发人员设置这些值,我的第一个想法是使用我在应用程序类中加载的Java属性文件,但我看到Google Play和Google Map SDK要求开发人员在Android清单中的元数据标记中添加他们的apiKey。推荐的方法是什么 使用元数据标签似乎是安卓实现这一点的方法,尽管我找不到任何官方文档来说明原因 使用元数据,您可以使用资源而不是静态值来定义属性值,这样您就可以根据资源限定符为同一属性获取不

我正在编写一个供开发人员使用的库,我有一个配置项,如
apiKey
environment
等。我想让开发人员设置这些值,我的第一个想法是使用我在应用程序类中加载的Java属性文件,但我看到Google Play和Google Map SDK要求开发人员在Android清单中的元数据标记中添加他们的apiKey。推荐的方法是什么

使用元数据标签似乎是安卓实现这一点的方法,尽管我找不到任何官方文档来说明原因

使用元数据,您可以使用资源而不是静态值来定义属性值,这样您就可以根据资源限定符为同一属性获取不同的值。如果您的属性需要内部化,这非常有用

例:


推荐的android方式,让用户为您的库定义值 从应用程序模块到元标记

这就像在android清单上使用此代码一样简单

<meta-data android:name="com.yourproject.apikey" android:value="apikey"/>
这种方法的主要好处是

1) 您可以让用户根据设备类型定义不同的值,例如电话、平板电脑或sdk版本 (这可能不适用于您的情况,但肯定是一个很好的观点)

2) 您可以在元标记中添加复杂数据作为值, 如果要添加一个包含所有要声明的值的字符串数组,则可以使用此函数

3) 由于元标记基本上是一个捆绑包,因此您更容易

  • 读取库代码中的这些值

  • 如果用户未声明所需的 元标记

(我认为从资产解析属性需要更多的代码,但没有任何好处)

4) 您还可以在AndroidManifest上为活动、提供者和broadcastreceiver添加配置元标记

5) 此外,我认为,与在其资产文件夹中添加属性文件相比,请求您图书馆的消费者在其Android清单中添加一些元信息要容易得多。我相信这是许多已知图书馆使用这种方法的主要原因,如google play service、google maps、,崩溃报告库和许多提供用户分析功能的库

祝你好运

使用它很容易

<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
}