我的目标是拥有一个主应用程序和一系列独立的独立数据包,这些数据包可以按需作为 APK 提供,并且每个都在 Play 商店中有自己的条目。这完全取决于用户他们愿意安装哪些以及安装多少。想想语言包、键盘布局、字典之类的东西。该应用程序将始终检查安装了哪些数据包,并让用户选择要使用的数据包。
我认为数据 APK 不会提供任何 Activity ,但会包含允许访问某种类型的 ContentProvider
的 Service
。但这对我来说都是新的,有很多术语让我感到困惑:这是 receiver
吗? ? provider
?这两者似乎都在某种程度上符合我的目的。我是否需要让这项服务(每个数据包一个)在后台运行,等待广播调用,或者我是否可以以某种方式通知 Android 它存在,以便它会在我的应用程序发出这个特定查询时启动它?
如果不需要在后台运行任何东西,甚至可能在列表阶段,那将是理想的。然后将选择一个数据文件,相应的 APK 将仅在数据被访问时运行。所有数据包都是同一类(字典),除了提供一些静态元数据然后提供对原始文件的访问外,不需要提供任何其他功能。
我能找到的所有信息都与“扩展 APK”相关,但这与我想要的不相干。
最佳答案
I thought that the data APKs would not provide any activities but would contain a Service that allows access to a ContentProvider of some sort.
你不需要 Service
提供对 ContentProvider
的访问.
is this a receiver? A provider?
我不知道那句话中的“this”是什么意思。 ContentProvider
使用 <provider>
list 中的元素。 Service
使用 <service>
list 中的元素。
Do I need to have this service (one per data pack) run in the background, waiting for broadcast calls, or can I just somehow inform Android it exists, so it would launch it when this particular query comes from my application?
以上都不是。您的主应用程序通过 PackageManager
发现这些“数据包”APK 的存在。 .例如,您可以对那些“数据包”APK 的应用程序 ID/包名称使用标准命名约定,然后使用 getInstalledPackages()
找出安装了哪些“数据包”APK。
从那里,您可以:
Use
createPackageContext()
访问“数据包”中的 Assets 和资源生成
Uri
指向“数据包”APK 的ContentProvider
, 然后使用ContentResolver
访问 APK 发布的内容(例如openInputStream()
、query()
)使用其他形式的IPC(广播、启动服务、绑定(bind)服务)与“数据包”交互
All the data packs are of the same sort (dictionaries) and need not provide any further functionality than to provide some static metadata and then give access to a raw file.
我不知道您为什么要通过 Play 商店以 APK 文件的形式分发这些资料。只需从您自己的 Web 服务器上以某种方便的格式(例如 ZIP 存档)下载资料。
关于android - 如何制作插件数据APK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50567964/