使用Gradle Build Flavors的Android Auto Setup
我有一个项目正在尝试添加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功能的?
我并不十分确定,但我猜想这与应用程序ID有关,例如,您可以通过使用可在清单中所有地方使用的相对名称来避免全限定包名称。 检查这个:
<service
android:name="com.me.auto.MyMediaBrowserService" ...>
与
<service
android:name=".auto.MyMediaBrowserService" ...>
确保在您的代码中没有硬编码的包时,如果您需要包名,请始终使用BuildCondig.APPLICATION_ID
。
看起来你有它最正确的。 我会推荐这些更改(基于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>
你尝试创建flavorDimensions吗?
你可以试试这个。
flavorDimensions "mode"
productFlavors {
regular {
dimension = "mode"
}
different {
dimension = "mode"
}
}
如果你想获得你的应用程序的版本
if (BuildConfig.Flavor.contains("regular") || BuildConfig.Flavor.contains("different")) {
// Your code goes here.
}
希望这会有所帮助。
链接地址: http://www.djcxy.com/p/40595.html