Android 为什么在调试模式下我会得到两个不同应用程序的相同调试签名?

Android 为什么在调试模式下我会得到两个不同应用程序的相同调试签名?,android,Android,我在android studio中制作了两个基本(hello world)应用程序,它们具有不同的项目名称,因此也具有不同的软件包名称。 在packagecom.example.first.appA中说appA 和 com.example.second.appB 不过,我还是为我的上述两个应用程序获得了相同的签名密钥,我完全不知道使用相同密钥的原因是什么。 谁来帮忙 下面是我用来从我的应用程序中获取签名的代码片段 PackageInfo packageInfo = this.getPackage

我在android studio中制作了两个基本(hello world)应用程序,它们具有不同的项目名称,因此也具有不同的软件包名称。 在packagecom.example.first.appA中说appAcom.example.second.appB

不过,我还是为我的上述两个应用程序获得了相同的签名密钥,我完全不知道使用相同密钥的原因是什么。 谁来帮忙

下面是我用来从我的应用程序中获取签名的代码片段

PackageInfo packageInfo = this.getPackageManager()

                    .getPackageInfo(this.getPackageName(),

                            PackageManager.GET_SIGNATURES);

            for (Signature signature : packageInfo.signatures) {

                byte[] signatureBytes = signature.toByteArray();

                MessageDigest md = MessageDigest.getInstance("SHA");

                md.update(signature.toByteArray());

                final String currentSignature = Base64.encodeToString(md.digest(), Base64.DEFAULT);

                Log.d("Signature", "Here is the value for SIGNATURE:" + currentSignature);
所以当我把这个代码片段一个接一个地放到我的两个应用程序AB中时。 我在日志中获得了与当前签名相同的值,比如说478yYkKAQF+KST8y4ATKvHkYibo=

注意:我没有为我的应用程序明确执行任何发布/调试模式签名,也就是说,默认情况下它们应该是某种东西。(使用android studio)


编辑在SO和Google的回答之后,我得到的答案是,你在android studio上的任何项目都有相同的调试密钥(除非明确修改),你可以通过签署应用程序为不同的项目获得不同的密钥。

默认情况下,所有
debug
版本的应用程序都具有相同的签名(即,相同的默认证书用于签名)

如果希望应用程序具有不同的签名,则需要生成新的调试证书并手动将其添加到其中一个应用程序中

相关链接:

默认情况下,所有
debug
变体的应用程序都具有相同的签名(即,相同的默认证书用于签名)

如果希望应用程序具有不同的签名,则需要生成新的调试证书并手动将其添加到其中一个应用程序中

相关链接:
默认调试密钥由Android Studio自动生成,并存储在
~/.Android/debug.keystore
(对于Linux/Mac系统)和
C:\User\YourUser\.Android\debug.keystore
上(对于Windows系统)

除非您删除该密钥,否则该密钥将用于该机器上的每个项目,Android Studio将在下次运行时重新自动生成一个新密钥

这是绝对正常的行为,我真的不明白你为什么要担心它


如果您需要(出于任何原因)在调试版本上使用不同的签名密钥,请参见以下内容:

默认调试密钥由Android Studio自动生成,并存储在
~/.Android/debug.keystore
(对于Linux/Mac系统)和
C:\User\YourUser\.Android\debug.keystore
中(对于Windows系统)

除非您删除该密钥,否则该密钥将用于该机器上的每个项目,Android Studio将在下次运行时重新自动生成一个新密钥

这是绝对正常的行为,我真的不明白你为什么要担心它


如果您需要(出于任何原因)在调试版本上使用不同的签名密钥,请参见:

签名依赖于密钥库,而不是包名。好的!那么,如何为这两个应用程序获取不同的签名呢?然后使用两个不同的密钥库,每个密钥库一个。每个应用程序使用不同签名的目的是什么?为什么需要这样做?签名依赖于密钥库而不是包名。好的!那么,如何为这两个应用程序获取不同的签名呢?然后使用两个不同的密钥库,每个密钥库一个。每个应用程序使用不同签名的目的是什么?为什么需要这样做?我还尝试在调试模式下(不是在发行版中)对我的应用程序A进行签名…仍然是相同的密钥。我错过了什么?如果我改为在发布模式下登录,它会发生变化吗?@eRaisedToX,发布您的配置文件,以便我们看到错误所在。您是指build.gradle文件吗?如果您希望您的应用具有不同的签名,您需要生成新的调试证书,并手动将其添加到其中一个应用中。我该怎么做?请help@eRaisedToX,我添加了一些可能对您有用的链接。我还尝试在调试模式下(不是在发行版中)为我的应用程序A签名…仍然是相同的密钥。我错过了什么?如果我改为在发布模式下登录,它会发生变化吗?@eRaisedToX,发布您的配置文件,以便我们看到错误所在。您是指build.gradle文件吗?如果您希望您的应用具有不同的签名,您需要生成新的调试证书,并手动将其添加到其中一个应用中。我该怎么做?请help@eRaisedToX,我添加了一些对您有用的链接。