我有一个项目,我正在尝试添加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功能?
答案 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.
}
希望这会有所帮助。