Androidアプリでよくある、アプリ内ブラウザを強制的に使用させられる仕様を回避するMagiskモジュールを紹介します。
好きなブラウザで開けるように
Androidアプリでリンクを開いたとき、ブラウザアプリに移動せずにそのアプリ内でページが開かれることがあります。
これはChromeをはじめとするブラウザの「Custom Tabs」と呼ばれる機能を利用しているものが多く、ブラウザアプリにURLを渡して開くよりも高速に開けるメリットがあることで採用が広まっています。
ただ、Chromeでは使い勝手が悪いからKiwi BrowserやOpera、Vivaldiなどを入れている、という人には邪魔でしかありませんし、アプリ独自のブラウザを実装している場合はChromeで同期されているというメリットもなくなります。
大抵のアプリは設定で「アプリ内ブラウザを使用するかどうか」を選べるようになっていますが、LINEのような古くさいアプリでは選択肢を与えてくれません。(※iOSではLINE Labsに設定があるものの、Androidでは使えません)
そこで役に立つのが、アプリ内ブラウザ強制を無効化してくれるMagisk / Zygiskモジュール『InternalBrowserRedirect』です。(root化必須)
【追記】
アプリ内ブラウザの選択肢が出るのが面倒だったので、直接ブラウザアプリを開かせるようにしたバージョンを作成しました。
ついでに日本語化もしています。
Pixel 6aなどではInternalBrowserRedirectで使っている隠しAPIの利用が制限されてクラッシュしてしまうようなので、その場合はadb shellにてsettings put global hidden_api_policy 1
を実行してみてください。
Zygiskを有効化した後、Magiskアプリでインストールしてください。
アプリから個別に設定できるようになっており、デフォルトだと何も動いてくれません。
アプリドロワーからInternalBrowserRedirectを探して開き、右上のメニューで「New RuleSet」を押してください。
アプリ内ブラウザ強制を無効化したいアプリを選んでください。
「Enable」を押すと有効になります。
なお、Magisk側でDenyListに入れているといくらここで有効化していてもInternalBrowserRedirectが動作しなくなるので注意してください。
有効にしただけではまだ動作しません。
「View Rules」を押して、ルールを追加しないといけません。
- Tag…ルール名、何でもOK
- URL Source…アプリ内ブラウザに渡されるURL
- Ignore URL Regex…アプリ内ブラウザで開くままにするURL (正規表現で指定)
- Force URL Regex…上記Ignore~の条件に一致していても必ずアプリ内ブラウザ強制を無効にするURL (正規表現で指定)
の4つを設定します。
URL Sourceを調べるには、InternalBrowserRedirectのアプリ選択画面で「Debug Mode」を有効化してください。
adb logcat -s InternalBrowserRedirect -v raw
を実行すると、「Debug Mode」を有効化したアプリのインテント情報が表示されます。
アプリ内ブラウザで開かれてしまうリンクを開き、そのときのインテントでどこにURL情報が入っているかを探します。
LINEの場合だと「Data」にURLが入っているので、この場合はURL Sourceに「intent://data」と入れることになります。
もしExtra→Data→Urlと入れ子になっていたら、「intent://extra/data/url」と入れます。
LINEでアプリ内ブラウザ強制を無効化したい場合、このように入れてください。
- URL Source…
intent://data
- Ignore URL Regex…
.*(line-sec\.co\.jp|line\.me|linecorp\.com).*
LINE証券などLINEのサービスはアプリ内で開いた方が便利なので、除外しています。
こうすることでLINEのトーク画面などでリンクを押した時に、他のブラウザで開く選択肢が出るようになります。
こちらの日本語版だと選択肢を出さずにブラウザアプリを開くようにしています。
アプリ内ブラウザだとログインし直す手間が増えて面倒だ、フル機能を使えるブラウザアプリで開きたい、という方はInternalBrowserRedirectを使ってはいかがでしょうか。