6

Tôi muốn sử dụng siêu dữ liệu trong tệp kê khai Android để tùy chỉnh hành vi của dịch vụ.Có cách nào để giữ siêu dữ liệu trong tệp kê khai Android riêng tư với gói không?

<service 
    android:name=".SampleService" 
    android:exported="false"> 
    <meta-data 
     android:name="sampleName" 
     android:resource="@string/sampleValue" /> 
</service> 

Dịch vụ của tôi là một phần của thư viện và một số có thể đưa dữ liệu nhạy cảm vào các thuộc tính này khi sử dụng dịch vụ của tôi. Các thuộc tính siêu dữ liệu này có hiển thị với các gói được cài đặt khác trên điện thoại thông qua PackageManager ngay cả khi dịch vụ không được xuất không?

Trả lời

9

Các thuộc tính siêu dữ liệu này có thể hiển thị với các gói được cài đặt khác trên điện thoại thông qua PackageManager ngay cả khi dịch vụ không được xuất?

Có. Tất cả mọi thứ trong tệp kê khai và mọi thứ trong tài nguyên và nội dung của bạn đều có thể truy cập được đối với tất cả các ứng dụng trên thiết bị.

1

Sau khi thực hiện một số kiểm tra, tôi xác nhận rằng tất cả các trường siêu dữ liệu đều hiển thị cho tất cả các gói, như CommonsWare cho biết. Tuy nhiên, tôi cũng phát hiện ra rằng bạn có thể giữ nội dung của giá trị riêng tư, bằng cách sử dụng android: resource thay vì android: value. Khi bạn sử dụng android: resource chỉ id nguyên của tài nguyên được trả về từ PackageManager, và do đó chỉ gói của bạn mới có quyền truy cập vào giá trị tài nguyên thực tế.

Cập nhật: Nó chỉ ra rằng CommonsWare đã đúng một lần nữa. Sau khi điều tra thêm, tất cả các tài nguyên và tài sản được hiển thị công khai cho tất cả các gói được cài đặt trên thiết bị. Không yêu cầu quyền.

PackageManager pm = getPackageManager(); 
PackageInfo info = pm.getPackageInfo("test.package", PackageManager.GET_META_DATA|PackageManager.GET_SERVICES); 
int resourceId = info.services[0].metaData.getInt("sampleName"); 
String resourceValue = pm.getResourcesForApplication("test.package").getString(resourceId); 
+0

Làm như vậy có thể loại trừ thông tin từ dịch vụ công khai của người quản lý gói tới các ứng dụng khác, nhưng việc định vị và mở gói ứng dụng là giải quyết đơn giản, và giải mã nó trở lại văn bản thuần túy tài nguyên nên tương tự. Người ta có lẽ không nên dựa vào việc luôn luôn có thể làm điều đó trong tương lai, nhưng người ta chắc chắn phải ** không ** dựa vào người khác * không * có thể làm như vậy. –

+0

Điều đó không đúng đối với tất cả các tệp dex, nội dung và tài nguyên? – Alan

+0

Có, nhưng các giá trị được lắp ráp trong mã sẽ yêu cầu nỗ lực cụ thể hơn một chút so với các giá trị được lưu trữ theo cách tiêu chuẩn. –

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