[英]Is there a way to keep meta-data in the Android manifest private to the package?
我想在Android清单中使用元数据来自定义服务的行为。
<service
android:name=".SampleService"
android:exported="false">
<meta-data
android:name="sampleName"
android:resource="@string/sampleValue" />
</service>
我的服务是库的一部分,有些人可能会在使用我的服务时将敏感数据放入这些属性中。 即使服务未导出,这些元数据属性是否可通过PackageManager对手机上的其他已安装软件包可见?
即使服务未导出,这些元数据属性是否可通过PackageManager对手机上的其他已安装软件包可见?
是。 清单中的所有内容以及资源和资产中的所有内容都可供设备上的所有应用程序访问。
在做了一些测试之后,我确认所有的数据字段对于所有包都是可见的,正如CommonsWare所说的那样。
但是,我还发现你可以通过使用android:resource而不是android:value来保持值的内容私有。
当您使用android:resource时,只从PackageManager返回资源的整数id,因此只有您的包才能访问实际的资源值。
更新:事实证明,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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.