2

我正在实施 Google 的许可系统,对于混淆器,我需要生成一个唯一的 ID。文件说

/**
 * @param salt an array of random bytes to use for each (un)obfuscation
 * @param applicationId application identifier, e.g. the package name
 * @param deviceId device identifier. Use as many sources as possible to
 *    create this unique identifier.
 */
public AESObfuscator(byte[] salt, String applicationId, String deviceId) {

除了通过以下方式获得的包名和设备 ID 之外

private String android_id = Secure.getString(getContext().getContentResolver(),
                                                    Secure.ANDROID_ID); 

我还可以使用哪些其他来源?

谢谢

4

1 回答 1

2

Secure.ANDROID_ID有时已知为空,并且我相信可以在有根手机上进行更改,因此您应该考虑检查其他一些选项,例如TelephonyManager.getDeviceId()

我在这个问题上找到的一个很好的片段执行以下操作来生成唯一 ID:

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice, tmSerial, androidId;

tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
String deviceId = deviceUuid.toString();
于 2012-10-26T14:45:17.357 回答