2016-02-29 15 views
10

Sto scrivendo un SDK e vorrei che gli sviluppatori fossero in grado di creare un activity-alias il cui targetActivity è impostato su un'attività all'interno del mio SDK. Lo sto facendo perché mi piacerebbe che fossero in grado di personalizzare il filtro intent su un'attività specifica nell'SDK. Se nel manifesto del sdk c'è ActivityX, mi piacerebbe che fossero in grado di scrivere un activity-alias come questo in di loro app manifesta:android: consentire la creazione di un alias di attività il cui targetActivity è in un aar/sdk

<activity-alias 
    android:name="abc" 
    android:targetActivity="ActivityX"> 
    <intent-filter> 
    ... user's custom intent filter 
    </intent-filter> 
</activity-alias> 

Il problema che sto imbattersi è che la targetActivity ha la restriction che: "... deve corrispondere l'attributo name di un elemento attività che precede l'alias nel manifesto"

Questo è un problema perché non importa dove metto l'attività nel manifesto della sdk o dove metto l'alias in manifesta un esempio di applicazione, l'alias viene sempre prima l'attività nel manifesto fusione finale causando un errore INSTALL_PARSE_FAILED_MANIFEST_MALFORMED .

Un'idea è di inserire un alias senza un filtro di intent subito dopo che ActivityX è stato dichiarato nel manifest sdk e sperare che i due alias siano merged together e rimanere nella posizione dell'alias sdk. Ma non riesco a capire come farlo. Una ragione che potrebbe non funzionare è che due alias potrebbero non essere in grado di entrare in conflitto.

Avete pensieri su come risolvere questo tramite una soluzione di unione o qualche altra tecnica?

+1

Le librerie Android sono molto limitate in casi d'angolo come questo. Posso capire perché vuoi farlo. Non ne ho idea ma ti suggerirei di postare in b.android.com come richiesta di funzionalità al team di strumenti –

risposta

3

Un identico issue è stato introdotto in AOSP. Una soluzione al problema è descritto non come segue:

includere manualmente la voce manifesta per l'attività da [l'sdk] nel manifesto del progetto di applicazione, ponendolo prima dell'entrata attività-alias.

Nonostante il fatto che questa soluzione ha il problema di

... duplicare il codice attraverso i manifesti.

sembra che i manutentori del progetto abbiano ritenuto adeguata questa soluzione. Non vi è alcuna indicazione che una correzione al problema sottostante verrà rilasciata in tempi brevi.

Problemi correlati