あれやこれややった結果、最終的に成功しました!
いろいろ試行錯誤した結果をまとめておきたいのはやまやまですが、とりあえず得られた最終結果とその手法をまとめておきます。
これは作業ログのつもりのものであり、求める結果に対するマニュアルやガイドラインではありません。間違いがある可能性があります。
もし、間違いを見つけた場合、指摘を頂けると世界に対して役に立つ可能性があります
ここで使用する、「SP Flash Tool」やバイナリエディタ、VMなどを使用したext4ファイルシステムのマウントなどのやり方はあらかじめ知っているものとします。
そのぐらいの知識がないと、失敗したときに自己解決できいないかと思います。
どうしてもわからない場合はTwitterで聞いてください。
とはいえ、あくまでもこのやり方は各自の自己責任となります。
ので記事を修正していきたいと思います。
故障した場合、損害はおそらくこれを買った端末代、せいぜい2000円程度でしょうから、勉強代としてあきらめてください。
この製品、手元に届いた時点で発売から結構立っていますので、本体を開封したらまず、十分に充電をしておいてください。電池枯れかけだとよくわからない動きをしたとき、失敗したのか充電切れかがわかりません。
1.内蔵Flashを吸い出す
→解析には全領域を吸い出す必要がありますが、この目的を満たすためには実はそこまでやる必要はないです。
SP Flash ToolのReadBack機能を使い、以下のような設定で、Android システムパーティションの領域のみ吸い出します。(USER領域、 0xa800000 から 長さ 0x009A800000)
ファイル名はsystem.binとでもしておきましょう(自由です)
このイメージを書き換えるので、元に戻せるようにバックアップを忘れずに。
ツールの使い方は、ググれば似たようなやり方が出てくると思うのでそっちを参照してください。
(簡単に説明すると、翻訳機の電源OFF→USBケーブル外しておく→Readbackボタン
→待ち状態になるのでUSBケーブルをつなぐ→デバイスマネージャーに Preloaderという仮想COMデバイスが現れる→それをFlash Toolsが見つける→Readbackされるという動きをします。慣れるまでわからん。)
(↓このPreloaderもデバイスのインストールがいるかも。)
2.吸い出したイメージの状態を確認する。
私の手元ではそういった機器はありませんが、もしかしたらパーティション情報が書き換わっている場合があります。
その場合、このやり方では失敗しますので念のため確認します。
HEX Workshopなど、大きめのファイルがダンプ表示できるものを使用し、先頭の部分を眺めてext4イメージであることを確認します。
もしくは、次の手順に進んでしまい、binwalkやfileコマンドを使用したり、ext4ファイルシステムとしてマウントできることを確認してしまってもいいでしょう。
吸い出しがうまくいっていれば、0x470付近に"system"の文字列が見えると思います。
もし駄目なら教えてください。
ファイルサイズも確認します。2592079872バイト、であればOKです。
3.Linux上に持っていき、マウントして buid.propを編集する
私はVMWare上のUbuntuで作業しましたが、例えばraspberry piなどをお持ちならUSBメモリにでも入れてそっちで作業したほうが早い人もいるでしょう。
例として /tmp/systemに先ほどのファイルシステムをマウントしています。
ここで sudo nano /tmp/system/build.prop し、文末に以下の3行を追加します。
service.yuntian.win=1
service.yuntian.wintoo=1
ro.yuntian.kyt=1
これで、build.propに必要な情報が書き加えられました。
ちなみに上の1行目は adbd接続有効、2行目はadbd root権限、3行目はAPKのインストール許可です。
こうして出来上がった/tmp/systemをマウントしたsystem.bin を書き戻すことになります。
確実にumountして、出来上がったsystem.binをWindowsに持ってきます。
ここまでの作業、VMWareのファイル共有機能などを使うと便利です。
4.ファイルを書き戻す
さて、出来上がったファイルをSP Flash Toolを使って書き戻します。
ここで重要なのが、パーティション情報を記述したscatterファイルと呼ばれるものです。これを作るのに苦労したのです。
このファイルをダウンロードし、先ほどのsystem.binと同じディレクトリに置き、system.binは "20_system.bin"という名前にしてください。
Flash Toolを起動し、Downloadタグ、scatter-loading fileでこのテキストファイルを指定します。
すると、同じディレクトリにある20_system.binを見つけてLocationに表示してくれます(確認してください)。
翻訳機の電源を切り、USBケーブルも抜き、Downloadボタンを押し、USBケーブルを接続してしばらく待つと、Download(更新)が始まります。
↑書き込み中の状態です
更新が終わったらUSBケーブルを抜き、再度電源を入れます。
無事起動したでしょうか。私の環境では「Andoridを更新しています」といったメッセージが表示され、起動し…ますが、もともと入っていた翻訳アプリがエラーを出して起動しません…まぁ、これは使えたら便利でしょうが、それを使うならもう一個買っておけばいいかなぁ…直せたら直しますが…
たぶん、先ほど吸い出したsystem.binに書き戻したら動くんじゃないでしょうか。そのためのバックアップですし。
で、起動はしたものの、もともとのホームアプリであった翻訳アプリが落ちるし、設定画面も出せないので詰んでいるようにも見えます。
そこで、気づいた人は気づいたかもしれませんが、この時点でUSBを接続したPCからはAndroidデバイスとして認識されています。
では、試してみましょう。
Windowsだと、もしかしたらドライバが足りないかもしれません。
その場合、Mediatek用のスマホのadb用ドライバを探してきて入れると認識できるかもしれません。
あと、adbも必要です。
以前も書きましたが、この更新をするまでは、adbドライバが認識され、adb接続を行っても、デバイスから強制的に切断されてしまっていて使用できませんでした。
うーん、やっぱりadbはふさがってるか。 pic.twitter.com/YqqL0nibZh
— ひろみつ(honeylab) (@bakueikozo) 2021年3月16日
その辺がめんどくさい場合、得意な方はLinuxで作業したほうが便利かも。
こんどは接続できました。
では、adbを使ってここからAndroidの設定画面を表示させます。
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
このコマンド(すでにshellにいる場合は adb shellは省略)
見慣れたホーム画面が現れました。
「ホーム」を選択し、Launcher3が入っていますのでホームアプリを変更します。
これで、起動時にホーム画面が無事表示されます。
言語設定も日本語にしておきましょう。
野良APKをインストール可能にします。
APKのインストールに必要な /data/local/tmp の権限が正しくない可能性がありますので調整します。
これがうまくいってないと、APKのインストールに失敗します。
ここまでやると、APKPureからダウンロードしたアプリがインストールできるようになります。すごい!
よしよし、まだまっさらなやつでは試してないけど、一度完全に文鎮化したやつに書き込んで動くのを確認した。
— ひろみつ(honeylab) (@bakueikozo) 2021年4月5日
ext4イメージにパッチ当てるのがWindowsだけで完結しないんだよなぁ..どうにかならんかな(ext2sdを使うぐらいしか) pic.twitter.com/Kd0JA5OXDl
→まっさらな端末でも成功しました
あとは、もうこれで普通のAndroidです。6.0とちょっと古めですが、
適当なジャンクとして手に入る小型機としては十分新しく、遊べると思います。
なにかわからないことがあれば twitter @bakueikozoまでお気軽に。