Context.getPackageName()vs BuildConfig.APPLICATION_ID

Man*_*nza 19 android gradle

我可以使用以下方法检索包名:

Context.getPackageName()
Run Code Online (Sandbox Code Playgroud)

要么

BuildConfig.APPLICATION_ID
Run Code Online (Sandbox Code Playgroud)

这两种方式有什么区别吗?在特定情况下,是否优先考虑另一个?假设他们总是给出相同的结果是否安全?

基本上哪一个更好

AL.*_*AL. 24

从 Android Studio 3.5 开始,BuildConfig.APPLICATION_ID已弃用并替换为BuildConfig.LIBRARY_PACKAGE_NAME.

来自Android 谷歌源

BuildConfig:弃用库中的 APPLICATION_ID。

它充其量具有误导性,因此将其标记为已弃用并由 LIBRARY_PACKAGE_NAME 替换。

  • “在图书馆里”在这句话中非常重要。 (10认同)

zed*_*zed 6

BuildConfig由...提供Gradle.如果您没有使用构建,Gradle则无法使用访问包名称BuildConfig.

使用Context获得包名,如果没有语境或上下文为null可能并不适用于时间,这样的话你可以使用BuildConfig.APPLICATION_ID.

我会使用Context.getPackageName()因为结果是从操作系统提供的,而不是构建参数中的常量.


gha*_*enk 5

Context.getPackageName()将返回您在清单文件中设置为“package”的应用程序包名称:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xxx"
...
Run Code Online (Sandbox Code Playgroud)

BuildConfig.APPLICATION_ID将返回BuildConfig您在 gradle 文件中设置的字段值作为“applicationId”:

defaultConfig {
        applicationId "com.xxx"
Run Code Online (Sandbox Code Playgroud)

另请注意,BuildConfig.APPLICATION_ID已弃用并替换为BuildConfig.LIBRARY_PACKAGE_NAME


lig*_*igi 2

我之前使用过 getPackageName() - 但仅使用 BuildConfig.APPLICATION_ID ,因为它可用。应该更快,因为它只是一个变量,没有调用 - 但应该不重要。此外,在库中可能仍然需要使用 getPackageName()。