2016-02-29 7 views
10

Ich schreibe ein SDK und möchte, dass Entwickler einen activity-alias erstellen können, dessen targetActivity auf eine Aktivität in meinem SDK eingestellt ist. Ich mache das, weil ich möchte, dass sie den Intent-Filter für eine bestimmte Aktivität im SDK anpassen können. Wenn in dem Manifest des sdk es ActivityX ist, würde Ich mag sie in der Lage sein, ein activity-alias wie dies in ihre App-Manifest zu schreiben:android: Erlaube die Erstellung eines Aktivitäts-Alias, dessen targetActivity in einem aar/sdk ist

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

Das Problem, das ich komme bin über ist, dass die targetActivity hat die restriction, dass es: „... den Namen Attribut eines Aktivitätselement übereinstimmen muss, dass die Aliasnamen im Manifest vorangeht“

Dies ist ein Problem, denn egal, wo ich die Aktivität in Manifest sdk platzieren oder wo ich die Alias ​​in einem Beispiel-App Manifest zu platzieren, kommt die Alias ​​immer vor der Aktivität in dem letzten fusionierten manifest einen INSTALL_PARSE_FAILED_MANIFEST_MALFORMED Fehler verursacht .

Eine Idee ist es, einen Alias ​​ohne Intent-Filter zu setzen, kurz nachdem ActivityX im sdk-Manifest deklariert wurde und hoffe, dass die beiden Aliase merged together sind und in der Position des SDK-Alias ​​bleiben. Aber ich kann nicht herausfinden, wie das geht. Ein Grund, der möglicherweise nicht funktioniert, ist, dass zwei Aliase möglicherweise nicht in Konflikt stehen können.

Haben Sie Gedanken, dies über eine Merge-Lösung oder eine andere Technik zu lösen?

+1

Android-Bibliotheken sind in solchen Fällen sehr begrenzt. Ich kann verstehen, warum du das willst. Ich habe keine Ahnung, aber ich würde vorschlagen, dass Sie in b.android.com als Feature-Anfrage an das Tool-Team schreiben –

Antwort

3

Ein identischer issue wurde in der AOSP gebracht. Eine Abhilfe für das Problem wird wie folgt beschrieben:

manuell das Manifest Eintrag für die Aktivität von [sdk] in das Manifest des Anwendungsprojektes umfasst, es vor dem aktivitäts Alias-Eintrag platzieren.

Trotz der Tatsache, dass diese Problemumgehung das Problem der

hat

... Code über Manifeste duplizieren.

Es scheint, dass die Projektbetreuer diese Lösung für ausreichend hielten. Es gibt keine Anzeichen dafür, dass in naher Zukunft eine Lösung für das zugrunde liegende Problem veröffentlicht wird.