android - 如何制作插件数据APK?

标签 android

我的目标是拥有一个主应用程序和一系列独立的独立数据包,这些数据包可以按需作为 APK 提供,并且每个都在 Play 商店中有自己的条目。这完全取决于用户他们愿意安装哪些以及安装多少。想想语言包、键盘布局、字典之类的东西。该应用程序将始终检查安装了哪些数据包,并让用户选择要使用的数据包。

我认为数据 APK 不会提供任何 Activity ,但会包含允许访问某种类型的 ContentProviderService。但这对我来说都是新的,有很多术语让我感到困惑:这是 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/

相关文章:

java - 从 pubnub Android 检索数据

android - AnimatedVectorDrawable 圆到线

android - 确保用户始终使用最新版本的 Android 应用程序的最佳策略?

java - 如何使我更改的数据在使用viewmodel后出现

android - 找不到处理 Intent { act=android.speech.action.RECOGNIZE_SPEECH(有附加功能)} 的 Activity

asp.net - 如何检测移动网络浏览器及其屏幕大小

java - 如何在Android中设置DatePicker和TimePicker的限制

android - 当顶部的另一个 fragment 关闭时,如何防止在 fragment 中重新加载 webView

java - 转换后如何修复丢失的日期时间?

android - 在 Fragment 中处理 onNewIntent