2016-06-16 13 views
6

Hôm qua tôi đã nhận được bản nâng cấp mới cho bản xem trước Android N. Kể từ khi tôi nâng cấp, tôi không thể khởi động ứng dụng của mình nữa.Lưu lượng truy cập HTTP Cleartext tới myserver.com không được phép trên bản xem trước Android N

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

Tôi đã cố gắng để thiết lập usesCleartextTraffic để true trong biểu hiện hoặc để thêm một 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> 

Cả đã làm việc. Bất kỳ ý tưởng về những gì đang xảy ra ở đó?

Khi tôi cố gắng xác định networkSecurityConfig trong biểu hiện, tôi nhận được một lỗi biên dịch

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

Không thực sự chắc chắn lý do tại sao. Các tập tin là có và tất cả mọi thứ có vẻ tốt.

Tìm thấy đề xuất this trong trình theo dõi vấn đề Android từ Google. Họ đề nghị di chuyển định nghĩa network_security_config sang số meta-data. Tôi vẫn nhận được ngoại lệ tương tự mặc dù.

+0

Để chắc chắn, bạn thực sự đã nói với ứng dụng của mình sử dụng tệp cấu hình? ví dụ. 'android: networkSecurityConfig =" @ xml/network_security_config "' trong tệp kê khai ứng dụng của bạn. – vcsjones

+0

Tôi dường như không có vấn đề này, ít nhất là trong các ứng dụng tôi chỉ cần thử nghiệm. Lưu lượng truy cập HTTP văn bản thuần túy là tốt. Bạn có thể thử gỡ cài đặt hoàn toàn và cài đặt lại ứng dụng. Ngoài ra, bạn đang sử dụng 'StrictMode'? Có lẽ ['detectCleartextNetwork()'] (https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html#detectCleartextNetwork()) đang được bật – CommonsWare

+0

Tôi đã gỡ cài đặt và cài đặt lại nhiều lần đã và tôi không sử dụng StrictMode. Tôi không thể xác định networkSecurityConfig trong tệp kê khai. Tôi sẽ cập nhật câu hỏi – SimonSays

Trả lời

9

Có một vấn đề đã biết trong Android N Developer Preview 4, nếu ứng dụng sửa đổi ApplicationInfo.flags, nó sẽ kích hoạt chặn lưu lượng truy cập rõ ràng từ ứng dụng, ngay cả khi ứng dụng không yêu cầu chặn lưu lượng truy cập rõ ràng. Bản sửa lỗi nằm trong Bản xem trước dành cho nhà phát triển tiếp theo. Vì vậy, điều này không có gì để làm với cấu hình bảo mật mạng của bạn. Trong thực tế, có vẻ như bạn thậm chí không cần phải khai báo một cấu hình bảo mật mạng tùy chỉnh.

Nếu bạn không thể đợi cho đến Bản xem trước dành cho nhà phát triển Android N tiếp theo, hãy kiểm tra ứng dụng của bạn cho những địa điểm mà nó sửa đổi ApplicationInfo.flags riêng của ứng dụng. Thông thường, hình thức này có dạng là getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE hoặc getApplicationInfo().flags = ApplicationInfo.FLAG_DEBUGGABLE. Bản sửa lỗi cho các tập quán này là (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE).

Ngoài ra, để giải quyết sự cố, hãy gọi NetworkSecurityPolicy.isCleartextTrafficPermitted() sớm nhất có thể trong vòng đời của ứng dụng nhất có thể. Cách giải quyết này sẽ hoạt động nếu được gọi trước mã có mã số ApplicationInfo.flags.

+0

Tuyệt vời! Điều đó là vậy đó! Cám ơn rất nhiều! – SimonSays

+0

Chỉ tò mò thôi, bạn có thấy rằng ứng dụng của bạn đã vô tình sửa đổi 'ApplicationInfo.flags' của nó? –

+0

Vâng. Chúng tôi đã sử dụng '& =' cho một kiểm tra thay vì một '&' đơn giản – SimonSays

Các vấn đề liên quan