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

mat*_*red 8 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>
Run Code Online (Sandbox Code Playgroud)

我也在使用我的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"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

applicationId构建风格如何制作或破坏Android Auto功能?

rek*_*ire 1

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

<service
    android:name="com.me.auto.MyMediaBrowserService" ...>
Run Code Online (Sandbox Code Playgroud)

<service
    android:name=".auto.MyMediaBrowserService" ...>
Run Code Online (Sandbox Code Playgroud)

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