2021年05月

モバイルデバイスでブラウジングするときに出てくる広告をブロックする方法として管理人はこれまでHostsファイルによるブロックを使ってきた。
ところが最近(いつ?)は実質上位互換の方法としてDNSサーバーによる広告ブロックが容易に利用できるようになった。
のでDNSサーバーによる広告ブロックに乗り換えつつHostsとの比較を書いておく。
※Wifi接続ごとにDNSサーバーを手動で設定することで広告ブロックすることもできるが、その場合はモバイルネットワークに効果がない。本記事はWifi/モバイル関係なく広告ブロックが可能なDNSサーバーの利用を紹介する。

●簡単な原理
・Hostsファイル:端末のストレージ(通常Root領域)にあるHostsというファイルに、IPアドレスの変換テーブルを記載することができる。広告のサーバーのIPアドレスを無効なIPアドレスに変換するブラックリストをHostsファイルに作ることで広告をブロックできる。

・DNSサーバー:DNSサーバーは本来URLをIPアドレスに変換するサーバー。その変換リストで広告のサーバーを無効なIPアドレスに変換するブラックリストにすることで広告ブロックできる。

要するにどちらの方法でも広告のサーバーをIPアドレス単位でブロックすることで広告が表示されないようにする。
そして共通のメリットは、広告ブロックが特定のアプリに限定されずiOS/AndroidなどのOSそのもの全体の通信に効果を持つことである。
また、どちらもデバイス上で新たなソフトウェアを常駐させる必要がないためパフォーマンスに優れる。

●比較
HostsDNS(Adguard)
Root化・脱獄必須不要
リストの管理可能不可
対応バージョン(iOS)不問iOS14以上
対応バージョン(Android)不問Android9以上
リスト変更の反映端末再起動随時(自動)
ブロック有効化無効化端末再起動随時

管理人が取った方法はAdguardのDNSサーバーを用いる方法である。
この場合、広告ブロック用のIPアドレスブラックリストはAdguard側が管理する。
そのため個人的に特定のIPアドレスをリストに出し入れすることはできない。
すなわちリスト管理できないことがDNSサーバーによる広告ブロックの欠点である。
…が、特にリスト管理せずAdguard任せでも支障はないばかりか、自分で更新する手間が省ける分利点になっている。(※自前でDNSサーバーを立てるならその限りではない)
一部サイトでは広告ブロックの無効化をしないとコンテンツを表示しないような仕様になっていることがあり、Hostsファイルによる方法では広告ブロックを無効化するために端末を再起動する必要があるのに対し、DNSサーバーによる方法では設定からDNSサーバーを変更するだけで広告ブロックを一時的に無効化できる。
というような比較から、管理人はHostsファイルによる広告ブロックを停止しDNSサーバー方式に移行した。

●Hostsファイルによる広告ブロックの使い方(Root化・脱獄が必須)
DNSのほうがオススメだけど一応。
iOS/Android環境ともに下記で解説している。
http://blog.livedoor.jp/miscmods/archives/24582371.html
Android環境があると複数ソースのマージが自動でできるので楽になる。

●DNSサーバーによる広告ブロックの使い方(Root化・脱獄が不要)
・iOS
デバイスのSafariでAdguardのページにアクセスし、プロファイルをインストールする。
https://adguard.com/ja/blog/encrypted-dns-ios-14.html
その後DNSサーバーを指定するだけ。
IMG_0061

IMG_0065


・Android
ネットワーク設定または接続設定にあるプライベートDNSにAdguardのDNSサーバーのホスト名を入力。
IMG_20210520_165334


スマホのマクロカメラがカメラ数水増しのおもちゃだった時代は、Poco F2Proの登場で終焉した。

オートフォーカス+2倍ズーム相当の画角により、花の花粉だったり昆虫の体毛まで写るPocoF2Proのマクロカメラは、肉眼とは別世界の写真を手軽に撮れる楽しいカメラになった。

これは管理人が撮影した花
IMG_20201116_150043

IMG_20210228_150953

IMG_20210331_134935


このテレマクロカメラが一部にウケたのか、続くMi11とRedmi K40シリーズにも同様にテレマクロカメラが搭載された。
しかし、これらの機種はスナドラ800シリーズ搭載のハイエンド。
もっとお手軽な価格帯でテレマクロカメラ搭載の機種といえば…日本公式発売のRedmi Note10Pro。


Redmi Note10Proも、カタログスペックでは上で紹介した機種と同等のテレマクロカメラを備えている。果たしてその写りは…?

せっかくなので、Poco F2Proのテレマクロと比較してみた。
(MIUIカメラ、Proモード、マニュアルフォーカス)

まずはPoco F2Proでメモリに限界まで接近。
IMG_20210503_225230

続いてRedmi Note10Proで同じように限界まで接近。
IMG_20210503_225055




今度はPoco F2Proで限界まで離れて撮影。
IMG_20210503_225253

同様にRedmi Note10Proでも限界まで離れて撮影。
IMG_20210503_225121


比較すると、最も寄った場合はRedmiNote10Proのほうが接近できて、
最も離れた場合もRedmiNote10Proのほうが離れられるということがわかった。
フォーカス距離範囲の観点ではRedmiNote10Proのほうが高性能である。

が、RedmiNote10Proのほうは色がおかしい。
このように正常に保存されるときもあれば…
IMG_20210625_222424

ひどいときはこうなってしまう。
IMG_20210625_222539

少し検証したところ、Proモード使用かつ「終了時のモードを記憶」が有効化されているときの2回目以降のカメラアプリ起動時に色がおかしくなるらしい。
カメラアプリのデータをリセットすることで元に戻る。

色がおかしくならないときに限っては映り自体は(色が若干薄くなるくらいで)Poco F2Proと遜色ない。
なので結論としてはモノ自体はPoco F2Proに引けを取らないということになる。
ただしバグさえなければ…の話。ぶっちゃけ「終了時のモードを記憶」が利用できないのは辛い。
IMG_20210504_113925
IMG_20210504_113901

ちなみに、Xiaomi機のテレマクロのスペックを比較してみた。
出典はkimovil.com。
機種画素数(MP)センサータイプF値ピクセルサイズ(μm)センサーサイズ(㌅)
Poco F2Pro5MPSamsung S5K5E9ISOCELLƒ/ 2.21.121/5
Mi 115MPSamsung S5K5E9ISOCELLƒ/ 2.01.121/5
Poco F3/Redmi K40/Mi11Xシリーズ5MPSamsung S5K5E9ISOCELLƒ/ 2.41.121/5
Redmi Note 10 Pro5MPOmnivision OV5675CMOSƒ/ 2.41.121/5
Mi 11Lite5G5MP????ƒ/ 2.41.12??


●解決したいこと
Android11ベースのMIUI12で通知の優先度設定が削除されたのを無理やり変更したい。

●理由
通知の優先度「最小化」が設定できなくなるので、「ステータスバーの通知アイコンを非表示にするが通知領域には通知を出す」という方式で通知を受け取ることができない。
ステータスバーが通知アイコンで汚くなるか、常駐アプリが停止していないかチェックできなくなるかの2択になってしまう。
一時期はこの仕様のせいでもうXiaomi端末買うのやめようかと思ってた。

●方針
実際のところ、ユーザーが通知の優先度を設定するプルダウンメニューが削除されたものの、通知の優先度自体は依然としてシステムに残っており、Googleアプリの天気予報などは最小化されて表示される。あと、Android10のMIUIからデータ引き継ぎでアップデートした端末では通知の優先度設定が引き継がれていて、最小化が保たれる。
じゃあ、システムファイルから通知の優先度を定義したものを探し出して手動で書き換えればいいじゃん。

●実際
Root取ってシステム領域を探してたら通知の優先度を定義したファイルがあっさり見つかった。

/data/system/notification_policy.xml
↑コレ

こいつを書き換えればよい。
というわけで内部ストレージなりPCなりどこかにコピーして編集。

例としてバッテリー駆動時間推定で常駐させているGSam Battery Monitorの通知アイコンをステータスバーから"のみ"消してみる。

Ctrl+Fなり何なりしてアプリ名とかで探し出し、該当するチャンネルで
"orig_imp":アプリ自身が指定した通知優先度
"importance":ユーザーが指定した通知優先度
この2つの値を変更する。
最小化する場合は、どちらも優先度"1"を指定する。

↓こんな感じ

<channel show_badge="true" name="Battery Status" orig_imp="1" flags="0" content_type="4" usage="5" importance="1" id="com.gsamlabs.bbm_STATUS" sound="content://settings/system/notification_sound" fgservice="true" locked="4" desc="Notifications for battery status" visibility="-1"/>

"flags"、"conten_type"、"usage"、"locked"などの数値の意味は不明。上記の数値をそのまま使えば良いと思われる。

続いてnotification_policy.xml(コピー)を書き換えた後、/data/system/ に戻す必要がある。
この時、端末が起動した状態だと変更を戻されてしまうため効果が出ない。

そこで、内部ストレージなどにファイルを入れておき、TWRPのFile Managerで/data/system/ に上書きコピーする。(つまりTWRPによるユーザーデータの復号化ができない端末だとできない)
その後システムに再起動すると、手動で書き換えた優先度が(上手く行っていれば)適用される。
多くのアプリで検証したわけではないが、数値の組み合わせによっては上手く適用されず、勝手に戻される場合がある…?

ひとまず上記で例を上げたGSam Battery Monitorについて
ステータスバーに通知アイコンが非表示で、通知領域でのみチェック可能になった。
IMG_20210503_124646
IMG_20210503_124628
ということでAndroid11ベースのMIUI12でもなんとか通知の最小化を設定することができた。
↑の端末はRedmi Note10Proで、発売時に既にAndroid11なのでAndroid10で最小化設定をしてAndroid11にアップデートで引き継ぐということができなかった。
けど本記事の方法ならAndroid11でも直接優先度を変更して最小化することができる。

これからも安心してXiaomi端末を買えるね。



Redmi Note10ProのBLアンロックが完了したので、以前から試したかったことをやってみた。

「パンチホール機のステータスバーを縮めたらパンチホールの上に収まるのでは???」

というわけで、これ↑をやってみる。なお実用面からROMはeuromとしている。


使うツール:G-Visual Mod
※Root化前提なのでBLアンロックしてRoot化すること

まずは初期のステータスバーの状態。
IMG_20210501_200338

なぜか「画面上端-ステータスバー下端」のほうが「画面上端-パンチホール下端」より長い。
これらが一致してるならまだしも、なぜ前者のほうを余分に長くしてしまったのか。
これでは画面の一部がまるまる無駄になってしまっている。

ので、無駄な部分を縮めて画面を広く使えるようにしていこう。

試しにG-Visual Modでステータスバーの高さを20dpにしてみる。
IMG_20210501_200943
ステータスバーの高さは変わらなかった。
最小のステータスバー高さは画面のカットアウトで規定されているようだ。
表示されてる数字とアイコン類は少し画面上方に移動したが、表示が途切れてしまっている。

この状態にG-Visual ModでNotchKiller(ノッチなし端末に相当するカットアウト)を追加する。
IMG_20210501_201419
今度はステータスバーは縮んだ。
しかしアイコン表示と時計は切れている。
また内部的にノッチなしになったため、通信速度表示が時計側から電池残量側に移っている。
時計だけはイレギュラーな実装になっているようで、簡単には動かせないようだ。

時計が動いてくれないので、しかたなく時計が表示される範囲でステータスバーを縮めてみることにした。およそ25dpくらいでギリギリ。
IMG_20210501_203349
パンチホールが少しだけはみ出る状態になった。
これでも時計とそれ以外の要素で高さが若干ずれているのであまり綺麗ではない…

しょうがないので28dpまで増やしてステータスバーとパンチホールをちょうど一致させた。
IMG_20210501_221830
これならば違和感はほとんどない。
初期から比べれば、わずかながら実質的な画面表示範囲は増加している。

更に、NotchKillerのおかげで、本来ではステータスバー部分が黒帯になってしまうアプリでも全画面表示できるようになっている。しかし、MIUIのシステム自体もパンチホールを見失うため、ステータスバー表示アイコンが多い時は容赦なく表示が欠けてしまう。
IMG_20210502_173435

ちなみに
同じMIUIでも、もともとノッチ・パンチホール無しの機種ではステータスバー縮小に伴って時計も問題なく移動してくれるのだが…(↓POCO F2 Pro)
IMG_20210502_172314

少なくともMIUIでパンチホールの上にステータスバーを押し込むことは難しそうなので、他のメーカーの端末を検討する必要ありか。

追記
/vendor/overlay/DevicesAndroidOverlay.apk
/vendor/overlay/DevicesOverlay.apk
この2つのオーバーレイにノッチ形状やステータスバーの縦方向のpadding(余白)の記載有り。
改変してMagiskモジュールに便乗して放り込むとそのへんを少しいじることができた。
しかし完全ではなく、これら2つの改変では狙ったようにならない。

オーバーレイ改変を併用することで時計含めて縦方向のステータスバー縮小は自然にできたが、
左右方向のオフセットが変更できず、ベゼルの丸い部分に隠れてしまった。
G-Visual Modや、shellコマンドによる指定も効かないので、優先度の高いオーバーレイがどこかに存在していると思われる。
IMG_20210503_193907_1

また、パンチホールの周囲に表示されるべき黒い丸が消失し、パンチホールの外周が汚くなってしまった。
IMG_20210503_193920






Redmi Note10Proといえば、3.5万円でAMOLED120Hzに108MPカメラを備えたとんでもないアレ。
しかもXiaomi製。そう、XiaomiといえばROM焼き。ROM焼きといえばXiaomi。

で、今回Redmi Note10Proが日本で発売されるにあたって、グローバル版と比べてLTEバンドが増やされている。前世代にあたるRedmi Note9Sのときには国内版のバンド構成の影響で一部カスタムROMでモバイル通信に不具合があったとのこと。

じゃあこっちはどうなんだろう?ってことで焼いて試すしかないよね。

※ROM焼きにはBootloaderアンロックが必要(通称BLアンロック)
※BLアンロックにはデータ通信可能なSIMカードと、Xiaomiアカウント(要SMS認証)が必要
※BLアンロックは作業開始から7日間の待ち時間が発生する
※7日待った後再度作業すると本当にアンロックされる
※アンロックされる際にそれまでのユーザーデータは消去される


●Xiaomi.eu
通称eurom。純正MIUIからプリインストールAPPを除去したもの。一部は更新の早い中国版MIUIをベースにGoogleサービスを追加しており、新機能を早めに試せる。

ROMバージョン:xiaomi.eu_multi_HMNote10Pro_V12.0.14.0.RKFMIXM_v12-11
euromには安定版(stable)とベータ版(weekly)があるが、執筆時点ではweeklyはまだ始まっていないようだ。なのでstable版を焼いた。
TWRPはこちら

すんなり起動。
Screenshot_2021-05-01-17-36-24-083_com.android.settings

楽天モバイルのSIMを入れた状態で起動すると、いきなりVolteにつながっていた。
パートナーのau回線でもしっかり国内版独自のバンド18を掴んでいる。
Screenshot_2021-05-01-17-40-29-899_com.osuworks.ktc.netchecknow


なのでeuromは今の所問題ない…と思われる。

●AOSP系カスタムROM
PixelExperience Plus
PixelExperience_Plus_sweet-11.0-20210424-1200-OFFICIAL
ブートアニメーションが終わらず、ADBデバイスとしての認識もしない。

Havoc OS
Havoc-OS-v4.3-20210415-sweet-Unofficial-GApps
ブートするが、セットアップ画面で「there is an internal problem with your device(内部的なエラーが発生しました)」的な意味のメッセージが出て再起動される。再起動後もまた同様に繰り返される。

ArrowOS
Arrow-v11.0-sweet-OFFICIAL-20210430-GAPPS
正常起動。
Screenshot_20210501-182917
ステータスバーにVolteマークは出ていないが、au回線を用いての発信テスト成功(111にダイヤル)。
音声ネットワークがLTEになっていることを確認(つまりVolteが使えている)。
なお初期で入ってるカメラアプリがAOSPの古典的カメラアプリなのでメインカメラしか使えない。
またANXカメラは映らず。
あとパンチホール外周が若干汚い

Nezuko OS
NEZUKO_sweet-11.0-20210420-1648-STABLE-OFFICIAL
Havocと同様にエラーメッセージと再起動が繰り返される。

CarbonROM
CARBON-CR-9.0-R-UNOFFICIAL-sweet-20210423-1134
NikGapps-core-arm64-11-20210501-signed
正常起動。挙動はArrowOSと同様?

dotOS
dotOS-R-v5.0.1-sweet-UNOFFICIAL-20210427-1258
NikGapps-core-arm64-11-20210501-signed
正常起動。挙動はArrowOSと同様?


所感
PixelExperienceベースのROMは内部エラーで落とされるが、それ以外ではモバイル通信も含めて動作するようだ。
カメラ周りの問題があるので実用性はやはりeuromか…。



↑このページのトップヘ