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).
- NFC y MIME TYPE sensible a mayúsculas y minúsculas
- KitKat: Cómo enrutar las APDU a la tarjeta SIM
- Aplicación de Android para imitar una tarjeta RFID física
- ¿Escribir mensaje NDEF varias veces a la misma etiqueta?
- Etiqueta Android NFC recibida con el receptor de difusión
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.
- Emulación de tarjeta de host en Android (4.4 / KitKat y superior) con Nexus 5
- No se pueden enviar datos desde o hacia un Galaxy Nexus a través de LLCP
- Tarjeta Emulate Mifare con Android 4.4
- Mejor NFC SDK para ACR122U y ACR1222L
- Cómo permitir sólo la interacción NFC con dispositivos que tienen la misma aplicación / actividad en ejecución
- ¿Es posible tener una aplicación "Profile Owner" en Android Lollipop que no está presente
- Desarrollo de Android NFC con Fragment
- ¿Cómo pasar la intención de Android a nadie más que a mi propia aplicación?
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 (=).