1

我有一个应用程序,它已经为大型设备制作,例如 10 英寸平板电脑和信息亭。我为手机做了相同的设计,但看起来不太好,所以我想将移动设备转移到材料设计,其余设备(平板电脑和信息亭)将保持不变。

我知道如何为不同的设备(即 normal 、 large 和 x-large )制作不同的布局,但我担心代码。所以基本上以下是我的困惑....

  • 在代码中判断我的应用程序在哪个设备上运行的最佳方法是什么,以便我必须在此基础上运行一些方法,因为我的普通设备遵循材料设计并包含一些平板电脑设计中不存在的小部件和信息亭,即 RecyclerView(出于某种目的)?
  • 我已经针对这个问题进行了很多搜索,发现有两种方法可以支持多个设备 1>制作两个单独的 apk,2>制作一个 apk 并签入代码以区分设备,但正如我上面所说的那样没有#1,我在普通设备中进行了材料设计,并且在小部件和布局,片段甚至导航方面完全改变了设计,那么您建议处理这个问题的最佳方法是什么?
  • 如果我制作 1 个 apk 并签入代码,那么我必须说我有大量代码和资源,在任何一种情况下(如果设备正常且大),某些资源和类将永远不会使用,并且会制作 apk尺寸更大,那么解决此问题的最佳方法是什么?

我还搜索了stackOverflow,只找到了这两个与我的问题很接近的链接,但其余链接是关于不同的布局而不是代码:

  1. 适用于手机和平板电脑的 Android 应用程序:1 或 2 个应用程序?
  2. 为 android 手机和平板电脑创建不同的布局

我希望我的问题很清楚,请用一些真实的理由和链接回答我的这些问题。

4

2 回答 2

3

Google Play 支持单个应用的多个 apk 。但是,除非您的应用程序非常大(大于 100MB),否则他们建议您为所有设备发布一个 apk。

因此,您需要在运行时检查屏幕尺寸。您可以按类别设备独立像素甚至英寸来执行此操作。然后,正如您所说,您将相应地加载适当的布局和片段。

即使您要使用不同的 apk,您也可能会以类似的方式进行操作,因为您可能希望共享一些代码。

在 Gradle 中,您将为每个 apk 制作 productFlavors,以及一个用于定义构建的变量,如下所示:

productFlavors {
    bigtablet {
        buildConfigField "String", "deviceType", "\"bigtable\""
    }
    smalltablet {
        buildConfigField "String", "deviceType", "\"smalltable\""
    }
}

然后在运行时,您将使用 BuildConfig.deviceType 来驱动与 one apk 方法中的屏幕大小完全相同的逻辑。使用这种方法,Gradle 将从每个 apk 中删除所有未使用的代码。

最后一个选项是为每个 apk 创建完全不同的项目。将所有共享代码推送到库中。

您现在可以随时将所有内容放在一个 apk 中,如果 apk 变得太大,则可以切换到多个 productFlavors。由于逻辑相似,因此切换起来不会太难。希望这可以帮助。

于 2016-11-18T22:08:34.670 回答
1

支持库旨在最大限度地减少您检测应用运行的 Android 版本差异所需的工作量。例如,RecyclerView 在支持库中可用。在此文件夹和layout-xxx文件夹之间,您通常可以为所有 API 级别和设备外形构建单个 APK。

于 2016-11-20T08:30:03.567 回答