拆分Android应用程序分为两部分

时间:2012-04-03 06:31:42

标签: android android-install-apk

我试图了解是否可以将Android应用分为两部分(从一个APK安装)。我调查这个是在Device存储器上安装一个部件而在SD-CARD上安装另一个部件。这两个部分属于一起,不应单独安装。

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

8 个答案:

答案 0 :(得分:4)

我认为这是可能的。你能尝试一下方法吗?

  1. 创建两个应用
  2. 在第一个APK的清单文件中,您应该有一个MAIN和LAUNCHER类别的活动。这样,您的应用就会在启动器列表中显示
  3. 你不应该在第二个APK中有任何MAIN和LAUNCHER类别的活动,但你知道你必须打开哪个活动作为第二个应用程序的启动器活动,因为它是你自己的应用程序。这样,您的第二个应用将永远不会出现在Launcher应用列表中
  4. 将第二张APK放在第一张APK的资源文件夹中
  5. 每当您的主应用程序想要使用第二个应用程序中的内容时,从资产文件夹(as mentioned here)安装第二个应用程序,并在SDCard上设置安装位置,如下所示:android:installLocation="preferExternal"然后启动您想要的活动第二个应用
  6. 我还没有尝试过,但理论上看似合法。

    如果有效,请告诉我。谢谢!

答案 1 :(得分: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提供的网址下载扩展文件并保存扩展文件。您必须将文件保存到共享存储位置(Android / obb //),并使用Google Play的响应提供的确切文件名。

Source

答案 2 :(得分:0)

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

Multiple APK Support

  

虽然我们鼓励您开发并发布单个APK   支持尽可能多的设备配置,这样做   有时候不可能。为了帮助您发布应用程序   尽可能使用多种设备,Google Play允许您发布多个设备   APK在同一应用程序列表下。谷歌播放然后供应   每个APK基于配置支持适当的设备   你已经在每个APK的清单文件中声明了。

     

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

     

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

     

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

     

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

     

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

答案 3 :(得分:0)

也许这就是你想要的? APK Expansion Files

答案 4 :(得分:0)

您的应用可以检查SD卡当前是否可用("插入")或不。如果它可用,你的应用程序就像正常一样工作,如果SD卡不可用,应用程序会自动退出/显示弹出/启动不同的活动/无论如何。

答案 5 :(得分:0)

如果您只想找到一种方法来保留外部驱动器上的应用程序资源,Harry's answer将非常有用。

否则,无法将一个应用安装拆分为两个部分。您可以使用android:installLocation清单属性来定义要安装的位置,甚至可以强制它在设备上仅在内部安装,但没有选项可以拆分它。 / p>

<强> 替代

两个应用

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

一个应用检查外部存储空间

我不知道您的使用案例,但是根据您的评论,您似乎正在寻找错误的解决方案。

  

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

您可以检查外部存储器是否可用,如果不存在则阻止某些激活。如果你想确定,它是相同的SD卡,你可以在第一次运行时创建一个UUID并在内部和外部保存它。如果他们匹配正确的SD卡。

<强> 结论

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

答案 6 :(得分:0)

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

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

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

答案 7 :(得分: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”,它们将打开不同的活动。