当前位置: 首页 > 知识库问答 >
问题:

在gradle中设置可在清单文件中使用的全局变量

澹台阳秋
2023-03-14

我想创建一个与applicationId类似的全局变量。它是在构建中设置的值。gradle和将在清单中使用。可能吗?

共有3个答案

云骏奇
2023-03-14

如果您只想在清单中使用gradle中设置的应用程序id,只需使用:

${applicationId}

例如:

<provider
    android:authorities="${applicationId}.ShareFileProvider" ... >
    ...
</provider>

如果希望自定义变量具有相同的行为,可以使用manifestplaceholder,如下所示:

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

在你的清单中:

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

看见https://developer.android.com/studio/build/manifest-build-variables.html了解更多信息。

燕智
2023-03-14

虽然Marko的答案似乎有效,但目前有一个更好的解决方案,它不需要向字符串资源文件添加变量。

清单合并接受占位符:

对于自定义占位符替换,使用以下DSL配置占位符值:

 android {
     defaultConfig {
         manifestPlaceholders = [ activityLabel:"defaultName"]
     }
     productFlavors {
         free {
         }
         pro {
             manifestPlaceholders = [ activityLabel:"proName" ]
         }
     }

将替换以下声明中的占位符:

<activity android:name=".MainActivity" android:label="${activityLabel}" >

您还可以使用groovy函数操作这些字符串。

施喜
2023-03-14

您可以设置它们,例如,我为不同的产品口味设置它

productFlavors {
        production {
            applicationId = "com.myapp.app"
            resValue "string", "authority", "com.facebook.app.FacebookContentProvider5435651423234"
        }
        development {
            applicationId = "com.myapp.development"
            resValue "string", "authority", "com.facebook.app.FacebookContentProvider2134564533421"
        }
        qa {
            applicationId = "com.myapp.qa"
            resValue "string", "authority", "com.facebook.app.FacebookContentProvider29831237981287319"
        }
}

像这样使用它

<provider
    android:name="com.facebook.FacebookContentProvider"
    android:authorities="@string/authority"
    android:exported="true" />
 类似资料:
  • 问题内容: 我正在一个项目上,我想让我的索引在滚动时加载更多内容。我想设置一个全局变量来保存页面已加载多少次。我的项目结构如下: 首先,我在中声明全局变量: 皮查姆(Pycharm)警告 在: 还有 我也引用了global-variable-and-python-flask 但我没有main()函数。在Flask中设置全局变量的正确方法是什么? 问题答案: 你没有在定义,只是在声明,所以就好像在说

  • 问题内容: 我正在尝试创建一个分页类,并使用该类外部的变量。 但这给了我致命错误“在非对象上调用成员函数query()”。 这是索引文件: 这是pagi.php文件: 是否可以在类内部使用该变量,而无需在类内部创建新变量? 问题答案: 解决此问题的正确方法是将数据库对象注入另一个类(依赖项注入): 解决该问题的另一种方法是将数据库类的实例注入使用它的方法中: 您选择哪种方法取决于情况。如果只有一个

  • 问题内容: 我使用设置全局变量的代码无法正常工作。好像根本没有调用分配,但是没有脚本错误发生。 页面加载后,警报将显示我的期望值。它确认x =1。但是此后,我单击div并得到了一个未定义的JavaScript错误。如何正确添加此变量? 背景:上面的代码是我正在研究的项目中最少复制的示例,我们必须在AJAX响应期间执行javascript代码。大多数时候都能正常工作,但这会引起问题。 问题答案: E

  • 但是我想存储一些复杂的对象,像这样 context-param不可能做到这一点,我还能在Java或Spring中使用什么?

  • 问题内容: 我试图在mysql中设置sql_mode,但会引发错误。 命令: 这不是设置多种模式的正确方法吗?设置会话和全局模式的优点是什么?哪有?我有不同的用户尝试使用不同的UNC值更新数据库,并插入od将会话模式设置为“ NO_BACKSLASH_ESCAPES”,尽管为此我可以使用一种通用的模式。这有意义吗? 请告诉我。 谢谢。 问题答案: 我解决了 正确的模式是:

  • 问题内容: 我对全局变量的工作方式感到困惑。我有一个大型项目,大约有50个文件,并且需要为所有这些文件定义全局变量。 我所做的就是在我的项目main.py文件中定义它们,如下所示: 我尝试过的另一种方法,但也没有用 在subfile.py我里面有这个: 但是同样,它没有用。我应该如何实施呢?我知道当两个文件彼此之间并不真正了解时(子文件不知道主文件),它就不能那样工作,但是如果不使用io编写或pi