【问题标题】:Getting Package string from Android manifest从 Android 清单中获取包字符串
【发布时间】:2011-04-11 23:12:14
【问题描述】:

这应该很简单,但我找不到任何关于此的信息...

我只是想读取 android 清单中的包值...

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="THIS"

原因很简单,我必须打电话 context.getResources().getIdentifier(...) 我需要这个包裹。

由于此代码将在其他应用程序中重复使用,因此我希望在导出它时使其万无一失,因此不必每次都更改值。

有人知道怎么做吗?

【问题讨论】:

标签: android android-manifest


【解决方案1】:

在 Activity 中,您可以简单地调用 getPackageName()。如果您碰巧需要清单中的其他数据,可以使用 PackageInfo 类:http://developer.android.com/reference/android/content/pm/PackageInfo.html

将 TextView 设置为您的应用版本的示例:

    try {
        PackageManager pm = getPackageManager();
        PackageInfo packageInfo = pm.getPackageInfo(this.getPackageName(), 0);
        TextView version = (TextView) findViewById(R.id.version);
        version.setText(packageInfo.versionName);
    } catch (NameNotFoundException e) {}

【讨论】:

  • 这似乎并不完全正确,因为 packageInfo.versionName 确实返回了 gradle 文件中定义的 applicationId 而不是清单中的 package 属性。与大多数情况一样,它可以正常工作,但是当您使用 buildFlavors 更改您的 applicationId 时,这将不再有效。我也没有找到任何解决方案,但通过R-class 访问包属性。即 package-attribute 仅影响 R-class 的包名称,而不影响 applicationId 和您的普通类包
【解决方案2】:

来自你的“主要”Activity 类:

String package = this.getClass().getPackage().getName();

【讨论】:

  • 值得注意的是,这仅在您的主要活动位于与清单包同名的包中时才有效(而不是,例如子包)
  • 类的包必须与清单中定义的包不匹配,所以这是不正确的,尽管在大多数情况下这是可行的
猜你喜欢
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多