2017-09-28 9 views
7

Android Autoサポートを追加しようとしているプロジェクトがあります。私はまた別のビルドのフレーバーを使用していGradle Build Flavorsを使用したAndroidの自動セットアップ

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

'regular'フレーバーを使用してインストールすると、android autoは動作しません。しかし、私が構築し、 '異なる'味を使用してインストールすると、すべて素晴らしいです。私が普通のapplicaitonIdを 'com.menew'のようなものに変更すると、再びAutoはうまく動作します。

Androidオート機能を作成するか、または中止するビルドフレーバーには、どのようにしてapplicationIdがありますか?

+0

あなたのdefaultConfig {}定義とパッケージ名を教えてください。また、通常の{applicationId "com.me"}を通常の{applicationIdSuffix ".me"}に置き換えてみてください。あなたのパッケージ名があなたのapplicationIdと競合している可能性は静かです。 com.meはcom.me.autoパッケージのサブパッケージです。 –

+0

@AnuragSingh - 私はデフォルト設定で質問を更新しました。 – mattfred

+0

アプリケーションサフィックスに関して私が共有した提案を試してから、通常のフレーバーを使用してビルドを作成してみましたか? –

答えて

1

私は絶対にはわかりませんが、これはアプリケーションIDと関連していると思います。すべての場所すべてのマニフェストでそれを使用できる相対名を使用して完全修飾パッケージ名を避けることができます。

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

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

あなたは、パッケージ名を必要とするとき、あなたのコード内であなたがいないハードコーディングされたパッケージは、常にBuildCondig.APPLICATION_IDを使用することをメイクも確認してください。これを確認してください。

+0

私はこれを両方の方法で試しても動作しません。 – mattfred

+0

'' 'applicationId'''の宣言は、コードのパッケージ名とは無関係ですが、2つの異なるフィールドです。 – ahasbini

1

あなたはほとんどの権利を持っているように見えます。私はこれらの変更を(https://developer.android.com/training/auto/audio/index.htmlに基づいて)お勧めし、これで修正されるかどうかを確認します。

1)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. 
} 

のバージョンを取得したい場合、これが役立つことを願っています。

関連する問題