Erreur de contrôle lors de la fourniture d'Android Lollipop

Je reçois le message 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 lorsque vous utilisez le code ci-dessous. Fondamentalement, vous disposez de deux appareils Android Lollipop. Un périphérique n'est pas prévu (Réinitialisation d'usine) et l'autre dispose de cette application de programmation. L'application de programmation envoie une commande NFC au périphérique non prévisible pour lui dire de commencer la provision en utilisant les données que vous lui transmettez. Il existe trois champs requis (emplacement APK, somme de contrôle de fichier APK et nom de package) selon DevicePolicyManager. MIME_TYPE_PROVISIONING_NFC .

L'APK est téléchargé. Je vérifie mes journaux de serveur et cela provient clairement du périphérique ( AndroidDownloadManager est dans l'agent utilisateur).

  • Planificateur de thread de fond unique RxJava
  • Décodage de polyligne avec nouvelle API Google Maps
  • Le fichier R.java n'est pas généré automatiquement Eclipse
  • "Ressource introuvable" lors de la création d'une application Android sous IntelliJ 9.0 Maia Public Beta
  • Android: Force EditText pour supprimer la mise au point?
  • ViewSwitcher et la hauteur de mise en page dans Android
  • Selon DevicePolicyManager. EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM c'est une somme de contrôle SHA-1 du fichier. La somme de contrôle ne correspond pas. J'ai essayé de nombreux formats différents de cette somme de contrôle (hex, hex avec espaces, majuscule / minuscule, base64, texte) et je suppose qu'il est possible que j'ai manqué un test.

    Malheureusement, la source Android Lollipop n'est pas encore disponible, sinon je vérifierais ici.

    Comment puis-je réparer ça? Des pensées?

     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); } } } 

    Remarque: ceci utilise la dernière version du développeur Android L. Je suppose qu'il est tout à fait possible que cette fonctionnalité ne soit pas encore terminée. Mise à jour: la version réelle agit de la même façon.


    APK: https://storage.googleapis.com/randy/DeviceOwnerCheck.apk
    Checksum: FRaAsqdPSjp9nC5hKIU / ElPv + e4
    Résultat: l' utilisation de cette URL et cette somme de contrôle donne une erreur et ne parvient même pas à l'écran du cryptage du périphérique.


    J'ai également posté deux applications sur GitHub . On envoie les données NFC à la provision. L'autre est juste une application pour vérifier si l'application est l'administrateur de périphérique ou le propriétaire de l'appareil. Espérons que quelqu'un trouve cela utile. Vous devrez modifier l'URL et la somme de contrôle si vous souhaitez construire DeviceOwnerCheck vous-même.

  • RegisterReceiver for Broadcast uniquement si ce n'est déjà enregistré?
  • Comment définir la valeur alpha pour ma mise en page Relative?
  • Android: l'avis EditText en une seule ligne
  • API Android ou bibliothèque pour fichiers Microsoft Office
  • Java.lang.IllegalStateException: Fragment non attaché à l'activité
  • Quelle est l'utilisation du layoutinflator?
  • 3 Solutions collect form web for “Erreur de contrôle lors de la fourniture d'Android Lollipop”

    Le code hash doit être sécurisé. Cela convertit et supprime le rembourrage de fuite

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

    Il semble qu'il ne ressemble pas aux caractères spéciaux de la somme de contrôle. J'ai pu le faire fonctionner avec mon fichier apk, mais la somme de contrôle n'a pas de caractères spéciaux. Lorsque j'ai essayé d'utiliser votre fichier apk, j'ai eu la même erreur. Essayez de recréer l'apk jusqu'à ce qu'il ne dispose pas de caractères spéciaux, et cela devrait fonctionner.

    Je suppose qu'il y a une sorte de fuite de caractères spéciaux qui manquent.

    Voici la commande pour obtenir le code hash.

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

    En outre, retirez tous les coussinets de fuite (=).

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.