改变包名和应用ID有什么区别?

23

改变包名和应用ID对最终APK有何不同?

我知道在保留源代码方面是不同的,但假设我有一个包名为a.b.c.d的应用程序。那么将包名更改为q.w.e.r并构建APK文件会有什么区别?

  1. 如果我将a.b.c.d重命名为q.w.e.r,然后构建APK文件

  1. 在gradle中将应用程序ID更改为q.w.e.r

为什么懒得谷歌 > https://developer.android.com/studio/build/application-id.html - Charuක
8
我并不懒惰,我只是需要其他人的经验来了解一些我一开始看不到的后果。我的计划是在应用程序发布之前保持相同的包名称,仅更改应用程序ID。但我看不出是否会有任何潜在问题与这种过程相关。 - Johns
4个回答

45
包名仅是为了组织您的代码。
另一方面,applicationId 用于在 Play 商店中标识您的应用程序。只有当您计划基于相同代码生成另一个应用程序时才会更改此选项。
从文档中可知 (https://developer.android.com/studio/build/application-id.html):
创建 Android Studio 中的新项目时,应用ID 精确匹配您在设置期间选择的 Java 风格包名称。
但是,在此之后,应用 ID 和包名称是独立的。您可以更改代码的包名称(代码命名空间)而不会影响应用 ID,反之亦然(虽然一旦发布应用程序,您不应更改应用 ID)。 但是,更改软件包名称会带来其他影响,请参见有关修改软件包名称的部分。

1
那么,如果我有一些模板,当我克隆该模板时,我只需要更改应用程序ID,是吗?在发布到Play商店之前,这就是我需要做的全部工作了?我可以在我的应用程序中保持相同的包名称吗? - Johns
@Johns 没错。使应用程序独特的唯一因素就是 applicationId。 - Eduardo Herzer
此外,Android清单中指定的权限应该是唯一的。 - sharib ahmed

7
一些 Android API,如 Google 地图和 Firebase,在创建密钥时要求提供包名称。他们所指的包名称实际上是您的 applicationId。是的,谷歌坚持在这些 API 密钥中使用术语“包名称”。不要混淆。
摘自文档 (https://developer.android.com/studio/build/configure-app-module#set_the_application_id):
注意:应用程序 ID 曾经直接与代码的包名称相关联,因此一些 Android API 在其方法名和参数名中使用术语“包名称”,但实际上这是您的应用程序 ID。例如,Context.getPackageName() 方法返回您的应用程序 ID。没有必要在应用程序代码之外共享您的真实包名称。

3

应用ID主要用于:

  • 更改应用程序ID进行测试

  • 更改应用程序ID以构建变体

在这种情况下,每个构建变体都应定义为单独的产品风格。对于产品风格(productFlavors {})块中的每个风格,您可以重新定义applicationId属性,或者使用applicationIdSuffix将一个段追加到默认应用程序ID中,如下所示:

每个Android应用程序都有一个唯一的应用程序ID,看起来像Java包名称,例如com.example.myapp。此ID在设备上和Google Play商店中唯一标识您的应用程序。如果您想上传应用程序的新版本,则应用程序ID(及其签名它的证书)必须与原始APK相同 - 如果更改应用程序ID,则Google Play商店会将APK视为完全不同的应用程序。因此,一旦发布应用程序,就不应更改应用程序ID。

而包名是:

尽管您的项目包名称默认与应用程序ID匹配,但您可以更改它。但是,如果要更改软件包名称,请注意,软件包名称(由项目目录结构定义)应始终与AndroidManifest.xml文件中的软件包属性匹配,如下所示:

Android构建工具将软件包属性用于两个方面:

1- 将该名称应用为应用程序生成的R.java类的命名空间。

例如:使用上面的清单,R类将是com.example.myapp.R。

2- 它用于解析在清单文件中声明的任何相对类名。

例如:使用以上清单,声明为<activity android:name=".MainActivity">的Activity将解析为com.example.myapp.MainActivity。

查看更多内容请参阅来源


0

一旦您在Play商店上上传应用程序,就无法更改该项目的应用程序ID,如果您想要更改,则Google Play商店将视为不同的应用程序。

在包名称的情况下,您可以根据需要进行更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接