【问题标题】:Prevent service collisions after aapt --rename-manifest-package在 aapt --rename-manifest-package 之后防止服务冲突
【发布时间】:2014-03-05 15:59:22
【问题描述】:

我正在创建一个白标应用程序。我使用 --rename-manifest-package 选项通过 aapt 运行项目。

这让我可以写 com.foobar

然后释放

com.foobar.democom.foobar.extended 版本要安装在同一设备上。

但是,即使服务是通过权限 android:permission="@string/permission_name"(每次安装都会更改)和 android:exported="false" 设置的,但每个应用程序都希望调用其他应用程序服务!

即当我启动 com.foobar.extended 时,我收到一个安全异常,提示它没有权限使用 com.foobar.demo 的服务!

似乎 -rename-manifest-package 不会更改服务意图过滤器,因此它们仍然是 com.foobar.services.X,这意味着一个应用程序服务具有更高的处理意图的优先级.

如何防止这个问题? (也许一个 startLocalService() 不会将意图发送到应用程序之外......)

谢谢,

约翰

【问题讨论】:

    标签: android android-service aapt


    【解决方案1】:

    您没有提供清单文件的副本,但我猜您在那里使用了绝对名称,而您应该一直使用相对名称。

    代替

    <service android:name="com.foobar.demo.service" />
    

    你应该使用

    <service android:name=".service" />
    

    (注意名称以句点开头)。

    【讨论】:

    • 我在 AndroidManifest.xml 文件中使用相对服务名称。但是,当我启动我使用的服务和 Intent 时,我使用了一个字符串操作。 IE。 “com.foobar.services.MyService”。
    • -rename-manifest-package 将不知道更改用于启动服务的内部字符串。在清单中使用相对名称的原因是您可以在运行时使用 context.packageName() + ".service" 构建名称
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多