2018年12月8日土曜日

落ちクマ

PC から WiFi 経由で Android のファイルブラウズをしたいのだけれど,
・日本語ファイル名が化けない
・外部サーバを介さず LAN 内で完結する
・SD カードを読み書きできる
・上記の機能がすべて無料で使える
を満たす Android アプリが,何故か無い.

なので Cyanogenmod, LineageOS では内蔵の sshd を立ち上げていた (PC からは WinSCP) のだが,今のところこれが最強.
しかし Redmi Note 3 Pro を AOSP 系の Pixel Experience にしたら sshd が入っていなかった.
Android アプリにも sshd はあるけど,root じゃないので SD カードアクセスができず使えない.

仕方がないので dropbear を Android 向けに build することにした.
GitHub を漁るといろいろ Android に移植済みの dropbear があるが,最も新しそうな dropbear-android を使用することにする.

【手順】
(1) Android NDK 環境をここ見ながら構築する.
自分は↓で行けた.
/home/yoshi/android-ndk-r16b/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/home/yoshi/android-toolchain
(2) dropbear-android のビルド
setenv TOOLCHAIN /home/yoshi/android-toolchain
./build-dropbear-android.sh
で,珍しく一発でビルドが通った.

で,RN3P に持っていって起動したら,
# /data/dropbear -r ./ssh/rsa_key_db -F -P ./ssh/pid -A -N root -T ./ssh/authorized_keys -U 0 -G 0
[23486] Dec 08 15:37:22 Not backgrounding
[23487] Dec 08 15:37:25 Child connection from 192.168.0.13:62545
[23487] Dec 08 15:37:27 Password auth succeeded for 'root' from 192.168.0.13:62545
[23487] Dec 08 15:37:27 Failed to open any /dev/pty?? devices
[23487] Dec 08 15:37:27 No pty was allocated, couldn't execute
[23487] Dec 08 15:37:27 Exit (root): Exited normally
んー,terminal の open に失敗してる? そもそも /dev/pty とか Android に無いんじゃないの?

調べてみると,Linux では openpty() で端末を open するのが一般的らしいが,Android に openpty() はない.しかし,ここで他の Android dropbear プロジェクトで,openpty() を独自実装しているものが見つかった.このコードをサクッとコピペして再ビルド.
[28075] Dec 08 21:54:33 Not backgrounding
[20372] Dec 08 22:03:01 Child connection from 192.168.0.13:55309
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Pubkey auth succeeded for 'root' with key sha1!! ... from 192.168.0.13:55309
勝利ヽ(´ー`)ノ

上記のパッチ当て済みのものを GitHub に公開したんで,欲しい人はどうど.

2018年12月2日日曜日

Xiaomi Redmi Note 3 Pro ブートローダーアンロック回避

Xiaomi Redmi Note 3Pro に Pixel Experience (Android 9.0) を入れようと思った.
TWRP から焼き直したら一発でしょ,とか思ってたらそうは問屋が卸さなかった.

Updater process ended with ERROR: 7
なんですと...? Σ( ̄□ ̄ι こうなってくるととたんにめんどくさくなってくる.

Pixel Experience を入れようとしたら TWRP を update しないといけない
→TWRP (recovery.img) を焼き直すためには unlock しないといけない
→unlock するためには Xiaomi に unlock 申請し,MIUI を焼き直さないといけない(?) これの申請に 72時間かかるとか...

やってられないので,ブートローダーアンロックなしで TWRP を焼く手順を試してみた.→参考

(1) EDL モードで MIUI 公式 ROM を書き込める準備をする,まだ焼いてはダメ→参考参考2
自分が使った ROM は手元にあった kenzo_global_images_6.11.3_20161103.0000.00_6.0_global_f7309f8161.tgz
(2) MIUI の公式ロムを解凍した dir の images\recovery.img を,TWRP で上書きする.
(3) (1) の手順に従って MIUI を焼く.(まだリブートしてはダメ)
(4) 焼き終わったら,VolUp + 電源長押しで TWRP を起動する.ここで一回でも MIUI が立ち上がってしまうと,焼いた TWRP が元に戻されてしまうっぽいので注意.
(5) TWRP が立ち上がったら,あとはお好きなように.

←というわけで勝利ヽ(´ー`)ノ


Android P 目玉機能の (Android 7.0 で既に載ってたのね,知らなかった) 2画面分割とか試してみたけど,多分使わないなw タブレットならともかく,6インチくらいの画面で同時作業するシーンが思い浮かばない...
あとブートが異様に速くなったけど,そんなに頻繁に再起動するもんでもないしねぇ.

逆に LineageOS から AOSP 系の ROM になったことで,いろいろと細かい便利機能がなくなったのが不便.(例えば,電源長押しでフラッシュライト ON とか)
ROM 入れ替えなくても,よかったかも.

-----
後日追記:
結局 Lineage 14.1 に戻した orz
アプリ起動時に 1秒ほど反応がなかったり,そのまま画面がフリーズする現象が出た.ROM が悪いのかと思い Liquid Remix も試してみたけど,同じ現象 orz
RAM が足りてない感じではないんだけどなぁ...