【问题标题】:Any way to make common APK for API-15+ on mobile and API-21+ on TV?有什么方法可以为移动设备上的 API-15+ 和电视上的 API-21+ 制作通用 APK?
【发布时间】:2016-06-08 17:21:18
【问题描述】:

我查看了 Google UniversalMusic Player 代码示例,用于制作具有通用代码库的通用 APK,以支持从手机到电视的所有设备类型,如下所示: https://github.com/googlesamples/android-UniversalMusicPlayer

我的要求是有一个 APK 在移动设备和电视上支持不同的最低 API 版本 - 移动设备的最低 API-15 和电视的最低 API-21(因为 Android TV 仅从 API-21 开始)

我怎样才能以最少的代码重复来做到这一点(即,如果制作单独的移动和电视模块,那么我必须在两个模块中复制代码)? 谢谢!

【问题讨论】:

  • 嗯,最简单的解决方案是拥有一个将minSdkVersion 设置为 15 的 APK。我不知道让您的生活变得更加复杂有什么好处,必须拥有两个单独的 APK 文件两个单独的 minSdkVersion 值。说明此“要求”的人应详细解释为什么存在此“要求”,因为这可能会对解决方案产生影响。
  • 我首先尝试过 - 但出现错误,因为leanback API 仅适用于 API-21 及更高版本...在 SO...上找到此线程...stackoverflow.com/questions/28075533/…
  • “但出现错误,因为leanback API 仅适用于 API-21 及更高版本”——这取决于 API。一些从 API 级别 17 开始的工作。除此之外,无论如何,您将拥有单独的启动器活动(一个用于移动设备,一个用于电视)。只要您没有移动设备尝试启动电视活动,就不会有任何问题。这不是minSdkVersion 的问题;这是一个确保为用户提供正确的用户界面的问题。
  • 是的,我尝试将 minSDK 设置为 API-17 进行构建,因为 v17 可以使用leanback。所以可能会满足于 17 而不是 15

标签: android build android-gradle-plugin apk android-tv


【解决方案1】:

我认为最好的解决方案是创建两个 APK。

您可以为手机和电视创建一个项目,它们将位于不同的模块中,但在同一个项目中,您可以创建一个通用模块,将两者都将使用的所有内容放入其中,以避免重复代码。

创建通用模块后,只需添加到移动和电视的gradle:compile project(':common')

然后,您将拥有可用于移动和电视的通用模块中的所有代码。 因此,您将拥有适用于移动设备和电视的不同 gradle 文件(以及不同的 sdk 版本),并且您将拥有一个通用模块,您可以保留两者都将使用的代码。

我认为这是最好的方法,因为您可以将电视上所需的所有控件(如遥控器、视图焦点控制等)放在电视项目中,它不会对移动设备产生任何影响。

要发布APP,您可以关注this,这样您就可以在同一个Play商店项目中发布两个APK。

【讨论】:

    猜你喜欢
    • 2014-12-26
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2020-10-22
    • 1970-01-01
    相关资源
    最近更新 更多