【问题标题】:Android Auto Setup with Gradle Build Flavors带有 Gradle 构建风格的 Android 自动设置
【发布时间】:2017-10-07 18:57:15
【问题描述】:

我有一个项目正在尝试添加 Android Auto 支持。我已将以下代码添加到我的清单中,如 Auto 文档中所示:

<application
    ....
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ....
    <service
        android:name="com.me.auto.MyMediaBrowserService"
        android:exported="false">
        <intent-filter>
            <action android:name="android.media.browse.MediaBrowserService" />
        </intent-filter>
    </service>
    ....
</applicaiton>

我还在使用不同的构建风格,在我的 gradle.build 文件中定义:

defaultConfig {
    applicationId "com.me"
    minSdkVersion 16
    //noinspection OldTargetApi
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}

productFlavors {

    regular {
        applicationId "com.me"
    }
    different {
        applicationId "com.meother"
    }
}

当我使用“常规”风格构建和安装时,android auto 不起作用。但是,当我使用“不同”风格构建和安装时,一切都很好。如果我随后将常规的 applicaitonId 更改为“com.menew”之类的其他名称,那么 Auto 再次运行良好。

构建风格中的applicationId 如何影响或破坏 Android Auto 功能?

【问题讨论】:

  • 显示您的 defaultConfig{} 定义和包名称。还可以尝试将常规 { applicationId "com.me" } 替换为常规 { applicationIdSuffix ".me" }。您的包名称可能与您的 applicationId 冲突是很安静的。 com.me 是 com.me.auto 包的子包。
  • @AnuragSingh - 我已经用默认配置更新了我的问题。
  • 您是否尝试过我分享的关于应用程序后缀的建议,然后尝试使用常规风格创建构建。
  • 我做到了。但是,这会使最终的包 id 为“com.me.me”,对吗?
  • 是的,您说得非常正确,但 Android auto 应该可以工作。如果它有效,那么它只是 applicationId 名称之间的冲突。请让我知道结果。

标签: android gradle android-auto


【解决方案1】:

我不确定,但我猜这与应用程序 ID 有关,例如您可以通过使用相对名称来避免完全限定的包名称,您可以在所有地方的清单中使用它。检查这个:

<service
    android:name="com.me.auto.MyMediaBrowserService" ...>

对比

<service
    android:name=".auto.MyMediaBrowserService" ...>

还要确保您的代码中没有硬编码的包,当您需要包名称时,请始终使用BuildCondig.APPLICATION_ID

【讨论】:

  • 声明applicationId与代码的包名无关,是两个不同的字段。
【解决方案2】:

看起来你说得对。我会推荐这些更改(基于https://developer.android.com/training/auto/audio/index.html),看看是否能解决问题。

1) 删除包名,这样它就不会被锁定为一种风格。或者,您可以使用${applicationId},gradle 会插入正确的。

2) 设置要导出的服务(android:exported=true)。

<application
    ....
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ....
    <service
        android:name="${applicationId}.auto.MyMediaBrowserService"
        android:exported="true">
        <intent-filter>
            <action android:name="android.media.browse.MediaBrowserService" />
        </intent-filter>
    </service>
    ....
</applicaiton>

【讨论】:

    【解决方案3】:

    您是否尝试过创建风味维度?

    你可以试试这个。

    flavorDimensions "mode"
    productFlavors {
        regular {
            dimension = "mode"
        }
        different {
            dimension = "mode"
        }
    }
    

    如果您想获取应用程序的版本

     if (BuildConfig.Flavor.contains("regular") || BuildConfig.Flavor.contains("different")) {
           // Your code goes here.
     }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多