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

时间:2015-02-13 15:56:08

标签: android android-manifest

我正在编写一个供开发人员使用的库,我有一些配置项,如apiKeyenvironment等。我想开发人员设置这些值,我首先想到的是使用我在Application类中加载的Java Properties文件,但我看到Google Play和Google Map SDK要求开发人员在Android的元数据标记中添加他们的apiKey表现。推荐的方式是什么?

3 个答案:

答案 0 :(得分:8)

推荐的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 Manifest上添加一些元信息,而不是在他们的资产文件夹中添加属性文件。我相信这是主要原因许多已知的图书馆使用这种方法,如google-play-service,google-maps,崩溃报告库和许多提供用户分析的库。

祝你好运

答案 1 :(得分:3)

使用元数据标签似乎是实现这一目标的Android方法,虽然我找不到任何官方文档来争论原因。

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

前:

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

答案 2 :(得分:0)

is easy using this <meta-data android:name="com.google.android.geo.API_KEY" android:value="API_KEY"/>