2012-02-14 96 views
0

爲了工作,我維護一個內部「市場」,可以上傳和下載新的應用程序版本。我還保留了一個啓動器,可以從我們的許多應用程序中進行選擇並啓動它們(有些應用程序的品牌不同)。我目前可以使用軟件包名稱和版本代碼填充此列表,但我也想在SVN分支中添加。Android:自定義應用程序屬性,可由包管理器訪問?

我在考慮讓腳本將分支信息作爲XML添加到清單中作爲自定義屬性或作爲單獨的XML文件。理想情況下,這可以由PackageManager公開訪問。這可能嗎?

或者,我可以通過編程方式更改APK名稱嗎?然後我可以使用「$ name - $ branch」作爲新名稱。

回答

2

我正在考慮有一個腳本,將分支信息作爲XML添加到作爲自定義屬性的清單或作爲單獨的XML文件。理想情況下,這可以由PackageManager公開訪問。這可能嗎?

你有一個<meta-data>元素添加到組件的元素(例如,<activity>)和訪問通過PackageManager元數據的XML內容:

<receiver android:name="com.commonsware.cwac.wakeful.AlarmReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 

     <meta-data 
      android:name="com.commonsware.cwac.wakeful" 
      android:resource="@xml/wakeful"/> 
    </receiver> 

組件將通過代碼訪問元數據是這樣的:

PackageManager pm=ctxt.getPackageManager(); 
ComponentName cn=new ComponentName(ctxt, getClass()); 
ActivityInfo ai=pm.getReceiverInfo(cn, PackageManager.GET_META_DATA); 
XmlResourceParser xpp=ai.loadXmlMetaData(pm, "com.commonsware.cwac.wakeful"); 

然後,您的自定義構建過程可以調整<meta-data>指向的XML資源以包含您想要的任何內容。

或者,我可以以編程方式更改APK名稱嗎?

您可以在您的硬盤驅動器上命名APK文件,但是我不會指望通過安裝過程保留該名稱。

+0

非常全面和有益的答案。關於APK名稱,我的意思是應用程序名稱。 – 2012-02-14 14:50:20

+0

@galaxyinfinite:如果通過「應用程序名稱」來表示''上'android:name'屬性的值,那麼您當然可以更改它。最簡單的方法是將其保留爲字符串資源並更新該資源(可能位於其自己的文件中)。這樣,你不必大驚小怪'PackageManager',只需調用'getString(R.string.app_name)'(或其他)來檢索值。儘管如此,您可以創建一個* new *字符串資源並單獨保留應用程序名稱。 – CommonsWare 2012-02-14 14:54:19

+0

也許我是誤解,但我不相信'PackageManager'可以訪問其他應用程序的字符串。我需要能夠從應用程序外部訪問這個字符串,所以看起來你的'元數據'解決方案是最好的。 – 2012-02-14 15:05:32