2013-05-30 12 views
12

新しいGradleベースのビルドシステムを使用するようにプロジェクトを更新しました。主に私のアプリをインストールすることができないという私のデバイスは、私が開発用にデバイスを使用して以来、それを使用する。私はpackageNameSuffix新しいビルドシステムの提供で多くの約束を見ました。新しいAndroid Gradle Build Systemビルドコンフィグレーションパッケージ名とプロバイダ権限の衝突

私が問題になっているのは、マニフェストのパッケージ名以外のものです。パーミッション(特にGCMの場合)とContentProvider Authoritiesを含む、ユニークでなければならない他の部分があります。 .debug接尾辞を使用してインストールしようとすると、そのパッケージのGCM権限が定義されておらず、重複したプロバイダをインストールしようとしているというエラーが表示されます。

これらの文字列の代わりに私のマニフェストに入れることができる変数がありますので、ビルドシステムはそれらを適切に置き換えますか?

答えて

7

ここで私の解決策は、packageNameSuffixのGCM問題です。

主な問題は、 ".debug"という接尾辞を持つ許可名です。私は、最終マニフェストにマージされたマニフェストをデバッグしてリリースする許可を与えました。

AndroidManfest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.experiment.myapplication" 
      android:versionCode="1" 
      android:versionName="1.0" > 

    <uses-sdk 
      android:minSdkVersion="8" 
      android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <uses-permission android:name="android.permission.VIBRATE" /> 
    <application 
      android:allowBackup="true" 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme" > 
     <activity 
       android:name=".MainActivity" 
       android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 


    </application> 

</manifest> 

デバッグAndroidManifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.experiment.myapplication"> 


    <permission android:name="com.experiment.myapplication.debug.permission.C2D_MESSAGE" 
       android:protectionLevel="signature" /> 
    <uses-permission android:name="com.experiment.myapplication.debug.permission.C2D_MESSAGE" /> 

    <application> 
     <receiver 
       android:name=".GcmBroadcastReceiver" 
       android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.experiment.myapplication.debug" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest 

>

リリース私はすべての私のアプリのパッケージ名を置き換えました

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.experiment.myapplication" > 

    <permission android:name="com.experiment.myapplication.permission.C2D_MESSAGE" 
       android:protectionLevel="signature" /> 
    <uses-permission android:name="com.experiment.myapplication.permission.C2D_MESSAGE" /> 

    <application> 
     <receiver 
       android:name=".GcmBroadcastReceiver" 
       android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.experiment.myapplication" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 
+0

古いgcmクライアントの代わりに新しいプレイサービスを使用する場合は、パッケージ固有のアクセス権は必要ありません。 – deekay

+0

私はUrban Airshipでこのソリューションを使用しようとしましたが、期待通りに機能しませんでした。私はまだパッケージ名にマージ競合を取得しています。 –

+0

これは私のためにうまくいった、ありがとう! – rharter

6

これは、バリアントのパッケージ名を変更するための現在の既知の制限です。私はできるだけ早くこれを修正するつもりです。

+4

固定されているかどうか。この問題を追跡するために問題追跡ツールへのリンクを追加できますか? –

+0

すべてのアップデートXav? –

+0

これに関する更新情報はありますか? – spierce7

1

Androidのマニフェストプレースホルダー$ {のpackageName}とのAndroidManifest.xml、そのマニフェスト合併は、たとえば、すべての作業

行います

あなたが使用することができます
<uses-permission android:name="${packageName}.permission.C2D_MESSAGE" /> 
1

<permission android:name=".permission.C2D_MESSAGE" 
      android:protectionLevel="signature" /> 
<uses-permission android:name=".permission.C2D_MESSAGE" /> 

をAndroidは、自動的に現在のパッケージ名を追加します.で始まっています。

関連する問題