2017-09-28 17 views
7

Mam projekt, w którym próbuję dodać obsługę Androida Auto. Dodałem następujący kod do mojego manifestu, jak pokazano w dokumentacji Auto:Ustawienia automatyczne Androida z Gradle Build Flavours

<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> 

Używam również różne smaki budować, zdefiniowane w moim pliku 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" 
    } 
} 

Kiedy budować i zainstalować przy użyciu "normalnego" smaku, auto android nie działa. Jednak gdy buduję i instaluję używając "innego" smaku, wszystko działa świetnie. Jeśli następnie zmienię zwykłą applicaitonId na coś innego, jak "com.menew", znowu Auto działa świetnie.

Jak działa applicationId w budowaniu smaku lub łamaniu funkcjonalności Androida Auto?

+0

Pokaż mi swoją domyślnąfunkcjęConfig {} i nazwę pakietu. Spróbuj również zastąpić zwykłe {applicationId "com.me"} zwykłym {applicationIdSuffix ".me"}. Jest cicho możliwe, że nazwa twojego pakietu jest w konflikcie z twoim ID aplikacji. com.me jest pakietem podrzędnym pakietu com.me.auto. –

+0

@AnuragSingh - Mam zaktualizowane moje pytanie z domyślną konfiguracją. – mattfred

+0

Czy wypróbowałeś sugestię, którą udostępniłem w związku z sufiksem aplikacji, a następnie spróbuję utworzyć kompilację przy użyciu zwykłego smaku. –

Odpowiedz

1

Nie jestem absolutnie pewny, ale przypuszczam, że jest to związane z identyfikatorem aplikacji, np. możesz unikać nazw w pełni kwalifikowanych pakietów, używając względnych nazw, których możesz używać w manifeście we wszystkich miejscach. Sprawdź to:

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

vs.

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

Również upewnić się, że nie masz na sztywno w kodzie pakietów zawsze używać BuildCondig.APPLICATION_ID gdy trzeba swoją nazwę pakietu.

+0

Próbowałem to w obie strony i nie działa. – mattfred

+0

Deklaracja '' applicationId''' nie jest powiązana z nazwą pakietu kodu, są to dwa różne pola. – ahasbini

1

Wygląda na to, że masz w większości rację. Polecam te zmiany (na podstawie https://developer.android.com/training/auto/audio/index.html) i zobaczę, czy to naprawi.

1) Usuń nazwę pakietu, aby nie była zablokowana w jednym smaku. Alternatywnie możesz użyć ${applicationId}, a gradle wstawi poprawny.

2) Ustaw usługę do wyeksportowania (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

To też nie zadziałało. – mattfred

1

Czy próbować stworzyć flavorDimensions?

Możesz spróbować.

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

jeśli chcesz uzyskać wersję aplikacji

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

nadzieję, że to pomoże.

Powiązane problemy