安装后允许我的Android应用程序使用第三方扩展/插件-蓝牙低能耗

安装后允许我的Android应用程序使用第三方扩展/插件-蓝牙低能耗,android,plugins,android-ble,Android,Plugins,Android Ble,我在stack overflow中看过几篇与本主题相关的文章,我能得到的最接近的是使用内容提供者在APK之间共享数据 我想做的是首先安装我的应用程序,它可以扫描并连接符合BT SIG标准的蓝牙低能耗健康设备。我试图支持的是添加插件,用于处理第三方专有健康设备 我需要能够查询这样安装的插件或扩展。我需要从插件中获取一些信息,比如他们专有服务的UUID,这样我就可以从该设备捕捉广告 然后我需要将广告传递给该插件。该插件将连接并处理设备,并将某些信息返回到我的应用程序,包括测量数据。请注意,该插件必须

我在stack overflow中看过几篇与本主题相关的文章,我能得到的最接近的是使用内容提供者在APK之间共享数据

我想做的是首先安装我的应用程序,它可以扫描并连接符合BT SIG标准的蓝牙低能耗健康设备。我试图支持的是添加插件,用于处理第三方专有健康设备

我需要能够查询这样安装的插件或扩展。我需要从插件中获取一些信息,比如他们专有服务的UUID,这样我就可以从该设备捕捉广告

然后我需要将广告传递给该插件。该插件将连接并处理设备,并将某些信息返回到我的应用程序,包括测量数据。请注意,该插件必须使用几个特定于Android的BTLE API;它不会是基本的Java代码

这些第三方插件将独立开发,用户可以在可用时下载它们,从而增加对专有设备的支持

可以在Windows或Linux上为Java应用程序添加插件。然而,这在安卓系统上有可能做到吗?如果有人能给我指出正确的文档、教程等,我将不胜感激。我无法在谷歌搜索中找到正确的单词

也许唯一的解决方案是创建第二个APK并通过“私有化”广播接收器进行通信?如果有某种类型的插件支持,我相信它会使生活更轻松

==================================进一步考虑=========================== 这里的目标是提供可添加的专有服务,以处理我的处理程序不处理的专有蓝牙健康设备(它只处理标准)。专有服务从我的应用程序中获取广告信息,连接到设备,获取数据,并在回调中发送回

问题是:可能有多个这样的服务,我不知道它们的名字,也不知道有多少。但是,它们都实现相同的IPC接口(公共AIDL文件)。我怎样才能知道有多少这样的服务?这是一项只有广播接收者才能处理的工作吗

我怎样才能知道有多少这样的服务

您可以使用
PackageManager
进行这种自省。考虑到其中一些因素,您可能希望这样做:

  • 添加到
    ,宣传您将用于所有此类服务的自定义
    意图
    操作

  • 使用
    PackageManager
    queryIntentServices()
    查找实现该
    的所有服务

  • 你可以在中看到它的基本原理。在我的例子中,我碰巧选择了
    IDownload
    接口的完全限定类名作为我的自定义操作字符串,但这肯定不是必需的。就我而言,我只期待一次这样的服务

    检查服务是否由预期的签名密钥签名,这样恶意软件就不会试图提供服务并诱骗您使用它,从而获得额外积分。展开上一个并处理该问题。然而,这些示例有点旧,因此可能需要为更新版本的Android做更多的工作

    FWIW,这两个样本都包含在

    我怎样才能知道有多少这样的服务

    您可以使用
    PackageManager
    进行这种自省。考虑到其中一些因素,您可能希望这样做:

  • 添加到
    ,宣传您将用于所有此类服务的自定义
    意图
    操作

  • 使用
    PackageManager
    queryIntentServices()
    查找实现该
    的所有服务

  • 你可以在中看到它的基本原理。在我的例子中,我碰巧选择了
    IDownload
    接口的完全限定类名作为我的自定义操作字符串,但这肯定不是必需的。就我而言,我只期待一次这样的服务

    检查服务是否由预期的签名密钥签名,这样恶意软件就不会试图提供服务并诱骗您使用它,从而获得额外积分。展开上一个并处理该问题。然而,这些示例有点旧,因此可能需要为更新版本的Android做更多的工作


    FWIW,这两个示例都包含在中。

    对于如何定义“插件”(动态加载的一些代码),您的主要问题是安全性。因此,谷歌禁止应用程序在Play Store上加载动态代码。然而,在应用程序之间有许多不同的IPC模式可供使用,而不仅仅是广播(绑定服务、启动服务、
    ContentProvider
    等)。@commonware我看到你在这个问题上发表了很多有见识的答案和评论。老实说,我希望避免使用IPC模式,并在插件和运行插件的应用程序之间建立更紧密的耦合。该插件只适用于主应用程序。但我想这不是一个选项。“但我想这不是一个选项”--如果你是通过Play Store发行的,正确。基本上,从可写位置动态加载代码会大大放大其他安全缺陷可能造成的损害。例如,Android 4.4及更早版本的multidex的后端口使用从可写位置动态加载代码。攻击者使用漏洞(例如,交给盲目解压的应用程序的错误拉链)将这些额外的DEX blob替换为恶意软件。然后应用程序运行修改后的代码,结果很糟糕。@commonware现在我有了looke