Wie starte ich eine nicht existierende Aktivität in Manifest?

8

Ich versuche eine "dynamische" Android-Anwendung zu entwickeln.

Dynamisch in dem Sinne, dass ich eine Aktivität in dem Manifest aufgelistet habe, das zur Laufzeit "gebaut" wird.

Ich kann die erforderliche Aktivität gut aufbauen, aber wenn ich versuche, sie zu starten, schlägt meine Anwendung mit ... fehl

%Vor%

Gibt es einen Ansatz, mit dem ich eine Android-Aktivität zur Laufzeit erfolgreich instanziieren kann?

Gibt es eine Möglichkeit, eine "temporäre" oder "Shell" -Aktivität in meinen Anwendungspfad einzufügen? und dann die "temporäre" Aktivität durch meine dynamische Instanz ersetzen?

AKTUALISIEREN

Mein Manifest-XML enthält diesen Eintrag

%Vor%

Allerdings gibt es in meiner Anwendung keine Aktivität namens "Dynamisch".

Ich verwende ByteBuddy, um meine dynamische Aktivität aufzubauen: -

%Vor%     
Hector 20.11.2017, 10:37
quelle

2 Antworten

5

Ich habe es geschafft, eine dynamisch instanziierte Aktivität aufzurufen und den gewünschten Layout-Inhalt mit ByteBuddy zu setzen.

Heres wie

%Vor%

Die Methoden-Delegierungsklasse

%Vor%

Obwohl dies das gewünschte Ergebnis liefert, gibt es immer noch Probleme, da der super.onCreate(savedInstanceState) -Aufruf erfolgt ist, nachdem ich setContent aufgerufen habe (denke ich).

Die Verwendung der ausgezeichneten ByteBuddy-Bibliothek ist ein viel besserer Ansatz als die Arbeit mit DEX-Manipulation.

    
Hector 24.11.2017, 11:34
quelle
12

Ja Sie CAN starten ein solches Activity (vorausgesetzt, Sie haben ein dummy manifest Activity Eintrag).
Wenn Ihnen diese Technik nicht gefällt, verwenden Sie Fragments (sie benötigen keine Einträge im Manifest). Alternativ können Sie auch WebView und JavaScript wie Apache Cordova et-al (auch plattformübergreifend!).
ByteBuddy (auch kudos @Rafael Winterhalter Autor von Byte Buddy) sieht cool aus, vielleicht eine Lernkurve beteiligt. Warum nicht das verlinkte Projekt herunterladen und beide Techniken ausprobieren?
So funktioniert include ByteBuddy in Ihrem Android Studio Gradle project ( build.gradle ):

%Vor%
  

Wie kann ich meine dynamische Instanzklasse zur Laufzeit "finden"?

Externes Laden von DEX-Dateien (Klassen-Byte-Code)

Sehen Sie meine Antwort hier und folgen Sie den Links für den Quellcode und das Tutorial (Apache Ant { Eclipse kompatibel, build.xml } und Android Studio Gradle Beispiele build.gradle des gleichen Codes, Sie benötigen einige benutzerdefinierte Schritte bauen, die diese Projekte bieten).
Codeausschnitt:

%Vor%
  

F: Wie füge ich eine Aktivität hinzu, kann ich sie nicht zum Manifest hinzufügen?
A: Verwendung   Fragmente, sie brauchen keine Einträge im Manifest.

    
Jon Goodwin 22.11.2017 14:56
quelle

Tags und Links