如何管理不同设计的代码以支持所有设备

时间:2016-11-08 06:43:53

标签: android android-layout android-design-library android-multiple-apk

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

我知道如何为不同的设备制作不同的布局,即普通,大型和x大型,但我担心代码。基本上以下是我的困惑......

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

我还搜索了stackOverflow并且只提出了接近我的问题的这两个链接,但其余的链接是关于不同的布局而不是代码:

  1. Android app for phone and tablet: 1 or 2 apps?
  2. Creating different layout for android phone and tablet
  3. 我希望我在问题中保持清醒,请用一些真实的理由和链接回答我的问题。

2 个答案:

答案 0 :(得分:3)

Google Play支持

Multiple apks for a single app。但是,除非您的应用程序非常大(大于100MB),否则他们建议您为所有设备发布一个apk。

因此您需要在运行时检查屏幕大小。您可以by categorydevice independent pixelseven in inches执行此操作{{3}}。然后,正如您所说,您将相应地加载相应的布局和片段。

即使您使用不同的apks,也可能以类似的方式进行,因为您可能想要共享一些代码。

在Gradle中,您可以为每个apk创建productFlavor,并使用变量来定义构建,如下所示:

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

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

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

您现在可以将其全部放在一个apk中,如果apk变得太大,则切换到多个productFlavors。由于逻辑相似,所以不会太难以开启。希望这会有所帮助。

答案 1 :(得分:1)

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