Android Studio due sapori con diversi file manifesti

Ho problemi con la definizione di due file manifesti diversi per i miei gusti in Android Studio. Questa è la mia attuale struttura del progetto:

Struttura del progetto attuale

  • Animazione alfa di Android fadein fadeout con ritardi
  • TextView Ellipsize (...) non funziona
  • Nome del thread di un'ASyncTask
  • Attività con ProgressBar -> Servizio -> AsyncTask per il download - ma come aggiornare i progressi?
  • Accesso non definito chiave Google API API
  • Tracciamento della posizione di Google Maps in tempo reale Android
  • L' AndroidManifest.xml nel gusto free sembra così:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="se.example.package"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> </manifest> 

    L' AndroidManifest.xml nel AndroidManifest.xml main non dispone di permessi di utilizzo, ma contiene il resto del codice manifesto condiviso tra tutti i sapori.

    L' AndroidManifest.xml nel sapore pro è simile a questo:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="se.example.package"> <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> </manifest> 

    build.gradle definisce i due sapori come

     productFlavors { free { applicationId 'se.example.package.free' minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName '1.0' } pro { minSdkVersion 14 applicationId 'se.example.package.pro' targetSdkVersion 21 versionCode 2 versionName '1.1' } } 

    Il risultato che mi aspetto è che i diversi sapori definiscano diversi permessi di utilizzo. Questo non è il caso. Il risultato è che entrambi i sapori definiscono solo il <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> come definito in AndroidManifest.xml nel sapore pro.

    Ho provato:

    • Progetto pulito
    • Ribuild il progetto
    • Riavviare Android Studio
    • Sincronizzazione

    Ma senza successo. Come devo risolvere questo problema? Qualsiasi aiuto è apprezzato.

    EDIT 1

    Ho cambiato la posizione di ciascun file AndroidManifest.xml da ciascuna delle cartelle di risorse alla cartella free e pro . Il risultato di questo:

    1. Il sapore Pro mostra l'authorization delle licenze come previsto.
    2. Il sapore libero mostra le autorizzazioni da entrambi i file di AndroidManifest.xml , le autorizzazioni di licenza e di networking (dovrebbe essere solo networking)

    Questo sembra un problema della struttura del progetto. Cosa ne facciamo di questo?

    EDIT 2

    Ho tirato i rapporti di fusione come suggerito da Commonsware, sono i rapporti relativi uses-permissions

    Gratuito:

     uses-permission#com.android.vending.CHECK_LICENSE ADDED from qwknoteGIT:licencing-library:unspecified:26:5 android:name ADDED from qwknoteGIT:licencing-library:unspecified:26:22 

    Pro:

     uses-permission#com.android.vending.CHECK_LICENSE MERGED from qwknoteGIT:licencing-library:unspecified:26:5 

  • Android ottiene il colore come valore di string
  • Imansible creare un converter per la mia class nella libreria Android Retrofit
  • Android Come fermare il process di inserimento del database
  • Modalità / ordine consigliati per leggere i dati da un webservice, analizzare i dati e inserirlo in un dbite SQLite
  • Esportre il file di database sqlite in XML e quindi nel foglio di calcolo di Excel
  • Inizio intestazione non valido: Imansible analizzare l'attributo expires quando l'attributo expires è vuoto
  • 3 Solutions collect form web for “Android Studio due sapori con diversi file manifesti”

    Tecnica di fondo:

    su questo collegamento spiega le tecniche ei parametri che possono essere utilizzati per la fusione di manifesti: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:node -markers

    Uno specifico è lo tools:node che indica come determinati nodes XML sul manifesto si comportino durante la fusione.

    Soluzione:

    per get alcune permessi in una e diversa in un altro manifesto, aggiungere TUTTE le autorizzazioni necessarie alla main e nei manifesti dei sapori rimuovere quelli che non avete bisogno, come nell'esempio seguente:

    free rimuovere la licenza di controllo

     <uses-permission android:name="com.android.vending.CHECK_LICENSE" tools:node="remove"/> 

    Il tuo problema viene da una libreria, non dai tuoi sapori. In particolare, qwknoteGIT:licencing-library richiede CHECK_LICENSE .

    Se non utilizzi questa libreria in tutti i sapori, utilizza un'istruzione compile aromatizzata (ad esempio, proCompile ) per utilizzare tale libreria solo in quel sapore.

    Se si utilizza la libreria per tutti i sapori, ma si sentono sicuri di non aver bisogno dell'authorization in un unico sapore, è in questo caso che un attributo di tools:node può essere utilizzato, nel manifesto del sapore, per bloccare l'authorization fornita dalla libreria.

    E la relazione manifesta di fusione è il tuo amico. 🙂

    Questo dovrebbe risolvere il problema, alless. Lo trovo utile per specificare il manifesto esatto da utilizzare per each variante. Saluti! Dirige esplicitamente il file manifesto sotto each variante cartella.

      android { productFlavors { prod { manifest.srcFile "prod/AndroidManifest.xml" } dev { manifest.srcFile "dev/AndroidManifest.xml" } } ... } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.