namespace
和 applicationId
确实容作用:
1. namespace
-
引入版本:Android Gradle Plugin (AGP) 7.0 开始引入,替代
AndroidManifest.xml
里的package
属性。 -
作用:
- 用于 代码中的 R 文件、BuildConfig 生成的 Java/Kotlin 包名。
- 决定了资源类
com.example.app.R
、BuildConfig
等所在的命名空间。 - 只影响代码编译,不影响最终安装包在系统中的标识。
👉 举例:
android {namespace = "com.xxx.xx"
}
那么项目中生成的 R
类路径就是 com.xxx.xx.R
。
2. applicationId
-
作用:
- 定义 最终 APK 的包名(唯一标识)。
- Android 系统用
applicationId
来区分不同应用,安装和升级都依赖它。 - 必须全局唯一(和 Google Play、车机系统里其他 app 冲突就安装不了)。
👉 举例:
defaultConfig {applicationId = "com.xxx.xx"
}
那么打出来的 APK 包名就是 com.xxx.xx
,安装时系统用它来区分。
3. 关系 & 区别
属性 | 作用范围 | 是否影响安装 | 默认值来源 |
---|---|---|---|
namespace | 代码生成 (R 、BuildConfig ) | ❌ 不影响 | 原来 AndroidManifest.xml 的 package |
applicationId | APK 标识(安装包名) | ✅ 影响 | namespace ,但可以单独指定 |
4. 示例
android {namespace = "com.xxx.xx.core"defaultConfig {applicationId = "com.xxx.xx"}
}
- 编译时,生成的
R
类路径是com.xxx.xx.core.R
- 打包后的 APK 安装包名是
com.xxx.xx
- 也就是说,代码里用的包名可以和最终安装包的包名不一样。
🔑 总结一句话:
namespace
:代码里的资源和类的命名空间(开发用)。applicationId
:APK 在系统中的唯一标识(安装用)。