Android 应用包名的定义 & pm list packages查询的包名

问题

在AndroidManifest和build.gradle其实都有应用包名的定义,有时候发现两者不一样,那么最终编译到软件生效的是哪个呢?

现象

连接设备后,通过adb shell pm list packages 查询应用包名,所列的名称是在build.gradle定义的。

知识介绍

设备中的应用包名主要是在以下两个位置定义的:

1、AndroidManifest.xml 文件

每个 Android 应用的包名在其 AndroidManifest.xml 文件中定义。包名通常在 <manifest> 标签的 package 属性中指定。

例如:

XML 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <application
        ...
    </application>
</manifest>

2、build.gradle 文件

在 app/build.gradle 文件的 defaultConfig 区域,applicationId 属性被用来指定应用的包名。虽然通常这两者是相同的,但applicationId 是编译和发布时使用的标识

例如:

XML 复制代码
android {
    ...
    defaultConfig {
        applicationId "com.demo.myapp"
        ...
    }
}

总结:

  • AndroidManifest.xml:定义了应用的包名,用于代码和资源
    • 在module代码路径命名时使用,比如上述文件头会是 package com.example.myapp
  • build.gradle:通过 applicationId 指定了用于构建和发布的应用包名。 在设备上安装的应用程序将使用 AndroidManifest.xml 中定义的包名。
    • 编译安装到设备时查询应用时使用,比如查询app路径用:pm path con.demo.myapp,而不是com.example.myapp
    • applicationId 是决定应用在设备上唯一标识的关键属性。

应用的唯一标识包名是build.gradle定义的,通常用于 Google Play 发布;而AndroidManifset是开发代码中使用的。通常两者是一样的。

相关推荐
松仔log15 小时前
Java中级——组合和继承
android·java·开发语言
我命由我1234518 小时前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
lilian23319 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_9557596219 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
余衫马19 小时前
2026最新版!Android Studio 极速安装与配置指南
android·ide·android studio
AFinalStone19 小时前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone19 小时前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
极客猴子1 天前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书
Kapaseker1 天前
Boolean 变量到底该怎么命名?
android·kotlin
AFinalStone1 天前
Android 7系统异常问题排查(六)应用异常(上)—ANR机制全解
android·系统异常