Błąd sumy kontrolnej podczas tworzenia Android Lollipop

Otrzymuję wiadomość Couldn't use the admin app due to a checksum error. Contact your IT department używając poniższego kodu. Zasadniczo masz dwa urządzenia z Androidem. Jedno urządzenie nie jest zaprogramowane (reset fabryczny), a drugie ma na sobie aplikację do programowania. Aplikacja do programowania wysyła polecenie NFC do urządzenia, które nie zostało dostarczone, aby powiedzieć mu, aby rozpoczął aprowizację przy użyciu danych, które do niego przekazujesz. Wymagane są trzy pola (Lokalizacja APK, suma kontrolna pliku APK i Nazwa pakietu) zgodnie z DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC.

The APK jest pobierany. Sprawdzam logi serwera i to wyraźnie pochodzi z urządzenia (AndroidDownloadManager jest w user agencie).

Według DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM jest to suma kontrolna SHA-1 Pliku. Suma kontrolna nie pasuje. Wypróbowałem wiele różnych formatów tej sumy kontrolnej (hex, hex ze spacjami, duże/małe litery, base64, tekst) i myślę, że jest możliwe, że przegapiłem test.

Niestety, Android Lizak źródło nie jest jeszcze dostępne, inaczej bym tam sprawdzał.

Jak to naprawić? Jakieś pomysły?
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);
        }
    }
}

Uwaga: to jest przy użyciu najnowszego Android L Developer Preview . Myślę, że jest całkowicie możliwe, że ta funkcja nie jest jeszcze zakończona. Aktualizacja: aktualna wersja działa również w ten sposób.


APK: https://storage.googleapis.com/randy/DeviceOwnerCheck.apk
suma kontrolna: FRaAsqdPSjp9nC5hKIU / ElPv+e4
wynik: użycie tego adresu URL i tej sumy kontrolnej powoduje błąd i nie dociera nawet do ekranu urządzenia szyfrującego.


Wysłałem również dwie aplikacje do GitHub . Jeden wysyła dane NFC do provide. Drugi to tylko aplikacja do sprawdzania, czy aplikacja jest administratorem urządzenia lub właścicielem urządzenia. Mam nadzieję, że komuś się to przyda. Musisz zmodyfikować adres URL i sumę kontrolną, jeśli chcesz samodzielnie zbudować DeviceOwnerCheck.

Author: Randy, 2014-10-22

3 answers

Kod hashowy musi być bezpieczny dla adresu url. To konwertuje i usuwa końcowe wypełnienie

$ cat Something.apk | openssl dgst -binary -sha1 | openssl base64 | tr '+/' '-_' | tr -d '='
 14
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-27 16:47:20

Wygląda na to, że nie lubi znaków specjalnych w sumie kontrolnej. Udało mi się uruchomić go z moim plikiem apk, ale suma kontrolna nie miała żadnych znaków specjalnych. Kiedy próbowałem użyć pliku apk, dostałem ten sam błąd. Spróbuj odtworzyć plik apk, dopóki nie będzie miał znaków specjalnych, a następnie powinien działać.

Domyślam się, że brakuje jakiegoś unikania znaków specjalnych.

 6
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 19:08:33

Tutaj jest komenda, aby pobrać kod hash.

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

Usuń również wszystkie końcowe paddingi (=).

 2
Author: Yuichi Araki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 05:03:02