Android清单中的条件句?

Android清单中的条件句?,android,ant,android-manifest,Android,Ant,Android Manifest,Android清单中是否可能有条件语句?我知道开箱即用的可能不是,因为这是R.java等所依赖的。我希望有一个插件可以取代清单的某些部分(注释/取消注释),以简化我的部署过程 基本上,我们有一些设备需要完全锁定,所以我将它们设置为category.HOME等。但我们还有一些个人设备仍然用于测试。因此,确保我没有用一个新的发射器来炫耀个人设备是相当乏味的 我知道这很小,但在以前的语言中我会使用ifdef等,但Java不是这样工作的 我设法找到了这样的答案:-如果给我一些时间,我可能会捏造一些东西,

Android清单中是否可能有条件语句?我知道开箱即用的可能不是,因为这是R.java等所依赖的。我希望有一个插件可以取代清单的某些部分(注释/取消注释),以简化我的部署过程

基本上,我们有一些设备需要完全锁定,所以我将它们设置为
category.HOME
等。但我们还有一些个人设备仍然用于测试。因此,确保我没有用一个新的发射器来炫耀个人设备是相当乏味的

我知道这很小,但在以前的语言中我会使用
ifdef
等,但Java不是这样工作的

我设法找到了这样的答案:-如果给我一些时间,我可能会捏造一些东西,但我必须承认,我真的不知道从哪里开始,甚至不知道这是否可能

我希望有人以前就想到了这一点,并有了一个神奇的解决办法!:)


干杯。

您可以有一个布尔资源——在这里称之为
is_this_for_realz
——对于生产,它设置为
true
,否则设置为
false
。然后,您可以设置一个
,其中包含您的
主页
,其中
具有
android:enabled=“@bool/is\u this\u for\u realz”
。然后,是否使用
HOME
过滤器取决于该布尔资源的状态。您需要安排将生产版本交换到一个资源文件中,该资源文件将
this\u for\u realz
设置为
true
,而您的正常调试版本将设置为
false


正如Machinarius所指出的,使用Gradle for Android,这变得简单得多。您可以使用布尔资源方法,但是调试/发布版本的变体
is\u this\u for\u realz
由Gradle构建类型驱动。或者,如果您遇到
技术的问题,您可以使用不同的清单进行调试和发布。

您可以使用一个布尔资源,在这里将其称为
is\u this\u for_realz
,在生产中设置为
true
,否则设置为
false
。然后,您可以设置一个
,其中包含您的
主页
,其中
具有
android:enabled=“@bool/is\u this\u for\u realz”
。然后,是否使用
HOME
过滤器取决于该布尔资源的状态。您需要安排将生产版本交换到一个资源文件中,该资源文件将
this\u for\u realz
设置为
true
,而您的正常调试版本将设置为
false


正如Machinarius所指出的,使用Gradle for Android,这变得简单得多。您可以使用布尔资源方法,但是调试/发布版本的变体
is\u this\u for\u realz
由Gradle构建类型驱动。或者,如果您在
技术方面遇到问题,您可以使用不同的清单进行调试和发布。

回答有点晚,但我就是这么做的

首先在Gradle中创建清单变量,如下所示:

buildTypes {

    debug {
       
        manifestPlaceholders = [    applicationLabel: "@string/app_name_dev",
                                    azureRedirectURI: "URI_FOR_DEV"]
  
    }

    release {
        manifestPlaceholders = [    applicationLabel: "@string/app_name",
                                    azureRedirectURI: "URI_FOR_PROD"]
    }
}
然后在清单中,您可以执行以下操作:

<application android:label="${applicationLabel}" />

<activity android:name="com.microsoft.identity.client.BrowserTabActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!--Add in your scheme/host from registered redirect URI-->
            <data
                android:scheme="${azureRedirectURI}"
                android:host="auth" />
        </intent-filter>
    </activity>

回答有点晚,但我就是这么做的

首先在Gradle中创建清单变量,如下所示:

buildTypes {

    debug {
       
        manifestPlaceholders = [    applicationLabel: "@string/app_name_dev",
                                    azureRedirectURI: "URI_FOR_DEV"]
  
    }

    release {
        manifestPlaceholders = [    applicationLabel: "@string/app_name",
                                    azureRedirectURI: "URI_FOR_PROD"]
    }
}
然后在清单中,您可以执行以下操作:

<application android:label="${applicationLabel}" />

<activity android:name="com.microsoft.identity.client.BrowserTabActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!--Add in your scheme/host from registered redirect URI-->
            <data
                android:scheme="${azureRedirectURI}"
                android:host="auth" />
        </intent-filter>
    </activity>


为此,您需要Gradle/Android Studio。看,你需要Gradle/Android Studio来完成这项工作。看,谢谢马克!还没有跳转到gradle/Android Studio。活动别名方法目前还可以。非常感谢@Commonware-有没有一种方法可以将其用于权限。我没有看到android:为或启用。@KrzysztofKubicki:将您对条件元素的需求划分为不同的构建变体(例如,产品风格)。为每个构建变量提供自定义清单。在需要它们的构建变体的清单中包含您需要的条件元素,并保留库存(
main
)清单。谢谢标记!还没有跳转到gradle/Android Studio。活动别名方法目前还可以。非常感谢@Commonware-有没有一种方法可以将其用于权限。我没有看到android:为或启用。@KrzysztofKubicki:将您对条件元素的需求划分为不同的构建变体(例如,产品风格)。为每个构建变量提供自定义清单。在需要它们的构建变体的清单中包含您需要的条件元素,并保留库存(
main
)清单。我可以将此用于布尔值吗?以下是我看到的@miguelps的链接:我可以将此用于布尔值吗?以下是我看到的@miguelps的链接: