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是开发代码中使用的。通常两者是一样的。

相关推荐
一笑的小酒馆5 小时前
Android性能优化之截屏时黑屏卡顿问题
android
懒人村杂货铺7 小时前
Android BLE 扫描完整实战
android
TeleostNaCl9 小时前
如何安装 Google 通用的驱动以便使用 ADB 和 Fastboot 调试(Bootloader)设备
android·经验分享·adb·android studio·android-studio·android runtime
fatiaozhang952710 小时前
中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖
android·网络·电脑·电视盒子·刷机固件·机顶盒刷机
2501_9159184111 小时前
iOS 开发全流程实战 基于 uni-app 的 iOS 应用开发、打包、测试与上架流程详解
android·ios·小程序·https·uni-app·iphone·webview
lichong95111 小时前
【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之dist打包发布在Android工程asserts里
android·vue.js·iphone
Android出海11 小时前
Android 15重磅升级:16KB内存页机制详解与适配指南
android·人工智能·新媒体运营·产品运营·内容运营
一只修仙的猿11 小时前
毕业三年后,我离职了
android·面试
编程乐学12 小时前
安卓非原创--基于Android Studio 实现的新闻App
android·ide·android studio·移动端开发·安卓大作业·新闻app
雅雅姐13 小时前
Android14 init.rc中on boot阶段操作4
android