実行時にAndroidアプリケーションがプロダクション用に署名されているのかデバッグされているのかを判断する方法はありますか?実行時にAndroidアプリケーションがプロダクション用に署名されているのかデバッグされているのかを判断する方法はありますか?
答えて
はい、100%信頼できません。 hereと記載されているように、デフォルトの(自動生成された)証明書にはDN 'CN = Android Debug、O = Android、C = US'があります。 DNをチェックし、デフォルトと一致する場合は、おそらくデバッグ証明書です。何も人が自分のデバッグ証明書を生成したり、同じものをプロダクションやデバッグに使うことを妨げているものはありません。
PackageManager
を使用して署名証明書を取得できます。ような何か:
PackageManager pm = context.getPackageManager();
Signature sig = packageManager.getPackageInfo(getPackageName(),
PackageManager.GET_SIGNATURES).signatures[0];
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(
new ByteArrayInputStream(sig.toByteArray()));
String dn = cert.getIssuerDN().getName();
private static Boolean isDebugBuild = null;
protected boolean isDebugBuild() {
if(isDebugBuild == null) {
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(getPackageName(), 0);
isSignedWithDebugKey = (pi.applicationInfo.flags &
ApplicationInfo.FLAG_DEBUGGABLE) != 0;
}
catch(NameNotFoundException nnfe) {
nnfe.printStackTrace();
isDebugBuild = false;
}
}
return isDebugBuild;
}
あなたが特にあなたのマニフェストに=「true」にデバッグを追加しない場合、デバッグビルドそれがtrueに設定されている、およびエクスポートします/署名構築するには、それが設定されています偽にする。
これは、(デバッグ可能な..を手動で設定しない限り)より信頼性の高い方法である可能性があります。これは、デバッグ対リリースビルドかどうかを判断するためですが、証明書がデバッグ証明書 - あなたの質問だったので、私の答えはあなたにとって重要ではないかもしれません。
これは私の実装で、適切な答えが表示されるまで、マニフェストにデバッグ可能な属性を指定しないと100%保証されますか?デバッグ証明書はそれをtrueに設定しますか? – TacB0sS
docs: "本当のデバッグビルドのサポートAndroid Manifestのデバッグ可能な属性の値を変更する必要はありません インクリメンタルビルドは自動的にdebuggable =" true "を挿入しますが、" signed/unsigned applicationパッケージをインストールすると、ADTはそれを挿入しません。マニフェストファイルで手動でdebuggable = "true"を設定すると、リリースビルドでは実際にデバッグビルドが作成されます。 私はmap apiキーを切り替えるのにこのテクニックを使用しました。 – FunkTheMonk
パーフェクト...ありがとう。 – TacB0sS
ポストandroid-automatically-choose-debug-release-maps-api-key別のpackagemangerベースのソリューションがあります。基本的に、実際の署名のhashCodeと比較します。 automaticaly
をマップキーを整理するために私のためによく働いて私たちは、はるかに簡単な方法を使用します。
if (BuildConfig.DEBUG) {
// we're in debug mode
} else {
// we're in production mode
}
これは単純な要件のためのより簡単な解決策です...2つ以上の証明書を取得したい場合、同じアプリケーションを3つまたは4つの異なる方法で動作させたい場合はどうなりますか?はい、CIの中でマニフェストにメタデータタグを追加することができますが、次にCIが必要です。ブログの記事で提案されているソリューションは非常に便利です...私はそれを実装する際に疑念を抱いていましたが、今日ではデバッグ、ステージング、およびプロダクション環境を区別し、特定の機能をそれぞれ証明書に公開します。 – TacB0sS
はい私はあなたに完全に同意しますが、時にははるかに簡単なニーズがあり、私の甘やかさはその単純なニーズを狙っています。幸運なことに、グローバル人はそれが黒人や白人ではありませんが、グローバル人はそれを望みますが、それは別の話です。 –
真。この実際の理由は、以前のADTリリースでは、DEBUGフィールドが、アプリケーションがデバッグモードにあるかどうかを実際に示していないことがありました.ADTの1つのバージョンでは、それが実行されず、より安全な方法が必要でした。これがこのアイディアが生まれた経緯です。 – TacB0sS
- 1. java.util.Timerが実行されているかどうかを判断する方法
- 2. Route 53レコードセットが使用されているかどうかを判断する方法はありますか
- 3. クラスがjvmにロードされているかどうかを判断する方法はありますか?
- 4. 要素がラップされているかどうかを判断する方法はありますか?
- 5. LC_CTYPEがCで設定されているかどうかを判断する方法はありますか?
- 6. メソッドがJavaクラスでオーバーライドされているかどうかを判断する方法はありますか?
- 7. どのテキストメッセージが返信されているかを判断する方法はありますか?
- 8. Resqueワーカーまたはアプリケーション内でActiveJobが実行されているかどうかを判断する方法はありますか?
- 9. すべてのオブザーバブルがいつ解決されたかを判断する方法はありますか?
- 10. DomainContextで何が変更されているかを判断する方法はありますか?
- 11. 署名されていない署名からMySQLまたはPHPで署名された32ビット整数をキャストする方法はありますか?
- 12. どのCognos 8.xモデルが使用されているかを判断するツールはありますか?
- 13. Javaでは、スレッドが実行されているかどうかをどのように判断しますか?
- 14. Androidデバイスに実際のキーボードがあるかどうかを判断する方法はありますか?
- 15. dotnetcore-windowshostingがインストールされているかどうかを判断する方法
- 16. メインスレッドで何が実行されているかを判断する方法+ UIを遅くする方法はありますか?
- 17. 文法のあいまい性を判断する方法が設定されていますか?
- 18. Eclipseに何がCPU時間を食べているかを判断する方法はありますか?
- 19. 実行ファイルが署名されているかどうかを確認する(signtoolがそのexeに署名するために使用される)
- 20. どのようにしてPOSIXアプリケーションがあるかを判断できます。システムの起動から5分以内に実行されていますか?
- 21. UWPまたはStoreアプリケーションでどの.NET Frameworkのバージョンがインストールされているかを判断する方法
- 22. PHP、どのくらいのコードが実行されているかを判断するには?
- 23. HttpClientを使用してHttpResponseMessageがキャッシュから実行されたかどうかを判断する方法
- 24. ドッカーコンテナがリモートドッカーマシン上で実行されているのか、ドッカーエンジンでローカルに実行中であるのかをどうやって判断しますか?
- 25. [ウィンドウのmakeKeyAndVisible]が呼び出される前にビューがロードされている場合、デバイスの向きを判断する方法はありますか?
- 26. sqlplusバッファがサーバーに送信されたかどうかを判断する方法はありますか?
- 27. 私のアプリは、それが実行されている.NETフレームワークのバージョンを実行時にどのように判断するのでしょうか?
- 28. TFSビルド定義に対してMSBUILD引数が実行されたかどうかを判断する方法
- 29. 抽象メソッドが実装されているかどうかはどのように判断できますか?
- 30. Android - 外部スピーカーが接続されているかどうかを判断する方法
をそれはしばらくしている、と私は...それ以来育ってきました:)ここにあります完全なソリューションへのリンク:http://android-know-how-to.blogspot.co.il/2013/08/android-apk-signature-check.html#chitika_close_button – TacB0sS