[解決済み] APKが署名済みかデバッグビルドかを確認するには?
2022-07-15 18:10:54
質問
私の知る限り、アンドロイドのリリースビルドでは、APKに署名されています。どのようにそれを確認する コードから それとも、Eclipseに秘密の定義があるのでしょうか?
私は、Webサービスデータ(いいえ、logcatはオプションではありません)からListViewアイテムを移入するのをデバッグするためにこれが必要です。
私の考えです。
-
アプリケーションの
android:debuggable
というように、様々なアプリケーションで使用されていますが、なぜか信頼できそうにありません。 - 署名済み APK のテストに同じデバイスを使用しているため、デバイス ID をハードコードするのは良いアイデアではありません。
- コード内のどこかで手動フラグを使用する?あり得るけど、絶対変更し忘れるし、プログラマは皆怠け者だから。
どのように解決するのですか?
アプリケーションがデバッグ証明書またはリリース証明書を使用してビルドされているかどうかを確認する方法はさまざまですが、私は次の方法が最適だと思います。
Androidのドキュメントにある情報によると アプリケーションに署名する によると、デバッグキーには次のようなサブジェクト識別名が含まれています: " CN=Android Debug,O=Android,C=US "。 この情報を利用すれば、debug keyの署名をコードにハードコーディングすることなく、パッケージがdebug keyで署名されているかどうかをテストすることができます。
与えられた
import android.content.pm.Signature;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
このようにisDebuggableメソッドを実装することができます。
private static final X500Principal DEBUG_DN = new X500Principal("CN=Android Debug,O=Android,C=US");
private boolean isDebuggable(Context ctx)
{
boolean debuggable = false;
try
{
PackageInfo pinfo = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(),PackageManager.GET_SIGNATURES);
Signature signatures[] = pinfo.signatures;
CertificateFactory cf = CertificateFactory.getInstance("X.509");
for ( int i = 0; i < signatures.length;i++)
{
ByteArrayInputStream stream = new ByteArrayInputStream(signatures[i].toByteArray());
X509Certificate cert = (X509Certificate) cf.generateCertificate(stream);
debuggable = cert.getSubjectX500Principal().equals(DEBUG_DN);
if (debuggable)
break;
}
}
catch (NameNotFoundException e)
{
//debuggable variable will remain false
}
catch (CertificateException e)
{
//debuggable variable will remain false
}
return debuggable;
}
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Wi-Fi経由でAndroidアプリケーションを実行/インストール/デバッグしますか?
-
[解決済み】自己署名付きlocalhost証明書をChromeが受け入れるようにする方法
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] 警告 あなたのApkは、プライバシーポリシーが必要なパーミッションを使用しています。(android.permission.READ_PHONE_STATE)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リリースモードかデバッグモードかを判断するにはどうすればよいですか?
-
[解決済み】開発中にCrashlyticsを無効化する方法
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] Androidでビットマップから円形領域を切り取る方法
-
[解決済み] Androidです。複数のアクティビティと手動でのビュー切り替え、どちらが良いですか?
-
[解決済み] RelativeLayout は LinearLayout よりも高価ですか?
-
[解決済み] Android Studioのユニットテスト: データ(入力)ファイルの読み込み