【问题标题】:Adding conditional statements in Android Manifest在 Android Manifest 中添加条件语句
【发布时间】:2015-10-05 12:27:40
【问题描述】:

我需要一种在安装过程中根据设备型号将不同的共享用户 ID(在安装过程中)分配给同一个 Android 应用(同一个 APK)的方法。 我找不到任何有关清单文件中支持的条件语句的文档。 任何帮助将不胜感激。

【问题讨论】:

  • 使用产品风味。您可以从这里开始stackoverflow.com/questions/28478110/…(略有不同的问题,但可以让您基本了解)。
  • 我只能拥有一个 APK。因此,这需要在运行时发生,而不是在编译时发生。
  • 我认为在运行时不允许设置共享用户 ID。由于安全原因,我认为这是不可能或禁止的。
  • 对不起,我想我不清楚。我的意思是这不是构建时功能。它需要是安装时间(绝对支持在安装过程中分配共享用户 ID)。我只需要一种在清单中使用条件语句的方法。

标签: android apk android-manifest android-package-managers uid


【解决方案1】:

虽然这是一个相当古老的问题,但我最近偶然发现了一个类似的问题,这可能会对仍在寻找解决方案的人有所帮助。我的情况是我必须在运行时根据条件在 AndroidManifest.xml 中分配一些键。 虽然我找不到在 Manifest 中定义条件的方法,但我能够从 build.gradle 将方法传递给 Manifest。如果可以在 build.gradle 中检查条件,那么您可以通过以下方式将值传递给 Manifest

android {
    defaultConfig {
        manifestPlaceholders = [hostName:"www.example.com"]
    }
    ...
}

然后在 Manifest 中访问它为 -

<intent-filter ... >
    <data android:scheme="https" android:host="${hostName}" ... />
    ...
</intent-filter>

文档 - https://developer.android.com/studio/build/manifest-build-variables 此外,您可以从 build.gradle 生成字符串、布尔值和其他值,然后可以在应用范围内使用。

buildConfigField "int", "FOO", "42"
resValue "string", "app_name", "My App Name Debug"

【讨论】:

    【解决方案2】:

    清单中最接近条件的方法是不将值包含为常量,而是使用对资源的重定向。然后为不同的语言、设备等提供不同的资源。

    manifest 元素的文档指出 Shared User id 应该是一个字符串,但例如 Shared User 标签必须是一个字符串资源(因为您通常需要翻译它)。很难猜测您是否也可以将 id 设为资源 - 文档通常对此不准确,但请注意,适用于某个 Android 版本的内容可能不适用于所有版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      相关资源
      最近更新 更多