2017-01-26 2 views
0

Also, ich versuche, eine laufende Anwendung zu verwenden und über die .apk-Datei Zugriff auf den Code einer noch nicht installierten Anwendung zu haben. Ich muss auf Dinge wie den Paketnamen der sekundären Anwendungen, den Provider, die Bundles, die Daten usw. zugreifen, ohne sie auf dem Telefon installieren zu müssen.Extrahieren von Anwendungscode aus der .apk-Datei

Soweit von dem, was ich verstehe, kann ich eines von zwei Dingen verwenden.

1) dexClassLoader. Mit dieser Option muss ich auf die .apk-Datei von einer Art von Speicher wie einer SD-Karte zugreifen können.

2) pathClassLoader. Scheint wie die richtige Option hier. Kann JAR/ZIP/APK-Dateien mit dieser Option verwenden.

Im Wesentlichen versuche ich, die zweite Anwendung in die erste zu laden, indem ich ihren Code an einen laufenden Prozess binde, ich habe nur Probleme beim Zugriff auf den Code, ohne ihn zu dekompilieren. Ich denke, meine Frage ist, sollte ich die erste oder zweite Option hier verwenden/ausprobieren oder ist eine dritte Option verfügbar?

Antwort

0

Während Sie Code aus der zweiten Anwendung mithilfe von dexClassLoader usw. dynamisch laden können, können Sie der Anwendung keine neuen Komponenten dynamisch hinzufügen. Jede Komponente muss in der AndroidManifest.xml statisch deklariert sein.

So können Sie zum Beispiel keine Aktivität aus der zweiten APK in Ihre Hauptanwendung "importieren". Sie können auf die Klasse für diese Aktivität zugreifen, aber Sie können eine Aktivität nicht direkt mit dieser Aktivität starten.

Abhängig von Ihren Anforderungen ist es möglicherweise möglich, in Ihrer Hauptanwendung eine "Platzhalter" -Aktivität zu erstellen, die eine Instanz der Aktivitätsklasse aus der sekundären APK erstellt und alle Methodenaufrufe an diese Instanz weiterleitet. Im Allgemeinen würde ich das eigentlich nicht vorschlagen. Ich vermute, es wäre sehr schwierig (wenn nicht sogar in einigen Fällen unmöglich), es richtig zu machen.

+0

Danke. Von einem Papier, das ich gelesen habe, haben ein paar Leute einen noch nicht installierten Anwendungscode an einen laufenden Prozess gebunden. Mein Ziel ist nicht, die Aktivität selbst zu starten (aber das könnte hilfreich sein), sondern die zweite Option, die Sie vorgeschlagen haben. Ich weiß, dass es, wenn überhaupt, fast unmöglich ist, aber ich möchte trotzdem versuchen, einige der nativen Methoden zu verwenden, und ich habe Probleme, auf bestimmte Informationen zuzugreifen, die für Aufrufe wie bindApplication() usw. benötigt werden, ohne tatsächlich Installation der zweiten .apk-Datei. – Pulkit

+0

Würde es dir etwas ausmachen, dies zu betrachten? http://StackOverflow.com/Questions/42100863/android-instrumentation-execStartactivity-Parameters – Pulkit

+0

@Pulkit - gute Frage, upvoted. Ich kann nicht helfen, tut mir leid :) – JesusFreke

Verwandte Themen