2017-09-28 115 views
7

我有一个项目,我尝试添加Android Auto支持。我已经添加下面的代码到我的表现如图所示的自动文档中:Android Auto Setup with Gradle Build Flavors

<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功能?

+0

让我看看你的defaultConfig定义和包名称。还可以尝试将常规的{applicationId“com.me”}替换为常规的{applicationIdSuffix“.me”}。你的软件包名称与applicationId冲突的可能性很小。 com.me是com.me.auto包的子包。 –

+0

@AuuragSingh - 我用默认配置更新了我的问题。 – mattfred

+0

您是否尝试了我关于应用程序后缀分享的建议,然后尝试使用常规风格创建构建。 –

回答

1

我不是很确定,但我想这与应用程序ID有关,例如,您可以使用可在清单中所有地方使用的相对名称来避免完整合格的软件包名称。检查:

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

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

同时也要确保你有没有硬编码包在你的代码总是使用BuildCondig.APPLICATION_ID当你需要你的包名。

+0

我已经试过这两种方法,都没有工作。 – mattfred

+0

'''applicationId'''的声明与代码的包名无关,它们是两个不同的字段。 – ahasbini

1

看起来你有它最正确的。我会推荐这些更改(基于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> 
+0

这也没有奏效。 – mattfred

1

你尝试创建一个flavorDimensions?

你可以试试这个。

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

,如果你想获得您的应用程序

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

希望这将帮助版本。