網(wǎng)站是誰做的企業(yè)產(chǎn)品網(wǎng)絡(luò)推廣
問題
在AndroidManifest和build.gradle其實都有應(yīng)用包名的定義,有時候發(fā)現(xiàn)兩者不一樣,那么最終編譯到軟件生效的是哪個呢?
現(xiàn)象
連接設(shè)備后,通過adb shell pm list packages 查詢應(yīng)用包名,所列的名稱是在build.gradle定義的。
知識介紹
設(shè)備中的應(yīng)用包名主要是在以下兩個位置定義的:
1、AndroidManifest.xml 文件
每個 Android 應(yīng)用的包名在其 AndroidManifest.xml 文件中定義。包名通常在 <manifest> 標(biāo)簽的 package 屬性中指定。
例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapp"><application...</application>
</manifest>
2、build.gradle 文件
?在 app/build.gradle 文件的 defaultConfig 區(qū)域,applicationId 屬性被用來指定應(yīng)用的包名。雖然通常這兩者是相同的,但 applicationId 是編譯和發(fā)布時使用的標(biāo)識。
例如:
android {...defaultConfig {applicationId "com.demo.myapp"...}
}
總結(jié):
- AndroidManifest.xml:定義了應(yīng)用的包名,用于代碼和資源。
- 在module代碼路徑命名時使用,比如上述文件頭會是 package com.example.myapp
- build.gradle:通過 applicationId 指定了用于構(gòu)建和發(fā)布的應(yīng)用包名。 在設(shè)備上安裝的應(yīng)用程序?qū)⑹褂?AndroidManifest.xml 中定義的包名。
- 編譯安裝到設(shè)備時查詢應(yīng)用時使用,比如查詢app路徑用:pm path con.demo.myapp,而不是com.example.myapp
- applicationId 是決定應(yīng)用在設(shè)備上唯一標(biāo)識的關(guān)鍵屬性。
應(yīng)用的唯一標(biāo)識包名是build.gradle定義的,通常用于 Google Play 發(fā)布;而AndroidManifset是開發(fā)代碼中使用的。通常兩者是一樣的。