2017-09-28 121 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. 
} 

希望這將幫助版本。