Androidが画面割れしたけどデータを無事救出した話

今回の対象は『Androidスマホの画面割れが発生』してしまって『パターンロックが解除できない』方々です。

今回の記事は元々やっていたfc2のブログから輸入してきましたw(サボってるわけじゃないよ
Androidスマホが不慮の事故で画面割れ…

ええ、終わったと思いましたし実際タッチスクリーンはお逝きになりました。ここでかなり困った事が発生していることに気づいたgAwA。そう、メールや画像などの本体保存設定にしていたデータの救出ができない…!!
そしてこの現象に困っていて更に最終的に泣く泣くデータを諦め初期化している人のなんと多い事か。

おお、gAwAよ。こんな所で死んでしまうとはなさけない。
 しかし、ここで終わるgAwAではないと神が言っていた(気がした)ので頑張ってあがいてみようと思ったのが昨日の21時。作業が終了し、悦びと達成感に包まれて眠りについたのが翌2時w
とりあえず壊れた方のXperia Z4ちゃんは14日以内に送り返さないといけないらしいので時間がない。。。

結局いろいろ調べまわって得た結果としては、USB接続からadbを起動してswipeイベントを発生させる。という行為でロック画面を突破し、ASM(Android Screen Monitor)でタッチスクリーンを利用せずに操作する。
ということです。
…は?(全ギレ


前提条件

この全てを満たしていればあなたはタッチスクリーンが壊れた携帯からデータを救い出す事ができます。

    • USBデバッグモードがオンになっている

  • USBケーブルを使ってAndroid携帯とPCをつないだ事がある

    • PCにAndroid SDKをインストールしている(できる)

  • パターンロックを解除出来る(故障してなかった時のパターンを覚えている)

  • 正常に動作する同じ画面サイズの別端末を持っている(交換品など)
  • 折れない心

重要なのは下線部の所です。以前にUSBケーブルでPCとAndroid携帯をつないだ事がある人は分かるかもしれませんが、初めて接続するPCとAndroidの組み合わせの場合そのPCが安全かどうか確認するダイアログが発生します。これを事前に突破しておかないとadbで端末に接続した時に詰みます。


試したこと

まず、最初にとりあえず頑張ってタッチしまくりましたよ、えぇw
頑張っても操作不能だという事が判明したので次の作戦へシフト。

次にためしたのはTeam Viewerでリモート接続出来ないかどうか。これもロックがかかっている・アプリを起動していないという点でダメでした。

次に試したのはPCーAndroid間のUSB接続を用いた画面共有。これはひょっとすればいけるんじゃないか?なんて淡い期待を寄せてAndroid Screen Monitor(ASM)やAndroid ControlをPCに入れてみるもやはりロックされている状態では使い物にならず。。。

その他の方法として、次に白羽の矢が立ったのがadbによるrootログイン(もしくはログイン後suコマンドを叩く)ことでrootを取れればデータベースを直接いじってロックをオフに出来るのでは?という記事。これはAndroid OSがlinuxベースだからいけるでしょ!ktkrとか思ってましたがダメでした。

実際root権限が取れればいけると思いますが、私のXperiaちゃんではダメでした。Z4では対策済みなのかな?suコマンドがあるはずのディレクトリになく、実行出来ませんでした。とほほ

で、最終的に「いやいや、adbでシェルに入れるなら直接タッチイベントとか飛ばせてもおかしくなくね?」という想像が働きgoogle大先生にお伺いを立ててみた所、ありましたよ。inputコマンド

 結局、最後はタッチイベントを取得するスクリプト『getevent / setevent』を用いて正常な端末からrubyを使って.txtで整形・出力し、故障した端末のadb上で$sh /[pass]/hogehoge.txt を実行、静観して生還しました。
その後はASMを使用しリモート操作で無事データを救出しましたとさ。

rubyソースコードは以下

#!/bin/env ruby
# -*- coding: utf-8 -*-
# getevent.rb
time = Time.now$stdin.each_line {|line|
array = [$1.to_i(16), $2.to_i(16), $3.to_i(16)] if line =~ /([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+)/
_time = Time.now
$stdout.puts “sleep #{_time – time}” if _time – time > 0.1
$stdout.puts “sendevent /dev/input/event1 #{array[0]} #{array[1]} #{array[2]}”
time = _time
}

 rubyプログラムについては、こちらの記事を参考にしました。アザッス!

実行結果をつべにアップしました。


つまり、どうすればいいんだってばよ

  1. Android SDKをダウンロード
  2. ASMをこちらより落としてきてandroid-sdk下のplatform-toolsフォルダ内、adbシェルと同じディレクトリに配置
  3. 正常な端末で、故障している端末のロック解除時と同じジェスチャーのログをとり、txt形式で整形・出力
    ログ用プログラムのソースと使い方はこちら
  4. adbで上のプログラムでの出力物をshコマンドで実行
  5. ミッションコンプリート

感想

今回は、androidプログラマとして自分の端末では常にusbデバッグは許可しているので助かったから良かったもののこれって実際めっちゃやばいよね。
googleではなくとも画面割れに対する対応策を各携帯販売会社とかがサポートしてくれれば携帯販売会社のシェアとか伸びるんじゃないですか?(適当


私gAwAはこんな感じのプログラミング関係の情報を発信しています!更新した記事について発信したり、line限定でつぶやいたりしますので、
新しい記事をすぐ読みたい方・プログラミング関係に興味がある方は
よければあなたのlineに私を友達登録してください!^ー^
友だち追加

今日の記事はいかがでしたか?
あなたが感じたことや思ったことを下のフォームからお気軽にコメントしていってください(* 'ω')/

ブログ記事一覧

シェアする

フォローする