Android 元数据或属性文件中的配置?
Android configuration in meta-data or in properties file?
我正在编写一个供开发人员使用的库,我有一个配置项,如 apiKey
、environment
等。我想让开发人员设置这些值,我的第一个想法是使用我在应用程序 class 中加载的 Java 属性文件,但我已经看到 Google Play 和 Google Map SDK 要求开发人员在 Android 清单中的元数据标记中添加他们的 apiKey。推荐的方法是什么?
似乎使用元数据标记是 Android 实现此目的的方法,尽管我找不到任何官方文档来说明原因。
使用元数据,您可以使用资源而不是静态值来定义您的 属性 值,这样您就可以根据资源限定符为相同的 属性 获得不同的值。如果您的 属性 需要内化,这将非常有用。
例如:
<meta-data android:value="foo.bar" android:name="@string/hello" />
推荐的 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) 您可以让用户为每种设备类型定义不同的值,例如phone, 平板或 sdk 版本
(这可能不适用于您的情况,但这肯定是一个好点)
2) 您可以添加复杂数据作为元标记中的值,
如果你想添加一个包含你想要声明的所有值的字符串数组,你可以使用它。
3) 由于元标记基本上是一个包,因此您更容易
在您的库代码中读取这些值。
如果用户没有声明所需的,则有默认值
元标签。
(我认为从资产中解析属性需要更多代码,但没有任何优势)
4) 您还可以在 AndroidManifest 上为活动、提供商和广播接收器添加配置元标记。
5) 此外,我想请求您的图书馆的消费者在他的 Android 清单上添加一些元信息比在他们的资产 folder.And 上添加属性文件更容易我相信这是许多已知库使用这种方法的主要原因,例如 google-play-service、google-maps、崩溃报告库和许多提供用户分析的库。
祝你好运
使用这个很容易
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="API_KEY"/>
我正在编写一个供开发人员使用的库,我有一个配置项,如 apiKey
、environment
等。我想让开发人员设置这些值,我的第一个想法是使用我在应用程序 class 中加载的 Java 属性文件,但我已经看到 Google Play 和 Google Map SDK 要求开发人员在 Android 清单中的元数据标记中添加他们的 apiKey。推荐的方法是什么?
似乎使用元数据标记是 Android 实现此目的的方法,尽管我找不到任何官方文档来说明原因。
使用元数据,您可以使用资源而不是静态值来定义您的 属性 值,这样您就可以根据资源限定符为相同的 属性 获得不同的值。如果您的 属性 需要内化,这将非常有用。
例如:
<meta-data android:value="foo.bar" android:name="@string/hello" />
推荐的 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) 您可以让用户为每种设备类型定义不同的值,例如phone, 平板或 sdk 版本 (这可能不适用于您的情况,但这肯定是一个好点)
2) 您可以添加复杂数据作为元标记中的值, 如果你想添加一个包含你想要声明的所有值的字符串数组,你可以使用它。
3) 由于元标记基本上是一个包,因此您更容易
在您的库代码中读取这些值。
如果用户没有声明所需的,则有默认值 元标签。
(我认为从资产中解析属性需要更多代码,但没有任何优势)
4) 您还可以在 AndroidManifest 上为活动、提供商和广播接收器添加配置元标记。
5) 此外,我想请求您的图书馆的消费者在他的 Android 清单上添加一些元信息比在他们的资产 folder.And 上添加属性文件更容易我相信这是许多已知库使用这种方法的主要原因,例如 google-play-service、google-maps、崩溃报告库和许多提供用户分析的库。
祝你好运
使用这个很容易
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="API_KEY"/>