Cihazım, Jelly Bean 4.2 çalıştıran Nexus 4. Ekranı kaydetmeye ve göndermeye çalışıyorum. İnternetteki çoğu kod, oku/dev/graphics/fb0 ile kapar. Bazı cihazlarda ve eski sistemlerde iyi çalışır. Ama cihazımda denediğimde, başarısız oluyor. Sadece siyah ekrana ve ham verilere "0" verir. Kök iznini almak için "adb root" çalıştırdım, "chmod 777 fb0", "cat fb0>/sdcard/fb0" denedim. Ayrıca verileri almak için "mmap" ve "memcpy" gibi kodları denedim. Ama hepsi başarısız. İnternette araştırdım ve çözüm yok gibi görünüyor. Ve bazı iplikler, çekirdeğin fb0 okumayı yasaklayabileceğini söyledi. Bunun hakkında fikri olan var mı?Android fb0 okundu her zaman bana siyah ekran verin
cevap
Donanım ilerledikçe, ekran içeriğiyle birlikte gerçek bir kare kıskacı bulma olasılığınız azalır.
Açıklamalarda belirtildiği gibi, adb, yüzey aktifleştirici ile Binder çağrısı üzerinden temas eden "screencap" komutunu kullanır ve bu başarısız olursa /dev/graphcs/fb0
geri düşebilir. İkinci yol şimdi nadiren kullanılmaktadır. Gerçekten bu nasıl çalıştığını içine kazmak istiyorsanız
, sen SurfaceFlinger kompozisyonu, özellikle hwcomposer HAL nasıl yaptığını incelemek gerekir. Donanım oluşturucu, çoklu gralloc yüzeyleri alır ve bunları tarama sırasında bir araya getirir. Bu, cihazdan cihaza nasıl değişiyor? hwcomposer uygulaması genellikle grafik yongası üreticisi tarafından yapılır. "Son uygulamalar" özelliği için küçük oluşturmak için uygulama çerçevesi tarafından kullanılan
ekran görüntüsü nesil, aynı kompozisyon HWC ancak münhasıran gles ile yaptığı adımları uygular. Android 4.2'den itibaren, donanım besteci bir arabelleğe birleştirilemiyor. Bazen, donanım besteci "punts", ör. Çünkü, donanımın işlem yapabileceğinden daha fazla katman var. Bu durumda, yüzey aktifleştirici, GLES bileşimine döner ve tam görüntüye sahip numaralı bir tampon olacaktır; /dev/graphics/fb0
açılarak bulunup bulunmayacağı farklı bir konudur.
Bazı başlangıç noktaları:
- surfaceflinger
- hwcomposer HAL interface
adb shell dumpsys SurfaceFlinger
daha modern GPU'lar ile
- 1. Siyah ekran
- 2. UIImagePickerController bana bir siyah önizleme veriyor
- 3. Android Ekran Zaman aşımı
- 4. Android siyah beyaz görüntü işleme
- 5. UIModalPresentationStyle.FormSheet Her zaman iPad'de tam ekran (SWIFT)
- 6. Siyah kenarlıkları olmayan tam ekran video
- 7. FLAG_ACTIVITY_CLEAR_TASK ayarlandığında siyah ekran nasıl engellenir?
- 8. Android Ekran Yakalama
- 9. QOpenGLWidget Doku Haritalama sonuçları Siyah ekran
- 10. Android Textview siyah oldu
- 11. Android USB host cihazı cihazdan okundu
- 12. Yemin ederim görevim bana her zaman aynı seçeneği döndürüyor
- 13. Android zbar'da kamera siyah ekranı
- 14. AVAssetWriterInput - siyah ekran, 46 saat uzunluğunda
- 15. Uygulama başlatılırken Siyah Ekran nasıl önlenir
- 16. webview tam ekran android
- 17. Adım Sayacı: her zaman açık?
- 18. Android multitouch: ACTION_UP her zaman çağrılmıyor mu?
- 19. Android Facedetector poz değerleri her zaman 0
- 20. Nsdateformatter seçilen telefonun dilinde bana günü geri gönderir. Bana her zaman ingilizceyi iade eder mi?
- 21. ekran bölümleri her zaman 3 sütunda esnek üst üstlerindeki yüksekliklerine bakılmaksızın her zaman
- 22. Android RatingBar bazı cihazlarda siyah overlay gösterme
- 23. Android FaceDetector.Face Euler açıları 0 her zaman
- 24. Android ExpandableListView göstergesi/simge her zaman gergin
- 25. android: KomşuCellInfo her zaman boş! niye ya?
- 26. Android: Sesli komutu dinle (her zaman)
- 27. Android eklendi AppBarLayout her zaman üstte geliyor
- 28. Phonegap Cordova - Tam ekran görüntülendikten sonra altta siyah durum çubuğu
- 29. android ekran acitivities Video oluşturma
- 30. Linq'den sql'ye: datetime desc'e göre sipariş verin, sonra veri asc'nin zaman kısmına göre sipariş verin.
, karetamponu muhtemelen (bütünüyle en azından) sadece trivially erişilebilir değil için ana CPU çoğu zaman. ADBD'nin uzun bir süre önce gerçekleştirdiği uygulamalarda, çerçevenin sahibini yakalamanın gerçek işini yapmak için screencap gibi bir şey denilen harici bir cihaz-benzersiz bir uygulama kullanıldı. Bunu kullanabilir, belge/kaynak bulmaya veya yürütülebilir dosyayı tersine çevirmeye çalışabilirsiniz. Normalde kaynakta "iyi şanslar" derdim, fakat bir Nexus cihazı için gerçekten mevcut olabilir (veya diğer kapalı bitlerle birlikte ikiliyi sağlayabilirler) –
Cevabınız için teşekkürler. Aslında, Android'in orijinal kodları iki çalıştırılabilir ad içerir: screencap ve ekran görüntüsü. Ve kodlarında iki yol var. Biri fb0 okuyor, diğeri ise Android yerel kütüphanesi tarafından sağlanan glPixel() çağrılıyor. İkincisi oldukça yavaş. Aslında ikinci yöntemle bir tane gerçekleştirdim, ancak fps ideal değil. Ben de geri dönüp ilk yoldan yapmaya çalışıyorum. Projemde herhangi bir kısıtlama yoktur. Bunu uygulamak için çekirdeği bile kesebilirim. Haftalarca sorunla takıldım. Yardıma ihtiyacım var. – user1659072
İhtiyacınız olan şey, ne yazık ki, genellikle üreticiler tarafından piyasaya sürülen, düşük seviyeli GPU programlama bilgisidir. Basit fb'nin zor, hatta güvenlik için okunmasından vazgeçtiğine inanmıyorum; Bunu yaptıklarını çünkü donanım artık herşeyi bitişik bir tampon olarak kolayca (veya en azından portatif olarak) açığa çıkarmadı.Piksel yaklaşımla piksel daha verimlidir, ancak belirli donanıma yine eşsiz - Birazdan tür bazı düşük seviyesi kodu ile etkileşim parçalar halinde gerçek kareyazmaç okumak bu değişiklikten sonra bir başka uygulanması yoluyla takip ettik. –