2016-06-16 19 views
6

Wczoraj dostałem nowe uaktualnienie do podglądu w Androidzie N. Od czasu aktualizacji nie mogę już uruchomić aplikacji.Jasny tekst Ruch HTTP do witryny myserver.com jest niedozwolony w przypadku podglądu Androida N

java.io.IOException: Cleartext HTTP traffic to myserver.com not permitted 

Próbowałem ustawić usesCleartextTraffic do true w manifeście lub dodać network_security_config.xml

<?xml version="1.0" encoding="utf-8"?> 
<network-security-config> 
    <domain-config cleartextTrafficPermitted="true"> 
     <domain includeSubdomains="true">myserver.com</domain> 
    </domain-config> 
</network-security-config> 

Ani wyszło. Jakieś pomysły na temat tego, co się tam dzieje?

Kiedy próbuję zdefiniować networkSecurityConfig w manifeście, otrzymuję błąd kompilacji

Error:(35) No resource identifier found for attribute 'networkSecurityConfig' in package 'android' 

Naprawdę nie wiem, dlaczego. Plik jest tam i wszystko wygląda dobrze.

Znaleziono this sugestię w narzędziu do śledzenia błędów Androida od Google. Sugerują przeniesienie definicji network_security_config do meta-data. Nadal mam ten sam wyjątek.

+0

Po prostu powiedziałeś, że Twoja aplikacja używa pliku konfiguracyjnego? na przykład 'android: networkSecurityConfig =" @ xml/network_security_config "' w twoim manifeście aplikacji. – vcsjones

+0

Nie wydaje mi się, że mam ten problem, przynajmniej w aplikacji, którą właśnie przetestowałem. Prosty ruch HTTP w postaci zwykłego tekstu jest w porządku. Możesz spróbować odinstalować i ponownie zainstalować aplikację. Ponadto używasz 'StrictMode'? Być może funkcja ['detectCleartextNetwork()'] (https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html#detectCleartextNetwork()) jest włączona – CommonsWare

+0

Odinstalowałem i ponownie zainstalowałem kilka razy już i nie używam StrictMode. Nie jestem jednak w stanie zdefiniować networkSecurityConfig w manifeście. Zaktualizuję pytanie – SimonSays

Odpowiedz

9

Znany jest problem z Androidem Developer Developer Preview 4, w którym, jeśli aplikacja modyfikuje jego ApplicationInfo.flags, uruchamia blokowanie ruchu jawnego tekstu z aplikacji, nawet jeśli aplikacja nie zażądała zablokowania ruchu jawnego tekstu. Poprawka znajduje się w następnej wersji Developer Preview. Dlatego nie ma to nic wspólnego z konfiguracją Network Security Config. Wygląda na to, że nawet nie musisz zadeklarować niestandardowej konfiguracji zabezpieczeń sieci.

Jeśli nie możesz czekać do następnego podglądu programisty Android N, sprawdź swoją aplikację pod kątem miejsc, w których modyfikuje ona swoją własną ApplicationInfo.flags. Zazwyczaj ma to postać getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE lub getApplicationInfo().flags = ApplicationInfo.FLAG_DEBUGGABLE. Poprawka dla tych zastosowań to (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE).

Alternatywnie, jako obejście, należy wywołać NetworkSecurityPolicy.isCleartextTrafficPermitted() na początku cyklu życia aplikacji, jak to możliwe. To obejście powinno działać, jeśli zostanie wywołane przed kodem, który narusza z ApplicationInfo.flags.

+0

Awesome! To było to! Dzięki wielkie! – SimonSays

+0

Po prostu ciekawa, czy zauważyłeś, że twoja aplikacja przez przypadek zmodyfikowała swoje "ApplicationInfo.flags"? –

+0

Tak, to było. Użyliśmy '& =' do sprawdzenia zamiast prostego '&' – SimonSays