适用于移动和电视的 Android 通用应用程序 (Lollipop)

Posted

技术标签:

【中文标题】适用于移动和电视的 Android 通用应用程序 (Lollipop)【英文标题】:Android universal app for both Mobile and TV (Lollipop) 【发布时间】:2015-04-02 01:29:56 【问题描述】:

是否可以创建一个适用于电视和移动设备的通用 Android 应用,但具有不同的主要活动、主题、样式等?

我尝试将活动添加到 Mainfest 文件:

<application
        ... >
    <!-- Mobile -->
    <activity
        ...>

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

    </activity>

    <!-- TV -->
    <activity
        ...
        android:theme="@style/Theme.Leanback">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
        </intent-filter>

    </activity>
</application>

但据我了解,我不能有 2 个“android.intent.action.MAIN”活动?

当在 Android Studio 中启动新项目并选择移动和电视作为支持的“外形尺寸”时,它会创建带有 2 个独立模块的项目,所以实际上这些是 2 个独立的应用程序,对吧?但我希望能够在他们之间共享 90% 的代码。我该怎么做?

提前致谢。

【问题讨论】:

“但据我所知,我不能有 2 个“android.intent.action.MAIN”活动?” ——一般来说,你可以。如果您愿意,您可以拥有 1,000 个。我们认为是谷歌地图的应用程序通常有三个:地图、街景和导航。你当然可以创建a single app that works on Android TV and on mobile devices。在您的情况下,一个 IDE 代码的一组文件模板为您生成了两个模块。这并不意味着这是唯一可能的解决方案。 现在,在我的例子中,我对所有形式因素都使用了一个启动器活动,并且我没有通过 Play 商店分发应用程序。 @CommonsWare 好的,假设我有 2 个 .MAIN 活动,就像我的问题一样。您如何看待,如果我按下 Android TV (Lollipop) 上的 App 图标会启动什么活动。我敢打赌,你认为那个是“android.intent.category.LEANBACK_LAUNCHER”,但不是!第一个带有“android.intent.action.MAIN”的出现了!为什么? 我认为这是 Android TV 主屏幕实现中的一个错误。 LEANBACK_LAUNCHER 后面的 point 表示应该出现在 Android TV 主屏幕启动器中的活动。您可能需要做的是有一个MAIN 活动,具有两个类别(LAUNCHERLEANBACK_LAUNCHER),设置为Theme.NoDisplay。该活动可以使用hasSystemFeature() 来检测它是否在电视上,然后启动相应的活动。顺便说一句,您在哪个 Android TV 上进行测试? ADT-1?连结播放器?还有什么? @CommonsWare 感谢您的帮助!我正在使用 Nexus 播放器。我将使用 Manifest 文件进行更多测试,并让您知道结果。谢谢。 【参考方案1】:

您可以为两个项目创建一个类似于库的新模块,然后在每个 gradle 中导入,您可以在两个模块之间共享通用代码。

【讨论】:

感谢您的快速回复。这也是我想到的,但这如何帮助我制作 1 .apk?如果我有 2 个用于移动和电视的单独模块 - 我将有 2 个单独的 .apk 文件,对吗? 我不知道您何时在 Android Studio 中为发布生成 2 个单独的 apk 或仅将两者打包在一个 apk 中(在 AndroidWear 中,如果您构建 Android Wear 应用程序,则在发布 apk 中打包2 apk 合二为一)。如果您将常用代码、布局和其他内容导出到库中,您可以在每个模块中创建干净、可维护、模块化且无重复代码。 我会试试的。谢谢! @oleynikd 你找到解决办法了吗?

以上是关于适用于移动和电视的 Android 通用应用程序 (Lollipop)的主要内容,如果未能解决你的问题,请参考以下文章

使用适用于 Android 移动应用程序的 Anymote 库与 Android TV 通信

华为AppGallery中一款适用于移动设备和电视的应用程序

ANDROID STUDIO - 电视应用程序(我的安卓电视应用程序仅适用于模拟器电视)

适用于 Android、iOS 和 PC 的通用跨平台应用程序 - 理论上 [关闭]

应用被拒绝。适用于 Android TV 的 Google Play 资格问题

适用于黑莓、iPod 和 Android 的移动编程