我的目标是拥有一个主应用程序和一系列独立的独立数据包,这些数据包可以按需提供为APK,并且每个都在Play商店中有自己的条目。完全取决于用户,他们需要安装哪些以及多少这些用户。想想语言包,键盘布局,词典,这类事情。应用程序将始终检查安装了哪些数据包,并让用户选择使用哪个数据包。
我认为数据APK不会提供任何活动,但会包含允许访问某种Service
的{{1}}。但这对我来说都是新手,而且很多术语让我感到困惑:这是receiver
吗?一个provider
?这些似乎都在某种程度上符合我的目的。我是否需要在后台运行此服务(每个数据包一个),等待广播呼叫,或者我可以以某种方式通知Android它存在,所以当这个特定查询来自我的应用程序时它会启动吗?
如果不需要在后台运行任何东西,甚至在列表阶段,可能是理想的。然后将选择一个数据文件,并且只有在访问数据时,相应的APK才会运行。所有数据包都是相同的类别(字典),除了提供一些静态元数据然后提供对原始文件的访问权限之外,不需要提供任何其他功能。
我能找到的所有信息都与"扩展APK" s相关,但这与我想要的正交。
答案 0 :(得分:1)
我认为数据APK不会提供任何活动,但会包含允许访问某种ContentProvider的服务。
您无需Service
即可访问ContentProvider
。
这是接收器吗?提供者?
我不知道那句话中的“这个”是什么。 ContentProvider
在清单中使用<provider>
元素。 Service
使用清单中的<service>
元素。
我是否需要在后台运行此服务(每个数据包一个),等待广播呼叫,或者我可以以某种方式通知Android它存在,所以当这个特定查询来自我的应用程序时它会启动它吗?
以上都不是。您的主应用通过PackageManager
了解这些“数据包”APK的存在。例如,您可以对这些“数据包”APK的应用程序ID /包名称使用标准命名约定,然后使用getInstalledPackages()
找出安装了哪些“数据包”APK。
从那里,你可以:
Use createPackageContext()
访问“数据包”中的资源和资源
生成指向“数据包”APK Uri
的{{1}},然后使用ContentProvider
访问由APK发布的内容(例如ContentResolver
,openInputStream()
)
使用其他形式的IPC(广播,已启动服务,绑定服务)与“数据包”进行交互
所有数据包都是相同的类别(字典),除了提供一些静态元数据然后提供对原始文件的访问权限之外,无需提供任何其他功能。
我不知道你为什么要通过Play商店以APK文件的形式发布这些资料。只需以一些方便的格式(例如,ZIP存档)从您自己的Web服务器下载资料。