天天看點

android4.3 截屏功能的嘗試與失敗分析 感謝網友cjd6568358的幫助,新版的Android系統截屏功能已經實作,需要的朋友請移步項目首頁:https://github.com/Android-ScreenShot/AndroidScreenShotService(别忘點個star哦)(轉載請注明出處:http://blog.csdn.net/buptgshengod)1.背景2.失敗方法分析3.最後的希望

         上一篇講了在源碼中捕獲到了android手機的截屏函數(同時按下電源鍵與音量減,詳情http://blog.csdn.net/buptgshengod/article/details/19911909),經過一周的研究還是沒有在手機上實作系統截屏功能,總結下嘗試的方法與失敗的原因。

        在手機的/dev/graphics目錄下的fb0檔案是負責螢幕渲染的幀緩存,網上有一些教程講如何用c将手機中的fb0轉換成bmp格式的圖檔。我在android4.0 聯想手機上用着種方法實作了系統截屏功能,但是在android4.2之後這個方法就不行了,framebuffer已經無法讀取。

            因為我們要調用的截屏api是一個@hide的被google隐藏的類,是以就想到了用reflection的方法。java反射機制的原理就是,因為java不同于c或者c++,java是運作在虛拟機中的。是以可以通過反射機制來直接調用程式的内部資訊與方法。下面是我參照stackoverflower上面的介紹寫的一段java虛拟機的截屏功能反射代碼。

編譯的時候沒有報錯,通過log資訊知道應該是找到了surfacecontrol函數,但是截屏的内容是null。

可能原因分析:反射機制一般是調用某個隐藏的方法。但是我們要調用的SurfaceControl是整個類都被隐藏了,是以可能是截屏結果是null的原因。

               這是我最先想到也是最簡單粗暴的方法。因為已經有了代碼是以直接将SurfaceControl.java前面的

android4.3 截屏功能的嘗試與失敗分析 感謝網友cjd6568358的幫助,新版的Android系統截屏功能已經實作,需要的朋友請移步項目首頁:https://github.com/Android-ScreenShot/AndroidScreenShotService(别忘點個star哦)(轉載請注明出處:http://blog.csdn.net/buptgshengod)1.背景2.失敗方法分析3.最後的希望

去掉,生成自己的sdk即可。但是。。。經過一晚上漫長的等待。編譯器報錯。錯誤就是出現在surfacecontrol。(當時忘把錯誤截圖了)

可能原因:目前還不清楚,打算再試一次。

              将在源碼生成的檔案的core.jar和framework.jar導入工程

android4.3 截屏功能的嘗試與失敗分析 感謝網友cjd6568358的幫助,新版的Android系統截屏功能已經實作,需要的朋友請移步項目首頁:https://github.com/Android-ScreenShot/AndroidScreenShotService(别忘點個star哦)(轉載請注明出處:http://blog.csdn.net/buptgshengod)1.背景2.失敗方法分析3.最後的希望

,我們發現隐藏的api果然可以調用了。但是在install apk時卻報錯:Conversion to Dalvik format failed with error 1。

  可能原因:apk簽名的問題,或者是導入的jar包和原有的android.jar有重複部分。

         asl是google code 上的一個開源的庫。原理是利用在手機上導入一個背景運作的service,隻要接受到intent發送的特定資訊就截屏。實驗結果是傳回黑屏,通過留言了解到好多人都出現這種狀況。

可能原因:因為android版本更新造成的。

            當手機連接配接電腦時我們執行以下指令可以截圖。

            于是我設想在手機端執行這條shell指令,是否能實作截圖功能。參照網上的教程自己寫了一個可以執行shell指令的程式,詳情:http://blog.csdn.net/buptgshengod/article/details/19405819。但是。。。截屏是可以,但是傳回的是黑屏。

可能原因:沒有找到原因。

繼續閱讀