Android用コード取得アプリMD 5署名
2748 ワード
2016-12-23で遭遇したちょっとした問題
以前はEclipseを使用していましたが、アプリケーションMD 5の署名を取得すると、正式なkeyでもテストでもパッケージ前に直接見ることができます.その後Android Studioに変更すると、面倒になりますので、コマンドラインを使わなければなりません.このネットで探してみるとたくさんあります.しかし、覚えるのがおっくうなので、インストールした騰訊QQオープンプラットフォームでダウンロードした署名を取得するapkを選んで、いつもどこでダウンロードするか忘れて、今自分のネットディスクに置いています.apkとjar
今日ちょうどプロジェクトの中で手に入れなければならなくて、ネット上で関連するコードを探して、結局ネット上で探したのはすべてこの山で、運行した後に1山の文字列を返して、全く読めません..
仕方なく、探すのがおっくうなので、逆コンパイルして関連コードを出してみます.
試してみたら、正常に入手できました.
以前はEclipseを使用していましたが、アプリケーションMD 5の署名を取得すると、正式なkeyでもテストでもパッケージ前に直接見ることができます.その後Android Studioに変更すると、面倒になりますので、コマンドラインを使わなければなりません.このネットで探してみるとたくさんあります.しかし、覚えるのがおっくうなので、インストールした騰訊QQオープンプラットフォームでダウンロードした署名を取得するapkを選んで、いつもどこでダウンロードするか忘れて、今自分のネットディスクに置いています.apkとjar
今日ちょうどプロジェクトの中で手に入れなければならなくて、ネット上で関連するコードを探して、結局ネット上で探したのはすべてこの山で、運行した後に1山の文字列を返して、全く読めません..
try {
/** **/
PackageInfo packageInfo = getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, PackageManager.GET_SIGNATURES);
/******* *******/
Signature[] signatures = packageInfo.signatures;
StringBuilder builder = new StringBuilder();
/******* *******/
for (Signature signature : signatures) {
builder.append(signature.toCharsString());
}
/************** **************/
String signature = builder.toString();
Log.e(" ", BuildConfig.APPLICATION_ID + "__" + signature);
} catch (Exception e) {
e.printStackTrace();
Log.e(" ", " __" + e);
}
仕方なく、探すのがおっくうなので、逆コンパイルして関連コードを出してみます.
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, PackageManager.GET_SIGNATURES);
String signValidString = getSignValidString(packageInfo.signatures[0].toByteArray());
Log.e(" ", BuildConfig.APPLICATION_ID + "__" + signValidString);
} catch (Exception e) {
Log.e(" ", " __" + e);
}
private String getSignValidString( byte[] paramArrayOfByte) throws NoSuchAlgorithmException {
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(paramArrayOfByte);
return toHexString(localMessageDigest.digest());
}
public String toHexString(byte[] paramArrayOfByte) {
if (paramArrayOfByte == null) {
return null;
}
StringBuilder localStringBuilder = new StringBuilder(2 * paramArrayOfByte.length);
for (int i = 0; ; i++) {
if (i >= paramArrayOfByte.length) {
return localStringBuilder.toString();
}
String str = Integer.toString(0xFF & paramArrayOfByte[i], 16);
if (str.length() == 1) {
str = "0" + str;
}
localStringBuilder.append(str);
}
}
試してみたら、正常に入手できました.
.BuildConfig
という類はとても使いやすいです.BuildConfig.APPLICATION_ID
は、現在のアプリケーションパッケージ名を直接取得する.BuildConfig.FLAVOR
現在のチャネルパッケージ名を取得する.BuildConfig.DEBUG
debugパッケージかどうかを判断し、以前はパッケージ化前にbooleanを手動で変更した.四木さんが言ってくれたこの類に感謝します.