2012-02-14 99 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