2012-03-02 38 views
3

正如標題所解釋的,我想知道是否有方法(代碼)知道生成的應用程序(.apk)使用調試證書或導出證書籤名?我想在我的應用程序中檢查這個,這樣我可以啓用/禁用某些功能,這取決於證書的類型。如何以編程方式知道應用程序是使用調試或導出證書籤名的?

我想知道Google在通過開發者控制檯上傳市場中的應用時,Google是如何驗證這些信息的?

任何建議/代碼將不勝感激。

+0

的可能的複製[如何檢查是否APK簽署或 「調試版本」?](http://stackoverflow.com/questions/7085644/how-to-check-if-apk-is -signed-or-debug-build) – grebulon 2017-01-25 10:50:06

回答

1

我發現這個資源,它描述了你正在努力解決的問題。本頁面描述瞭如何在代碼中獲取關於密鑰庫的信息。

http://daniel-codes.blogspot.com/2011/04/detecting-keystore-signature-in-code.html

+0

嗯這似乎是一個好主意 – waqaslam 2012-03-26 10:49:42

+0

404 - 找不到 – Hamidreza 2016-11-01 14:18:27

+0

這個答案給出了一個如何做到這一點的例子:http://stackoverflow.com/a/11535593/2603965 – grebulon 2017-01-25 10:49:44

0

您將只能使用您的導出證書將您的應用部署到Android Market。

如果未使用您在上傳第一個APK時使用的相同證書籤名,則AM會拒絕您的APK。

看起來您可以從:javax.security.auth.Subject包中獲取有關公鑰的信息(嘗試getPublicCredentials()方法)。我自己並沒有使用它。

+0

是的,我知道我們需要使用相同的證書更新應用程序。但我在尋找的是應用程序中的證書信息,如姓名,公司,組織,isDebug等。 – waqaslam 2012-03-02 14:21:13

2

我用

final PackageInfo info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0); 
ApplicationUtils.DEBUG_ENABLED = (info.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; 

啓用/禁用調試日誌記錄。

+0

哪個軟件包包含'ApplicationUtils'? – waqaslam 2012-03-02 14:22:48

+0

'ApplicationUtils'是我自己的一類靜態變量/函數,它在'Application.onCreate'中被初始化。 – techiServices 2012-03-02 14:26:34

+1

當使用調試密鑰構建APK時,將自動爲您設置調試標誌,因此您無需將其設置在清單中。 – techiServices 2012-03-02 14:33:36

0

公司名稱稱爲Android調試,用於調試密鑰。

運行jarsigner -verbose -certs -verify針對調試和簽名的apks。你會看到調試apk,CN字段被稱爲Android調試。對於您簽名的apk,它是密鑰簽名者的名稱。

這可能是Google和其他市場在上傳到市場時檢查密鑰的方式。像其他人說的那樣,您將無法將使用調試密鑰簽名的應用程序上傳到市場,所以我不知道爲什麼您需要檢查此問題。

+0

正如我所說,我不是在談論上傳或更新市場上的應用程序。我只是想在代碼中知道這些字段。有沒有可能? – waqaslam 2012-03-02 14:26:17

相關問題