Wie erstellt man einen Screenshot von einer anderen App ohne root-Berechtigung, wie Screenshot UX Trial?
Wie man einen screenshot von einer anderen app programmgesteuert ohne root-Berechtigung, wie Screenshot UX Trial?
-
Ich weiß, ich kann erfassen Sie die bitmap des root-anzeigen in meiner app. Aber ich kann Sie nicht der root-Ansicht von der anderen app, wenn die app im hintergrund läuft
bitmap = Bitmap.createBitmap(rootview.getDrawingCache());
-
Gibt es eine Erlaubnis für die Erfassung Aktueller-frame-buffer-in-Manifest:
android.permission.READ_FRAME_BUFFER
. Aber die website sagt, es ist für die Signatur-app nur.
Nach versuchen mit Screenshot UX Trial, lese ich die Erlaubnis:
- INTERNET: für die Verbindung zu localhost screenshot-server für verwurzelt Telefon.
- SYSTEM_ALERT_WINDOW: für die oberste Kamera-Taste.
- VIBRATE: zum vibrieren feedback.
- WRITE_EXTERNAL_STORAGE: zum speichern der screenshot.
- GET_TASKS: für die Erkennung Vordergrund * Entwicklung der Einstellung der Aktivität für nicht verwurzelt ist&nicht vorgespannt-capture-Methode.
Scheint es entweder SYSTEM_ALERT_WINDOW
oder GET_TASKS
dass der app zum screenshot erstellen.
Ich habe zwei Schätze, wie es funktioniert:
- Es kann in der Lage sein, um Zugriff auf die
Activity
im Vordergrund Aktivität, es wird das root-Blick auf dieActivity
ist, erfassen Sie Ihre screenshot. - Aufrufen
glreadpixels
Wenn Sie versuchen, eines meiner Schätze, lassen Sie mich bitte das Ergebnis wissen.
InformationsquelleAutor der Frage Victor Chang | 2012-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist das extrem schwer. Ich verbrachte mehrere Jahre versucht, es zu tun. Ich schließlich gelang es aber irgendeine Lösung werden keine kommerziellen sowie technischen Aufwand.
Update März 2015
Meisten von dem Zeug unten ist nicht mehr up-to-date. Es gibt jetzt, nach all diesen Jahren, eine
android.media.projection
Pakethttps://developer.android.com/reference/android/media/projection/package-summary.html
die schließlich ermöglicht, was Sie brauchen!
Erfassen das Bild von Ihrer eigenen Anwendung
Vollständigkeit halber, will ich deinen eigenen Kommentar, können Sie erfassen ein Bild von Ihrer eigenen Anwendung verwenden
Bitmap.createBitmap(rootview.getDrawingCache());
und ähnliche Mechanismen.Die Erfassung der Bildschirm des anderen Anwendung, während Sie im hintergrund
Mit der
READ_FRAMEBUFFER
ErlaubnisErstens, du hast Recht, dass eine normale Anwendung kann nicht benutzt
READ_FRAMEBUFFER
Berechtigung, weil es die "Signatur"-Ebene. Das bedeutet, dass Sie unterzeichnet werden muss, die durch den gleichen Schlüssel wie der Android system ROM, um in der Lage sein, einen solchen screenshot.Ich dachte, das war ein bisschen schade, also wieder im Jahr 2009 machte ich ein Android-open-source-Projekt Vorlage zu bitten, dass es geöffnet werdenEins. Die Antwort von Dianne Hackborn, Android Architekt war:
So, das ging auch ganz gut, dann! Daher ist diese Berechtigung noch
signature
-level an diesem Tag.Wenn Sie diese Berechtigung, aber man könnte die
captureScreen
MitgliedISurfaceComposer
Zwei. Sie würde schreiben müssen, einige nativen code, um diese Funktion aufzurufen, die mit dem Android NDK und auch einige nicht dokumentierte APIs. Jedoch, es ist möglich.Intern innerhalb der Android-Grafik-subsystem, das verwendet
glReadPixels
abrufen der Pixel von der GPU zurück auf die CPU. (Die GPU ist für die meisten compositing auf Android. In der Tat Android 4.0+ unterstützt zusätzliche hardware-Setzer, und die Oberfläche Mit dem zu tun hat, noch mehr Arbeit zu ziehen, die Pixel für die CPU.)Dieser Aufruf funktioniert wunderbar, bis auf ein paar kleine Probleme:
... und ein großes problem ...
Immer noch auf den meisten Android-Geräte, können Sie sich 10 Bilder pro Sekunde. Besser noch, diese API unterstützt die Skalierung der resultierenden Bild in hardware auf der GPUso dass, wenn Sie geschickt sind, können Sie pre-skalieren Sie das Bild nur auf die Größe, die Sie benötigen, bevor die Pixel sogar auf die CPU. So kann es sein, extrem hohe performance.
Beachten Sie natürlich, dass Sie als writer Anwendung kann nicht aufgerufen
glReadPixels
weil Sie nicht haben, Zugang zu den entsprechenden OpenGL-Kontext. Es ist im Besitz der Oberfläche der Schleuderscheibe.Mit
/dev/graphics/fb0
und ähnlicheEinige sind geneigt, zu versuchen, Lesen Sie diese Linux-Gerät-Dateien, die für die framebuffer. Es gibt jedoch drei Probleme:
captureScreen
- API, um ein korrektes Bild.Mit hardware-Partnern
Jetzt kommen wir zu Lösungen, die erfordern wirtschaftliches handeln.
Gespräch mit der Android-Chipsatz Entscheidungsträger oft präsentiert eine Lösung. Da Sie das design der hardware, haben Sie Zugriff auf den framebuffer - und Sie sind oft in der Lage zu liefern Bibliotheken, die vollständig vermeiden Sie die Android-Berechtigungen-Modell, indem Sie einfach den Zugriff auf Ihre benutzerdefinierte kernel-Treiber nicht direkt.
Wenn Sie darauf abzielen, ein bestimmtes Handy-Modell, dies ist oft ein guter Weg in die Zukunft. Natürlich, die Chancen sind Sie brauchen, um zu kooperieren mit dem Handy maker als auch die Silizium-Hersteller.
Manchmal kann diese herausragende Ergebnisse. Ich habe zum Beispiel gehört, es ist möglich, auf einige hardware, um eine pipe mit Telefon-hardware framebuffer direkt in die Telefon-hardware H. 264-video-encoder, und rufen Sie einen pre-encoded video stream was auch immer ist auf dem Handy-Bildschirm. Hervorragend. (Leider hab ich nur wissen das ist möglich auf TI OMAP-chips, die allmählich den Rückzug aus dem Handy-MarktDrei).
Mit Sicherheit Löcher
Android starr erzwingt seine Berechtigung Modell, und hat einige Sicherheitslücken. Jedoch ist die Android-OEMs können manchmal sorgloser.
Beispielsweise einem großen OEM, deren name mit S beginnt, umgesetzt hat eine Art zu erfassen den Bildschirm mit einem Tastendruck. Es speichert es in einem Welt-lesbaren Datei auf der SD-Karte. Theoretisch könnten Sie in der Lage sein zu finden, was fängt die Schlüssel und sehen, wie es funktioniert. Könnten Sie vielleicht etwas ähnliches tun.
Und vielleicht gibt es eine Möglichkeit für eine weitere große OEM, deren name beginnt auch mit S.
Nein, ich gehe nicht ins detail auf diesem Abschnitt. Arbeiten Sie heraus, wie Sie diese Dinge tun, ich müsste die reverse-engineered software, und das dürfte illegal sein. Viel Glück, obwohl.
Arbeiten mit dem Telefon Entscheidungsträger
Als zuvor beschrieben, ist die Handy-Hersteller haben schnellen Zugriff auf ein API, das funktioniert. Und die Handy-Hersteller haben die
signature
-level-Berechtigungen erforderlich.So, alles, was Sie tun müssen, ist, zu arrangieren, um Ihre software zu erhalten, unterschrieben vom Telefon maker.
Dies ist jedoch schwer. Mit der Unterzeichnung der software, die Handy-Hersteller die Gewährleistung seiner Qualität - so sollten Sie überwachen möchten Ihren Quellcode. Auch aufgrund der Natur von Android - wenn Sie sich anmelden, die software, die Sie benötigen, um diejenigen zu verteilen. Sie können nicht auf dem Markt, wenn es unterzeichnet ist, von einer anderen Signatur.
Jedoch der OEM muss es nicht auf dem ROM - Sie kann immer noch verteilen Sie es auf dem Android market. Aber Sie können nicht.
Eine gute Lösung wäre, wenn jeder Hersteller unterzeichneten eine kleine Bibliothek, die dann aufgerufen werden, indem Sie ein gemeinsames SDK. Das führt mich auf...
Arbeit mit software-Partnern, die mittlerweile das Problem gelöst haben
Ich weiß eine Menge über das, weil ich früher bei RealVNC. Wir arbeiteten mit allen wichtigen Android-Telefon-Anbieter, um Zugang zu dieser Signatur-level-APIs. Ich kann nicht overemphasise die viele, viele Mannjahre an Aufwand (kommerziell und technisch) erforderlich, um dies zu erreichen. Einige der Hersteller haben veröffentlicht diese Arbeit - zum Beispiel Vier.
Ich nicht arbeiten bei RealVNC mehr, also ich habe nichts zu gewinnen aus der Werbung für Ihre software. Aber wenn Sie wirklich wollen, können Sie erfassen den Bildschirm, auf mehrere Android-Geräte, können Sie nähern wollen Sie etwa wieder mit Ihrer Fernbedienung Service-oder Android-VNC-SDK Fünf. Es ist nicht open-source, so dass Sie erwarten sollten, zu bezahlen, und glauben Sie mir, das ist fair genug, angesichts der epischen Aufwand in der Arbeit mit diesen Android OEMs.
Im Interesse der balance sollte ich darauf hinweisen, dass andere Anbieter haben auch gearbeitet mit dem Telefon-Entscheidungsträger, die für dieses - z.B. Soti. Aber ich glaube, Sie alle bieten bestimmte Gerät-management-Lösungen, sondern als eine Allgemeine remote control/event-Injektion SDK.
Über USB
Eine weitere option - die
adb
daemon lauscht, für die debugging-Verbindung über USB hat etwas mehr Rechte als ein normaler Anwendung, das ist, warum es in der Lage, schnappen Sie sich den Bildschirm (Sie können sehen, sein Bild mit derddms
tool). Wenn Sie in der Lage, jeden Befehl ausführen mitadb
dann können auch Sie gewinnen diese Privilegien (wie pro die android-screenshot-library linked zuvor).Dazu beitragen, die Android-open-source-Projekt
Schließlich dieses problem reduziert mich zu Staub, und ich verlassen für grünere Weiden, die nicht beinhalten, versuchen, squeeze-Pixel-out von Android-Handys.
Bevor ich Links RealVNC obwohl wir versuchten, wieder zu tragen, die diese APIs des Android-open-source-Projekt. In dieser Zeit bekamen wir eine positive ReaktionSechs. Kurz gesagt, es wurde vorgeschlagen, dass unsere security-Ansatz war fast richtig, aber, dass die Grafik-system war in zu viel Unruhe zu akzeptieren, unsere patches. Nun, die gute Nachricht ist, dass die Grafik-system ist nicht mehr in Aufruhr - in der Tat, es ist jetzt, dass
captureScreen
API, was bedeutet, dass keine Grafiken-system änderungen nötig sind, zu löschen. Es kann daher möglich sein, um ein neues Sicherheits-Mechanismus, um AOSP, um dieses API, die schließlich löst dieses problem.Viel Glück!
InformationsquelleAutor der Antwort Adrian Taylor
Vielleicht die android-screenshot-library helfen können. Aber auch in Ihrer Nutzung der Seite er sagt, er braucht ein systemeigener Dienst begann mit adb (aus dem android sdk).
PS: denken Sie Daran, dass die Screenshot UX nicht für jedes unbewurzelte Telefon.
InformationsquelleAutor der Antwort DNax
Ich glaube nicht, dass Android ermöglicht Ihnen den Zugriff auf eine andere app frame buffer. Dies ist nur ein Teil der Sicherheit von Android. Jede app sollte halten, um seine eigenen Ressourcen.
Wenn Sie wirklich brauchen, um einen Screenshot von einer app, ich würde vorschlagen, mithilfe der systemeigenen Bildschirm greifen "- Geste". Für die die Nexus 7 zum Beispiel einfach "... halten Sie die power-Taste und die volume down Taste gleichzeitig für etwa 2 Sekunden."
Einer Google-Suche in der Regel wird der trick mit dem Gerät.
InformationsquelleAutor der Antwort Diederik