使用Gradle Build Flavors进行Android自动设置

时间:2017-09-28 18:56:51

标签: android gradle android-auto

我有一个项目,我正在尝试添加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功能?

3 个答案:

答案 0 :(得分:1)

我不是很确定,但我猜这与应用程序ID有关,例如您可以使用相关名称来避免使用完全限定的包名称,您可以在清单中的所有位置使用它。检查一下:

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

VS

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

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

答案 1 :(得分:1)

看起来你大部分都是对的。我会建议这些更改(基于https://developer.android.com/training/auto/audio/index.html)并查看是否可以解决此问题。

1)删除包名称,使其不会被锁定为一种风味。或者,您可以使用${applicationId},gradle将插入正确的。{/ p>

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>

答案 2 :(得分:1)

  

您是否尝试过创建flavorDimensions?

     

你可以试试这个。

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

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

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

希望这会有所帮助。