6

Chcę użyć metadanych w manifeście Android, aby dostosować zachowanie usługi.Czy istnieje sposób przechowywania meta-danych w manifeście systemu Android jako prywatny pakiet?

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

Mój serwis jest częścią biblioteki, i możliwe jest, niektóre mogą umieścić dane wrażliwe w tych atrybutów, gdy korzystają z moich usług. Czy te atrybuty metadanych są widoczne dla innych zainstalowanych pakietów w telefonie za pośrednictwem programu PackageManager, nawet jeśli usługa nie jest eksportowana?

Odpowiedz

9

Czy te atrybuty metadanych są widoczne dla innych zainstalowanych pakietów w telefonie za pośrednictwem menedżera pakietów, nawet jeśli usługa nie została wyeksportowana?

Tak. Wszystko w manifeście i wszystko w Twoich zasobach i zasobach jest dostępne dla wszystkich aplikacji na urządzeniu.

1

Po wykonaniu niektórych testów potwierdziłem, że wszystkie pola metadanych są widoczne dla wszystkich pakietów, jak powiedział CommonsWare. Jednak odkryłem również, że możesz zachować zawartość wartości prywatnej, używając android: resource zamiast android: value. Gdy używasz androida: resource only, identyfikator liczby całkowitej zasobu jest zwracany z poziomu menedżera pakietów, dlatego tylko twój pakiet będzie miał dostęp do rzeczywistej wartości zasobu.

Aktualizacja: Okazuje się, że miał rację CommonsWare ponownie. Po dalszych badaniach wszystkie zasoby i zasoby są publicznie widoczne dla WSZYSTKICH pakietów zainstalowanych na urządzeniu. Nie są wymagane żadne uprawnienia.

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

Może to wykluczyć informacje z ofert publicznych Menedżer pakietów do innych aplikacji, ale jest to dość proste, aby znaleźć i otworzyć apk, wyodrębnić manifestu binarny i demangle go z powrotem do zwykłego tekstu - sytuacja z zasoby powinny być podobne. Nie należy chyba polegać na tym, że zawsze można to robić w przyszłości, ale zdecydowanie nie ** polegać na kimś innym * nie * być w stanie tego zrobić. –

+0

Czy to nie dotyczy wszystkich plików, zasobów i zasobów? – Alan

+0

Tak, ale wartości złożone w kodzie wymagałyby nieco bardziej specyficznego wysiłku niż wartości, które są przechowywane w standardowy sposób. –

Powiązane problemy