2015-08-13 16 views
16

Tôi đang sử dụng phản ánh freeStorageAndNotify:Android M phương pháp phản ánh phương pháp freeStorageAndNotify ngoại lệ

Method freeStorageAndNotify = null; 
freeStorageAndNotify = service.packageManager.getClass().getMethod(
       "freeStorageAndNotify", long.class, IPackageDataObserver.class); 
freeStorageAndNotify.invoke(PackageManager.class, maxCache + freeSpace, packageDataObserver); 

Điều này gây InvocationTargetException:

java.lang.SecurityException: Neither user 10199 nor current process has android.permission.CLEAR_APP_CACHE. 

Một số điểm: - Tôi đã có android.permission.CLEAR_APP_CACHE - Điều này chỉ xảy ra trong phiên bản Android "M" (Flashed xem trước sdk từ trang web của nhà phát triển)

I biết đây là một hack, và google không mang lại một số API chính thức cho rằng, Nhưng có rất nhiều ứng dụng dọn dẹp làm sạch tất cả bộ nhớ cache của thiết bị chỉ với một cú nhấp chuột, vì vậy nếu ai đó biết cách bỏ qua vấn đề này với một cách giải quyết khác ' sẽ rất vui khi thấy điều đó.

Cảm ơn rất nhiều vì sự giúp đỡ

+3

"Tôi đã có android.permission.CLEAR_APP_CACHE - Điều này chỉ xảy ra trong phiên bản" M "Android (Flash sdk xem trước từ trang web của nhà phát triển)" - có thể họ đã thay đổi 'protectionLevel' của quyền này thành' signature' hoặc 'system'. Điều đó sẽ giải thích các triệu chứng. – CommonsWare

+0

Đó là một sự xấu hổ :) chúng tôi cũng chỉ cần bỏ qua điều đó. Bất kỳ đề xuất bắt đầu từ đâu? cảm ơn –

+2

Tôi đã kiểm tra các quyền trong 'framework-res.apk' cho Bản xem trước thứ 3 M và mức bảo vệ thực sự là 'chữ ký | hệ thống' cho cả hai' CLEAR_APP_CACHE' và 'DELETE_CACHE_FILES' –

Trả lời

12

a bug huy động trên Android 5 liên quan đến cách bất kỳ ứng dụng có thể quét sạch tất cả các file cache với một sự cho phép thường xuyên, nhưng không thể quét sạch file cache một gói của trừ với một chữ ký cấp sự cho phép. Chi tiết của nó là số

PackageManagerdeleteApplicationCacheFiles() để xóa bộ nhớ cache khỏi một gói. Phương thức này bị ẩn khỏi SDK và phương thức này yêu cầu DELETE_CACHE_FILES, quyền cấp chữ ký.

PackageManager cũng có phương thức freeStorageAndNotify(), để xóa tệp bộ nhớ cache từ tất cả các gói. Phương thức này bị ẩn khỏi SDK và yêu cầu phải có sự cho phép CLEAR_APP_CACHE, chỉ được gắn cờ là "nguy hiểm".

Được đề xuất DELETE_CACHE_FILES nên có mức độ thoải mái, CLEAR_APP_CACHE sẽ được nâng cấp.

Một kỹ sư khuôn khổ phản ứng

Lưu ý rằng freeStorageAndNotify's mục đích không phải là để tiêu diệt tất cả các bộ nhớ cache file, nhưng để giải phóng lượng X của không gian, ví dụ bằng cách lưu trữ chơi trước khi nó cố gắng để tải về và cài đặt một ứng dụng. Vì vậy, có lý do để sử dụng nó hoạt động tốt với hệ thống, nhưng không có lý do gì cho ứng dụng sử dụng phương pháp chỉ xóa tất cả các tệp bộ nhớ cache một cách mù quáng cho một ứng dụng đơn lẻ (chỉ dành cho giao diện người dùng ứng dụng Cài đặt).

Nếu thực sự nó không phải là một lỗi ứng dụng tức là bạn đã không sai lầm các điều khoản và nó hoạt động trên Marshmallow/6/api 23 và không phải người khác mà chỉ có thể có nghĩa là nó đã trở thành một sự cho phép mức độ chữ ký cũng , như DELETE_CACHE_FILES.

Một chữ ký | Hệ thống phân quyền, có nghĩa là nó chỉ có thể được tổ chức bởi ứng dụng được ký kết với chìa khóa ký của firmware hoặc được cài đặt trên phân vùng hệ thống (ví dụ, bằng cách sử dụng một thiết bị bắt nguồn từ).Như được mô tả trong this answer.

Điều này sẽ có ý nghĩa, xem xét mục đích sử dụng/tầm nhìn của họ (không có lý do gì để sử dụng phương pháp chỉ xóa mù tất cả tệp bộ nhớ cache cho một ứng dụng). Nó thậm chí có thể bị hạn chế do lỗi đó. Khi mã của Android 6 sẽ xuất hiện, chúng tôi sẽ biết rõ hơn (hiện có sẵn là 5.1.1 - link to PackageManager's freeStorageAndNotify).

+2

Cách các ứng dụng của bên thứ ba khác như' Làm sạch chính 'vẫn có thể xóa bộ nhớ cache hệ thống của tất cả các ứng dụng đã cài đặt bằng cách lấy quyền truy cập từ người dùng cho thiết bị 6.0? – Audumbar

+0

Tôi cho rằng bạn nên hỏi họ cách họ làm điều đó. Đó là nếu họ quan tâm đến việc tiết lộ nó. Hoặc bạn thực sự có thể thử và đăng câu hỏi này. –

2

Tham khảo các trang sau: permissions by protection levelprotection level definitions.

android.permission.CLEAR_APP_CACHE

này thuộc mức độ bảo vệ "chữ ký | đặc quyền" có nghĩa là chỉ có cùng chữ ký hoặc các ứng dụng đặc quyền (hệ thống ký cơ bản) có thể có sự cho phép này.

Ngoài ra, bạn nên kiểm tra số Behavior Changes nói chung.

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