使用 Gradle 有条件地在 AndroidManifest.xml 上添加 标记

2023-12-13

我有一个应用程序,仅具有用户无法直接访问的服务、接收器和活动(没有启动器活动)。

但现在我必须添加一个活动用作启动器活动BUT仅当应用程序在构建期间设置了某些特定变量时,才必须存在此启动器活动。

所以基本上,当调用 gradle build 时,我设置了一个变量HAS_LAUNCHER=1并在我的构建.gradle我有类似的东西:

defaultConfig {
    ...

    def hasLauncher = System.getenv("HAS_LAUNCHER")
    if (hasLauncher != null && hasLauncher == "1") {
        // Something here to include the activity tag in the AndroidManifest.xml
    }
}

在我的 AndroidManifest 中我必须添加<activity>标记何时if条件为真:

<activity
    android:name=".LauncherActivity"
    android:label="Launcher"
    android:theme="@style/AppTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

How can I accomplish that without using a new dimension of productFlavors? (the app already has a dimension with 3 flavors and 2 buildTypes, so I don't want to make even more outputs)

可能为时已晚,但经过很多天寻找解决方案后,我已经这样做了:

gradle默认配置

defaultConfig {
    resValue "bool", "showActivity", "true"
...

在构建类型中

 buildTypes {
    release {
        resValue "bool", "showActivity", "false"
        debuggable false
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

在清单中

    <activity
     android:name="xxx.xx.xxx"
        android:enabled="@bool/showActivity"
        android:label="@string/myActivity"
        android:icon="@android:drawable/ic_menu_preferences">
    ...

这样您就可以从 gradle 控制活动可见性。请注意,您还可以使用in code,只需创建一个 bool 资源显示活动,它将被 gradle 值替换,您将能够读取它

context.getResources().getBoolean(R.bool.showActivity)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Gradle 有条件地在 AndroidManifest.xml 上添加 标记 的相关文章

随机推荐

  • TextOptions.TextFormattingMode 影响粗体文本

    我遇到了问题将某些文本的字体粗细设置为粗体使其小于普通字体粗细文本 我发现这是因为我将 TextFormattingMode 设置为 Display 如果 TextFormattingMode 设置为 理想 则不会出现此问题 例如 以下代码
  • 在不使用模块的情况下在 Jest 中跨多个测试配置 jsdom

    我想在无法导出模块的环境中测试脚本 我已经安装了 Jest 版本 23 1 0 并且我的包中没有其他包package json文件 使用jsdom 旧 API我想出了一个按预期工作的解决方案 脚本 js var exVar test 脚本
  • 获取没有标题的窗口的句柄.. (C#)

    我们怎样才能得到一个没有标题的窗口的句柄呢 有没有一种方法可以枚举桌面上的所有窗口并过滤没有标题的窗口 在我的例子中 只有一个 并获取它的句柄 或者通过指定其他属性 例如具有标题的窗口特定按钮或列表框等 这应该可以做到 using Syst
  • 统计lucene索引中的词频

    有人可以帮我找到所有lucene索引中的词频吗例如 如果文档 A 有 3 个单词 B 文档 C 有 2 个 我想要一个方法返回 5 显示单词 B 在所有 lucene 索引中的频率 这个问题已经被问过很多次了 获取 Lucene 中的术语频
  • 如何在WebLogic中设置jar的顺序?

    在我的应用程序中我使用乔达时间2 0 但在我的WebLogic路径中有库 Joda Time 1 2 如何更改顺序并告诉 WebLogic 使用我的库 现在它使用自己的库 而不是我的 我刚刚向 Joda Time 2 0 添加了 Maven
  • 一个视图中的两个 GridView

    我用 Yii2 框架开发了一个网站 我需要一些帮助 我需要在我的页面之一中显示两个具有不同数据的不同 GridView 我设法显示表格及其数据 但是当我从一个表格的页面切换到另一个表格的页面时 其他表格的页面也会发生变化 我怎样才能在一张桌
  • 如何在 MATLAB 中检索选定的文本?

    MATLAB 具有多种选择敏感功能 例如 如果您选择一些文本并按 F9 它将评估您的选择 除非您重新映射键盘设置 我希望能够通过快捷方式复制此功能 例如 我想单击显示当前选择的快捷方式 我的快捷回调是disp GetSelection 但什
  • 如何为承诺的解决添加指定的延迟

    我想定义一个函数 它接受一个承诺 并返回一个相同的承诺 除了返回的承诺解决任意超时问题 我的代码如下所示 但我不确定我是否能捕捉到诸如拒绝之类的一切 Returns a promise identical to promise except
  • cocos2d中重复背景有黑边!

    我正在尝试为我的 iPhone 应用程序设置平铺 重复背景 代码 有效 因为背景按应有的方式重复 但每次重复周围似乎都有黑色边框 我不知道为什么 图像恰好是 200x200 下面是它的外观和代码的屏幕截图 if self super ini
  • 通过网络发送密码

    因此 我正在开发一个移动平台应用程序 我希望用户可以通过网络进行身份验证 我想知道确保安全的最佳方法 用户将 HTTP 密码发送到 php 服务器 该服务器根据同一服务器上的 mysql 数据库进行身份验证 显然我不想通过互联网以纯文本形式
  • 奇怪的 Apache2.2 SVN 错误,“预期存储库格式‘3’或‘5’;发现格式‘9’”

    我有一个存储库 我可以使用 TortoiseSVN 从运行 Subversion win32 服务的同一台计算机上访问该存储库 并且它已经工作了一段时间了 我决定尝试设置 mod dav svn 以便能够从其他地方获取它 当我尝试访问它时
  • 如何在Android M中检查单个请求的多个权限?

    我想使用 android permission CAMERA android permission WRITE EXTERNAL STORAGE 在单个请求中使用 ActivityCompat requestPermissions Acti
  • 使用 NSWorkspace 关闭文件

    我的要求是打开一个 pdf ppt 等文件并在 20 分钟后关闭它 感谢 NSWorkspace 我能够正确打开这些文件 但我怎样才能关闭这些文件呢 NSWorkspace 似乎没有 close 方法 NSWorkspace只是要求操作系统
  • 从Python中线程中的函数获取返回值[重复]

    这个问题在这里已经有答案了 我编写了一个使用多线程的 Python 函数 def image link ID tid1 Thread target displayImage args link ID tid2 Thread target p
  • TypeScript 中静态方法的抽象方法版本

    我正在使用打字稿创建数据模型范例 我将不同类型的数据存储在不同的地方 SQL 本地缓存 我想创建一个抽象类 其中包含任何类型的数据存储所需的所有方法 创建 查找 更新 计数 销毁 这样我就可以扩展该类并针对不同类型的存储以不同的方式实现它
  • 加载了错误的 App.config

    我构建了一个 NET 3 5 类库 它读取 App config 文件以获取所需的值 当我在 Visual Studio 中测试它时 它可以很好地提取配置值 为了测试它 我只需将项目更改为控制台应用程序并执行方法调用 我需要从许多其他 NE
  • 从密钥库加载证书

    从受密码保护的密钥库加载证书和密钥 然后将其用于证书验证和数字签名 阅读证书真的很简单 CertificateFactory factory CertificateFactory getInstance X 509 X509Certific
  • php计算浮点数

    我这里有一个奇怪的数学计算 我希望有人能解释一下 a 1 85 100 b 1 5 100 c 1 1 100 d 0 4 100 e 0 4 100 f 0 4 100 g 0 4 100 h a b c d e f g echo h 1
  • 在opencv中读取像素的HSV值

    你会如何读取 HSV 格式而不是 RGB 格式的像素值 下面的代码以 RGB 格式读取圆心的像素值 HSV 的读数值有很大差异吗 int main int argc char argv load image from directory I
  • 使用 Gradle 有条件地在 AndroidManifest.xml 上添加 标记

    我有一个应用程序 仅具有用户无法直接访问的服务 接收器和活动 没有启动器活动 但现在我必须添加一个活动用作启动器活动BUT仅当应用程序在构建期间设置了某些特定变量时 才必须存在此启动器活动 所以基本上 当调用 gradle build 时