Вопрос по android, service – Есть ли способ сохранить метаданные в манифесте Android частными для пакета?

6

Я хочу использовать метаданные в манифесте Android для настройки поведения службы.

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

Мой сервис является частью библиотеки, и некоторые могут поместить конфиденциальные данные в эти атрибуты, когда они используют мой сервис. Видны ли эти атрибуты метаданных для других установленных пакетов на телефоне через PackageManager, даже если служба не экспортируется?

Ваш Ответ

2   ответа
9

the phone via the PackageManager even if the service is not exported?

Да. Все в манифесте и все ресурсы и ресурсы доступны для всех приложений на устройстве.

1

le to all packages, as CommonsWare said. However, I also discovered that you can keep the content of the value private, by using android:resource instead of android:value. When you use android:resource only the integer id of the resource is returned from the PackageManager, and therefore only your package will have access to the actual resource value.

Update: Оказывается, CommonsWare снова был прав. После дальнейшего изучения все ресурсы и ресурсы становятся общедоступными для ВСЕХ пакетов, установленных на устройстве. Никаких разрешений не требуется.

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);
Да, но значения, которые собраны в коде, потребуют немного более конкретных усилий, чем значения, которые хранятся стандартным способом.
Это может исключить информацию из открытых предложений менеджера пакетов другим приложениям, но довольно просто найти и открыть apk, извлечь двоичный манифест и разобрать его обратно на обычный текст - ситуация с ресурсами должна быть аналогичной , Возможно, не стоит полагаться на то, что мы всегда будем делать это в будущем, но однозначноnot полагаться на кого-то другогоnot быть в состоянии сделать это.
Может кто-нибудь объяснить мне, почему Android сделал выбор сделать все ресурсы и ресурсы видимыми для всех других пакетов? Есть ли какое-нибудь хорошее место, где можно разместить ресурсы? Или вам просто нужно загрузить их во время выполнения и поместить в личный каталог? Alan
Я вижу, что вы говорите. В моем случае я не думаю, что метаданные были бы достаточно чувствительны, чтобы гарантировать запутывание такого рода (без паролей, ключей и т. Д.). Спасибо за совет, хотя. Alan
Разве это не верно для всех файлов dex, активов и ресурсов? Alan

Похожие вопросы