[英]Android configuration in meta-data or in properties file?
我正在編寫一個供開發人員使用的庫,我有一些配置項,如apiKey
, environment
等。 我想開發人員設置這些值,我首先想到的是使用我在Application類中加載的Java Properties文件,但我看到Google Play和Google Map SDK要求開發人員在Android的元數據標記中添加他們的apiKey表現。 推薦的方式是什么?
推薦的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,崩潰報告庫和許多提供用戶分析的庫。
祝好運
似乎使用元數據標簽是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"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.