Error de suma de comprobación al aprovisionar Android Lollipop

entiendo el mensajeCouldn't use the admin app due to a checksum error. Contact your IT department cuando use el código a continuación. Básicamente tienes dos dispositivos Android Lollipop. Un dispositivo no está provisto (restablecimiento de fábrica) y el otro tiene esta aplicación de programación. La aplicación de programación envía un comando NFC al dispositivo no aprovisionado para indicarle que comience el aprovisionamiento utilizando los datos que le pasa. Se requieren tres campos (ubicación del APK, suma de comprobación del archivo del APK y nombre del paquete) según DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC.

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

De acuerdo con DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM Es una suma de comprobación SHA-1 del archivo. La suma de comprobación no coincide. He probado muchos formatos diferentes de esta suma de comprobación (hexadecimal, hexadecimal con espacios, mayúsculas / minúsculas, base64, texto) y creo que es posible que me haya perdido una prueba.

Desafortunadamente, la fuente de Android Lollipop aún no está disponible, de lo contrario estaría revisando 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: Esto está usando lo últimoVista previa del desarrollador de Android L. Supongo que es completamente posible que esta característica aún no esté terminada. Actualización: la versión real también actúa de esta manera.

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

También publiqué dos solicitudes paraGitHub. Uno envía los datos NFC a la provisión. La otra es solo una aplicación para verificar si la aplicación es el administrador del dispositivo o el propietario del dispositivo. Esperemos que alguien encuentre esto útil. Tendrá que modificar la URL y la suma de comprobación si desea construir DeviceOwnerCheck usted mismo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta