Error de suma de comprobación al aprovisionar Android Lollipop

Recibo el mensaje Couldn't use the admin app due to a checksum error. Contact your IT department Couldn't use the admin app due to a checksum error. Contact your IT department cuando utilice el código siguiente. Básicamente tienes dos dispositivos Android Lollipop. Un dispositivo no está provisto (Factory Reset) y el otro tiene esta aplicación de programación. La aplicación de programación envía un comando NFC al dispositivo no provisto para indicarle que inicie el aprovisionamiento utilizando los datos que pasa a él. Hay tres campos requeridos (Ubicación APK, Suma de comprobación del archivo APK y Nombre del paquete) según DevicePolicyManager. MIME_TYPE_PROVISIONING_NFC .

El APK se descarga. Estoy revisando los registros de mi servidor y claramente viene del dispositivo ( AndroidDownloadManager está en el agente de usuario).

De acuerdo con DevicePolicyManager. EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM es una suma de verificación SHA-1 del archivo. La suma de comprobación no coincide. He intentado muchos formatos diferentes de esta suma de comprobación (hex, hexadecimal con espacios, mayúsculas / minúsculas, base64, texto) y supongo que es posible que me perdí una prueba.

Lamentablemente, la fuente de Android Lollipop aún no está disponible, de lo contrario estaría comprobando allí.

¿Cómo puedo solucionar esto? ¿Alguna idea?

 public class ProvisionerActivity extends Activity implements CreateNdefMessageCallback { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this); mNfcAdapter.setNdefPushMessageCallback(this, this); } @Override public NdefMessage createNdefMessage(NfcEvent event) { try { Properties p = new Properties(); p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, "com.example.deviceownertest"); p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, "http://example.com/DeviceOwnerTest.apk"); p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, "19138948d8a607617971af724ffd08dd7eab771b"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); OutputStream out = new ObjectOutputStream(bos); p.store(out, ""); byte[] bytes = bos.toByteArray(); NdefMessage msg = new NdefMessage(NdefRecord.createMime(DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, bytes)); return msg; } catch (Exception e) { throw new RuntimeException(e); } } } 

Nota: Esta es la última versión de Android L Developer Preview . Supongo que es totalmente posible que esta característica no ha terminado todavía. Actualización: La liberación real actúa de esta manera también.


APK: https://storage.googleapis.com/randy/DeviceOwnerCheck.apk
Checksum: FRaAsqdPSjp9nC5hKIU / ElPv + e4
Resultado: El uso de esta URL y esta suma de comprobación da un error y ni siquiera llega a la pantalla del dispositivo cifrado.


También he publicado dos aplicaciones a GitHub . Uno envía los datos NFC a la disposición. El otro es sólo una aplicación para comprobar si la aplicación es admin de dispositivo o propietario de dispositivo. Esperemos que alguien encuentre esto útil. Tendrá que modificar la URL y la suma de comprobación si desea crear DeviceOwnerCheck usted mismo.

El código hash debe ser seguro url. Esto convierte y elimina el acolchado de arrastre

 $ cat Something.apk | openssl dgst -binary -sha1 | openssl base64 | tr '+/' '-_' | tr -d '=' 

Parece que no le gustan los caracteres especiales en la suma de comprobación. Pude conseguirlo para trabajar con mi archivo apk, pero la suma de comprobación no tenía ningún carácter especial. Cuando intenté usar tu archivo apk recibí el mismo error. Intente recrear el apk hasta que no tenga caracteres especiales, y entonces debería funcionar.

Supongo que hay algún tipo de escape de caracteres especiales que falta.

Aquí está el comando para obtener el código hash.

 $ cat Something.apk | openssl dgst -binary -sha1 | openssl base64 

También, quite cualquier acolchado de arrastrar (=).

  • Inicio de la aplicación cuando MIFARE Classic se detecta con Android NFC
  • Emulación de tarjeta NFC Android
  • Cómo emular una etiqueta nfc en un teléfono Android
  • Android responde a PN532 InListPassiveTarget
  • Cómo se registra una aplicación de Android en el sistema operativo
  • ¿Puedo leer una tarjeta HID iClass con un dispositivo Android?
  • Leer bloque clásico NFC
  • Leer los detalles de la tarjeta de crédito de Visa PayWave vía NFC en Android
  • ¿Cómo puede mi aplicación averiguar qué modo NFC está habilitado?
  • Obtener Nexus S Android NFC en modo de emulación de tarjeta
  • Emulación de etiquetas RFID en el emulador de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.