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