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

时间:2017-01-22 11:57:43

标签: android

我在android studio中制作了两个基本(hello world)应用程序,其中包含不同的项目名称,因此不同的包名称。 在 com.example.first.appA 包中说 App A com.example.second.appB

中的 App B

我仍然为上述两个应用获得相同的签名密钥,我完全对同一个密钥的原因一无所知。 有人请帮忙!

以下是我用来从我的应用中获取签名的代码段。

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);

因此,当我在我的应用 A B 中逐一放置此代码段时。 我在我的日志中得到 currentSignature 的相同值 478yYkKAQF + KST8y4ATKvHkYibo =

注意:我没有为我的应用程序明确签署任何发布/调试模式,即。它们应该是默认的东西。 (使用android studio)

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

2 个答案:

答案 0 :(得分:2)

默认情况下,应用的所有debug变体都具有相同的签名(即,使用相同的默认证书进行签名)。

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

相关链接: How to generate a new keystore. How to change debug keystore.

答案 1 :(得分:1)

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

除非您删除密钥,否则将在该计算机上的每个项目上使用相同的密钥,然后Android Studio将在下次运行时重新自动生成新密钥。

这绝对是正常行为,老实说我不明白为什么你会担心它。

如果您需要(无论出于何种原因)在调试版本上使用不同的签名密钥,请参阅:Android Studio 0.4.+ custom debug keystore