Java Android设备Udid与AirWatch Udid

Java Android设备Udid与AirWatch Udid,java,android,vmware,airwatch,Java,Android,Vmware,Airwatch,我通过编程获得的android设备UDID与同一设备的AirWatch UDID不同。 是否有其他方法获取设备Udid 我使用Secure.ANDROID_ID获取udid,但它与AirWatch获取的udid仍然不同 Secure.getString(getContentResolver(),Secure.ANDROID_ID); AirWatch UDID的长度如下: ak26fs007bf8S786f2fr281d22c6996d 我期望得到相同的输出,但从上面的代码中得到的Udid是:

我通过编程获得的android设备UDID与同一设备的AirWatch UDID不同。 是否有其他方法获取设备Udid

我使用Secure.ANDROID_ID获取udid,但它与AirWatch获取的udid仍然不同

Secure.getString(getContentResolver(),Secure.ANDROID_ID);
AirWatch UDID的长度如下:
ak26fs007bf8S786f2fr281d22c6996d

我期望得到相同的输出,但从上面的代码中得到的Udid是:
63a34441u6ajj2ed

我认为您是Android应用程序开发的新手。在安卓系统中,总是有一些关于唯一设备标识符的混淆。API级别3中引入了,返回的值有时会有所不同

以前Android操作系统提供了一些唯一的设备id。但如果设备格式化或安装了新的自定义操作系统,则会返回新值。稍后,在某些设备中返回
null
值。之后,它的工作方式就不同了

谷歌建议应用程序开发人员跟踪应用程序安装而不是设备,这将适合大多数使用情况

对于跟踪应用程序安装,您可以创建一个唯一的id,如
UUID.randomUUId().toString()
,也可以创建自己的解决方法

以下是一些可能对您有所帮助的链接

  • 上面写的几点是:


    air watch UDID是通过将设备的多个方面散列在一起生成的,其中Secure.ANDROID_ID只是其中一个-ro.serialno很可能是另一个,但主要的一点是它们将这些方面放在一起,使用128位散列,这就是您得到的结果

    如果您绝对必须匹配他们的计算,那么并不难找到他们的APK.dex,在那里他们在类方法中执行计算,只需通过反编译自己查看代码即可

    他们的代码自然是模糊的,但您可以从

    airwatch.core.AirWatchDevice.isDeviceAudidinInitialized()

    从一个或两个位置调用,如果返回false,则调用UDID方法(实际的完整方法名在这里是无用的,因为它被混淆了,就像“d.a.p0.d0.g0.c”一样,它在每个构建中都会更改,但isDeviceAudidInitialized()仍然可见)

    另一种方法是太多地寻找他们在哪里捕鱼。不

    通过java.lang.Class.getMethod(“android.os.SystemProperties”、“get”、…)

    其中,他们还寻找android.os.Build.MANUFACTURER和一系列其他属性


    另外,在某些版本中,formatDeviceUid是一种直接应用MD5的方法。

    感谢您提供的信息,我理解您的意思,但在AirWatch中,他们使用UDID来识别设备,这是我想要获得的ID,用于验证设备是否存在于AirWatch DB中。我不清楚您正在尝试做什么。Airwatch和Android在这里有什么关系?你想做什么?也许这有助于澄清问题。AirWatch为所有设备(iOS和Android)填充“UDID”属性,即使Android中没有所谓的“UDID”。对于iOS设备,它显然是手机的实际UDID。对于Android设备,它包含32个字符的十六进制值。Op正试图确定这在Android设备上对应什么。它似乎与ANDROID_ID或序列号不匹配。它可能是IMEI/MEID的某种特殊格式?这真是一个问题,同样的问题。需要一个与AirWatch设备ID匹配的系统ID。AirWatch当前正在使用ro.serialno,但我不知道他们是如何访问此设备的。谢谢!有没有什么方法可以让我的设备得到同样的效果?是的。使用它们的实现、反编译并将其嵌入到您自己的应用程序中,将生成相同的ID。只要确保您拥有与它们相同的权限(如果需要)。另一个(尽管更复杂)的选择是精确定位他们计算U[D]ID的确切方法,让他们的清单android:debuggable和Diff、walk through或eve转储内存,直到找到UDID,然后从那里开始工作。
    When working with Android identifiers, follow these best practices:
    
    #1: Avoid using hardware identifiers. In most use cases, you can avoid using hardware identifiers, such as SSAID (Android ID) and IMEI, without limiting required functionality.
    
    #2: Only use an Advertising ID for user profiling or ads use cases. When using an Advertising ID, always respect users' selections regarding ad tracking. Also, ensure that the identifier cannot be connected to personally identifiable information (PII), and avoid bridging Advertising ID resets.
    
    #3: Use an Instance ID or a privately stored GUID whenever possible for all other use cases, except for payment fraud prevention and telephony. For the vast majority of non-ads use cases, an Instance ID or GUID should be sufficient.
    
    #4: Use APIs that are appropriate for your use case to minimize privacy risk. Use the DRM API for high-value content protection and the SafetyNet APIs for abuse protection. The SafetyNet APIs are the easiest way to determine whether a device is genuine without incurring privacy risk.