7

我试图了解是否可以将 Android 应用程序分成两部分(从一个 APK 安装)。我对此进行了研究,以便将一部分安装在设备内存上,另一部分安装在 SD-CARD 上。这两部分是一体的,不应单独安装。

注意:我不仅需要分离资源,还需要分离活动,所以APK Expansion Files不是解决方案,因为不提供这样的功能。

4

8 回答 8

4

我认为这将是可能的。您可以尝试以下方法吗?

  1. 创建两个应用
  2. 在第一个 APK 的 Manifest 文件中,您应该有一个 MAIN 和 LAUNCHER 类别的 Activity。这样您的应用程序将在启动器列表中可见
  3. 您不应该在第二个 APK 中有任何 MAIN 和 LAUNCHER 类别的 Activity,但您知道必须打开哪个 Activity 作为第二个应用程序的 Launcher Activity,因为它是您自己的应用程序。这样,您的第二个应用程序将永远不会出现在启动器应用程序列表中
  4. 将第二个 APK 放在第一个 APK 的 assets 文件夹中
  5. 每当您的主应用程序想要使用第二个应用程序的内容时,从资产文件夹安装第二个应用程序(如此处所述)并在 SDCard 上设置安装位置,如下所示:android:installLocation="preferExternal"然后启动您想要的第二个应用程序活动

我还没有尝试过,但理论上似乎是合法的。

让我知道这个是否奏效。谢谢!

于 2017-01-30T05:43:29.930 回答
1

APK 扩展文件

Google Play 目前要求您的 APK 文件不超过 100MB。对于大多数应用程序来说,这为所有应用程序的代码和资产提供了充足的空间。但是,某些应用程序需要更多空间来存储高保真图形、媒体文件或其他大型资产。以前,如果您的应用程序超过 100MB,您必须在用户打开应用程序时自行托管和下载额外资源。托管和提供额外文件的成本可能很高,而且用户体验通常不太理想。为了让这个过程对您来说更轻松,对用户来说更愉快,Google Play 允许您附加两个大型扩展文件来补充您的 APK。

Google Play 为您的应用程序托管扩展文件,并将它们免费提供给设备。扩展文件保存到设备的共享存储位置(SD 卡或 USB 可安装分区;也称为“外部”存储),您的应用可以访问它们。在大多数设备上,Google Play 会在下载 APK 的同时下载扩展文件,因此当用户第一次打开应用程序时,您的应用程序就会拥有所需的一切。但是,在某些情况下,您的应用程序必须在您的应用程序启动时从 Google Play 下载文件。

下载扩展文件

在大多数情况下,Google Play 会在安装或更新 APK 的同时下载您的扩展文件并将其保存到设备中。这样,当您的应用程序第一次启动时,扩展文件就可用了。但是,在某些情况下,您的应用程序必须自己下载扩展文件,方法是从 Google Play 的应用程序许可服务响应中提供给您的 URL 请求它们。

下载扩展文件所需的基本逻辑如下:

当您的应用程序启动时,在共享存储位置(在 Android/obb// 目录中)查找扩展文件。如果存在扩展文件,则一切就绪,您的应用程序可以继续。如果扩展文件不存在:使用 Google Play 的应用程序许可执行请求以获取您应用的扩展文件名、大小和 URL。使用 Google Play 提供的 URL 下载扩展文件并保存扩展文件。您必须将文件保存到共享存储位置 (Android/obb//) 并使用 Google Play 响应提供的确切文件名。

资源

于 2017-01-29T12:36:27.923 回答
0

你可以,但不是因为你的原因。多个 APK 只是为了确保您的应用适用于多种设备 - 而不是在内部存储器和 SD 卡之间划分其总大小。

多 APK 支持

尽管我们鼓励您开发和发布支持尽可能多的设备配置的单个 APK,但有时这样做是不可能的。为了帮助您为尽可能多的设备发布应用程序,Google Play 允许您在同一应用程序列表下发布多个 APK。然后,Google Play 根据您在每个 APK 的清单文件中声明的配置支持将每个 APK 提供给相应的设备。

通过使用多个 APK 发布您的应用程序,您可以:

每个 APK 支持不同的 OpenGL 纹理压缩格式。

每个 APK 支持不同的屏幕配置。

每个 APK 支持不同的平台版本。

目前,这些是 Google Play 支持将多个 APK 作为同一个应用程序发布的唯一设备特性。

于 2012-04-03T06:38:54.070 回答
0

也许这就是你想要的? APK 扩展文件

于 2013-02-21T10:07:54.370 回答
0

您可以通过在 Manifest.xml 中定义两个 MAIN LAUNCHER 条目从一个 APK 创建两个不同的启动活动

<activity android:name=".ChooserActivity"
            android:label="Auth Firebase">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <activity android:name=".GoogleSignInActivity"
            android:label="Auth Google"
            android:installLocation="preferExternal">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

这将为应用程序创建两个入口点,两个不同的启动器图标,一个名为“Auth Firebase”,另一个名为“Auth Google”,都将打开不同的活动。

于 2017-01-31T22:10:32.293 回答
0

是的,有可能。但需要注意的是,可以单独安装这两个应用程序,因为它们都应该上传到商店。你只需要使用很多意图。

您需要使用意图处理两个应用程序之间的所有通信。这意味着,必须使用对第二个应用程序的意图来询问第一个应用程序需要的所有内容,并且未能在设备中找到另一个应用程序应该触发对 Play 商店的意图。这样,您将有两个应用程序像一个一样工作。请记住,用户仍将决定在何处安装您的应用程序,但正如 christian-strempfer 指出的那样,可以将 SD 卡设置为首选目标。

如果这样做的目的是节省空间,您应该使您的资源(图像、声音等)动态化。由于所有这些都只是 apk 中的文件,因此您可以轻松地将它们替换为 SD 卡中的文件。您只需将它们上传到某处并在安装应用程序后下载它们。这样,您可以提供每个资产的确切版本并在需要时将其删除。您可以了解哪些屏幕最常用,并为您较少使用的屏幕删除资产。等等。

于 2017-01-30T05:22:40.597 回答
0

您的应用程序可以检查 sd 卡当前是否可用(“插入”)。如果它可用,您的应用程序可以正常工作,如果 sd 卡不可用,应用程序将自动退出/显示弹出窗口/启动不同的活动/其他。

于 2017-01-25T13:33:30.633 回答
0

如果您只是在寻找一种将应用程序资源保留在外部驱动器上的方法,那么Harry 的回答将会很有用。

否则,不可能将一个应用程序安装分成两部分。您可以使用android:installLocation清单属性来定义要安装它的位置,甚至可以强制它在设备内部安装,但没有拆分它的选项。

备择方案

两个应用程序

您创建两个单独的两个应用程序并检查其中任何一个的启动,如果安装了另一个。如果没有,您要求用户安装另一个并将用户转发到应用商店。

一个应用程序检查外部存储

我不知道您的用例,但从您的评论看来,您正在寻找错误的解决方案。

我正在考虑的应用程序有一部分我希望始终可用(安装在设备内存上)和一部分用户可能通过移除 SD-CARD 使其不可用(临时)。此外,当用户决定将应用程序移入或移出 SD 卡时,我希望安装在设备内存中的部分应始终留在那里。

您可以检查外部存储是否可用,如果不可用,则阻止某些活动。如果您想确保它是同一张 SD 卡,您可以在首次运行时创建 UUID 并将其保存在内部和外部。如果它们匹配,那就是正确的 SD 卡。

结论

您的解决方案可能过于复杂,您应该寻找替代方案。

于 2017-01-26T20:37:22.700 回答