進捗どうですか

仕事で Android を root 化するというと、なんでそんな無駄なことするの?という視線を強く感じますが、時には獣道に分け入らないと得られないものもあるのですよ。

以下の 3 つがむっちゃ参考になりました。

note.com

scratchpad.jp

ahiru8usagi.hatenablog.com

システムアプリにするといろいろできるようになります。ここで知りました。

appuals.com

su
systemize

REMOTE_SUBMIX という Audio Source は全ての音源をとっちゃうわけで、盗聴に使われていた経緯から、Andorid 6 ぐらいから?使えなくなってたようで、それをセキュアに録音できる仕組みとして、Android10 からの AudioPlaybackCapture API 導入ということらしい。

システムアプリというのは、単に /system/priv-app に置かれたものってだけでもあるけれど(FLAG_SYSTEM)、FW の ROM と同じ証明書で署名されたものってのもあるらしく、それが FLAG_PRIVILEGED だそうだ。

stackoverflow.com

今回やろうとした Android10 の Audio Capture でなんでもキャプチャしてやろうというのは、FLAG_SYSTEM だけでは不十分だったみたいだ。くそがー。クソオブクソ。どうでもいいけど、現時点で Youtube のアプリは targetapi は android 11 で、キャプチャを明示的に無効にしてないので、取り放題だった。spotify とか amazon musicandroid 9 なので、明示的に有効にしてない限りキャプチャできないのでとれなかった。youtube は MediaProjection もできるし、なんであんなガバガバなんだ。意図的にガバガバにしているとしか思えない。

というわけで REMOTE_SUBMIX を使ってやろうとしているわけだが、これはこれで端末の音源を全部取れる代わりに端末から音が全くしなくなってしまう。しょうがないので、公式の REMOTE_SUBMIX の説明にある、

Certain streams are excluded from the remote submix, including AudioManager#STREAM_RING, AudioManager#STREAM_ALARM, and AudioManager#STREAM_NOTIFICATION. These streams will continue to be presented locally as usual.

これを活用してやろう、つまり、撮ったやつを ALARM 扱いにして流せばいいじゃん、ということをやってみている途中。まだ実験中だけど、REMOTE_SUBMIX で撮っている最中、ALARM 扱いにして MeidaPlayer で前前前世を流すとちゃんと聞こえていて、裏で流しているヒゲダンディズムが録音できるので、たぶんうまくいく。なんか知らんけど音が小さいというのがおかしいなと思っているけれども。

うまくいかないかもしれないし、本番で使われる可能性は皆無だけど、ぼくらが作ろうとしているのはプリインスコアプリだろ?と思うし、こういう結果につながらない積み重ねが重要なんだよ、きっとね!