Skip to content

Instantly share code, notes, and snippets.

@diyfr
Last active August 30, 2017 13:26
Show Gist options
  • Save diyfr/4ce3e08e5463e852b1350ec93e719b50 to your computer and use it in GitHub Desktop.
Save diyfr/4ce3e08e5463e852b1350ec93e719b50 to your computer and use it in GitHub Desktop.
Check your app
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;

public String getAppSignature(Context context) {
  String result = null;
  try {
    PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES);
    for (Signature signature : packageInfo.signatures) {
      byte[] signatureBytes = signature.toByteArray();
      /*
      InputStream input = new ByteArrayInputStream(cert);
      CertificateFactory cf = CertificateFactory.getInstance("X509");
      X509Certificate c = (X509Certificate) cf.generateCertificate(input);
      MessageDigest md = MessageDigest.getInstance("MD5");
      result = bytesToHex(md.digest(c.getPublicKey().getEncoded()));
      */
      MessageDigest md = MessageDigest.getInstance("SHA1", "BC");
      md.update(signature.toByteArray());
      result = bytesToHex(md.digest());
      // OR
      // result = Base64.encodeToString(md.digest(), Base64.DEFAULT);
  
    }
  } catch (Exception e) {
  }
  return result;
}

private static String bytesToHex(byte[] bytes) {
  final char[] hexArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  char[] hexChars = new char[bytes.length * 2];
  int v;
  for (int j = 0; j < bytes.length; j++) {
    v = bytes[j] & 0xFF;
    hexChars[j * 2] = hexArray[v >>> 4];
    hexChars[j * 2 + 1] = hexArray[v & 0x0F];
  }
  return new String(hexChars);
}

// FOR GOOGLE PLAYSTORE -> "com.android.vending"
public String getInstaller(final Context context){
  return context.getPackageManager().getInstallerPackageName(context.getPackageName());
}

// get Syteme property
private static String getSystemProperty(String name)throws Exception {
  Class systemPropertyClazz = Class.forName("android.os.SystemProperties");
  return (String) systemPropertyClazz.getMethod("get", new Class[] { String.class }).invoke(systemPropertyClazz, new Object[] { name });
}
// Knows values for Emulator
public static boolean checkEmulator()throws Exception {
    return getSystemProperty("ro.hardware").contains("goldfish")||
    getSystemProperty("ro.kernel.qemu").length() > 0 ||
    getSystemProperty("ro.product.model").equals("sdk");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment