ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2025/07/19

Pixel 6a でバッテリーのサイクル回数を見る

先日発表されたGoogle Pixel 6a バッテリー パフォーマンス プログラム で使用しているPixel 6aが対象だったのと、2025年7月のアップデート (BP2A.250705.008) を入れた後でも、Pixel 6aではバッテリーのサイクル回数が375回以上にならないとサイクル回数が表示されないようです。


なのでバッテリーのサイクル回数を見る方法のメモ書き。


アプリをインストールして見る


「android バッテリー サイクル回数」などで検索すれば出てきます。


コマンドで見る (恐らくAndroid 12以上)


$ adb shell cat /sys/class/power_supply/battery/cycle_count

でサイクル回数が出力されます。
# Pixel 3 (Android 12)でも出力されたのでAndroid 12でもサイクル回数が取得できる?


デバイス診断で見る


Pixel 6aの設定アプリからは消えてしまったサイクル回数はデバイス診断を起動すれば見れます。
amコマンド

$ adb shell am start -n com.android.devicediagnostics/.MainActivity

で起動するか、ショートカットを作成するなどして、デバイス診断を起動をします。

「コンポーネントの状態」 →「バッテリーの状態」でサイクル回数が表示されます。 (初回利用日時は取得できないようです)




アプリを作る(?) (Android 14以上)


Intent intent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
if (intent != null) {
    int cycleCount = intent.getIntExtra(BatteryManager.EXTRA_CYCLE_COUNT, -1);
    ~ cycleCount を画面等に出す ~
}

2024/05/24

povo2.0のSIMへの電話番号の書き込みで気付いたこと

 povoのサポートのチャットから依頼し、povo2.0のSIMに電話番号を書き込んでもらいました。

Android 14からは設定 → デバイス情報 → 電話番号 のタップで表示される(Android 13の時は電話番号が表示されなかったような気がする)のですが、SIMへの電話番号の書き込み前後で何か変化があるか気になったので。

検証はPixel 6a (Android 14, ビルド番号 AP1A.240505.004 (Android セキュリティアップデート: 2024/05/05))。


SubscriptionManager#getPhoneNumber(int) で電話番号を取得した場合

電話番号書き込み前は +8190xxxxxxxx

と国番号が付いた形式で返ってきたのが

電話番号書き込み後は 090xxxxxxxx

の形式で返ってきました。


Google電話アプリ

デュアルSIMで使用している場合、Androidの設定 → ネットワークとインターネット → 通話とSMS → 通話 で「毎回確認」に設定していると掛ける時にどちらのSIMを使用するかダイアログが表示されるのですが、書き込み前は電話番号は表示されていなかったのが表示されるようになっていました。

電話番号書き込み前


電話番号書き込み後



2022/01/23

5G n79対応のAndroid端末 (2023/09/22現在)

5G n79に対応しているのに載ってないAndroid端末は書いてる人が気付いてないか、買う気のないメーカーまたは機種です。
2022/02/06 Astro Slide 5Gを追加
2022/02/09 AQUOS wish (キャリア販売以外) を追加
2022/03/26 Xperia 5 III SIMフリー版を追加
2022/04/20 適宜更新されているようなのでdocomoからの発売機種はリンクのみに変更
2022/05/12 AQUOS R7 (ソフトバンク) を追加
2022/07/09 Xperia 10 IV (楽天モバイル) を追加
2022/07/15 Xperia 10 IV (キャリア販売以外) を追加
2022/09/01 Desire 22 proを追加
2022/09/12 Xperia 1 IV XQ-CT44 を追加
2022/09/26 AQUOS sense7 SHG10 (au) を追加
2022/09/29 Xperia 5 IV (楽天モバイル) を追加
2022/11/04 AQUOS sense7 (楽天モバイル) を追加
2022/11/16 AQUOS sense7 (キャリア販売以外) を追加
2023/01/19 Xperia 5 IV (キャリア販売以外) を追加
2023/04/20 Android One S10 (ワイモバイル) を追加
2023/05/11 Google Pixel 7a, Xperia 1 V (キャリア販売以外), Xperia 10 V (楽天モバイル) を追加
2023/06/09 AQUOS wish3 (楽天モバイル) を追加
2023/06/30 Xperia 10 V (キャリア販売以外) を追加
2023/07/06 razr 40 ultra を追加
2023/07/13 AQUOS wish3 (キャリア販売以外) を追加
2023/07/27 Pixel Fold を追加
2023/08/23 AQUOS R8 (キャリア販売以外), AQUOS R8 pro (キャリア販売以外) を追加
2023/09/22 Xperia V 5 (キャリア販売以外、楽天モバイル)を追加

Google

モデル名 発売日 発売時のOSのバージョン
Pixel Fold 2023/07/27 Android™ 13 Google Pixel Fold の技術仕様と画面サイズ - Google ストア
Pixel 7a 2023/05/11 Android™ 13 Google Pixel 7a の技術仕様 - Google ストア


HTC

モデル名 発売日 発売時のOSのバージョン
Desire 22 pro 2022/10/01 Android™ 12 HTC Desire 22 pro | HTC 日本


Microsoft

モデル名 発売日 発売時のOSのバージョン
Surface Duo 2 2022/01/11 Android™ 11 スペック


Motorola

モデル名 発売日 発売時のOSのバージョン
razr 40 ultra 2023/07/21 Android™ 13 motorola razr 40 ultra
razr 5G 2021/03/26 Android™ 11 Motorola Razr 5G


Planet Computers

モデル名 発売日 発売時のOSのバージョン
Astro Slide 5G 2021/11/xx ? Android™ 11 スペック


SHARP (キャリア販売以外)

モデル名 発売日 発売時のOSのバージョン
AQUOS R8 pro SH-R80P 2023/08/31 Android™ 13 スペック
AQUOS R8 SH-R80 2023/08/31 Android™ 13 スペック
AQUOS wish3 SH-M25 2023/07/21 Android™ 13 スペック
サポート
AQUOS sense7 SH-M24 2022/11/25 Android™ 12 スペック
サポート
AQUOS sense6 SH-M19 2021/11/26 Android™ 11 スペック
サポート
AQUOS R6 SH-M22 2021/09/24 Android™ 11 スペック
サポート
AQUOS sense5G SH-M17 2021/03/12 Android™ 11 スペック
AQUOS wish SH-M20 2022/02/18 Android™ 11 スペック
サポート


Sony (キャリア販売以外)

モデル名 発売日 発売時のOSのバージョン
Xperia 5 V XQ-DE44 2023/10/中旬 Android™ 13 スペック
Xperia 10 V XQ-DC44 2023/08/04 Android™ 13 スペック
サポート
Xperia 1 V XQ-DQ44 2023/07/14 Android™ 13 スペック
サポート
Xperia 5 IV XQ-CQ44 2023/02/01 Android™ 12 スペック
サポート
Xperia 1 IV XQ-CT44 2022/09/16 Android™ 12 スペック
サポート
Xperia 10 IV XQ-CC44 2022/07/22 Android™ 12 スペック
サポート
Xperia 5 III XQ-BQ42 2022/04/22 Android™ 12 スペック
サポート
Xperia PRO-I XQ-BE42 2021/12/15 Android™ 11 スペック
サポート
Xperia 1 III XQ-BC42 2021/11/19 Android™ 11 スペック
サポート
Xperia 5 II XQ-AS42 2021/05/28 Android™ 11 スペック
サポート
Xperia PRO XQ-AQ52 2021/02/10 Android™ 10 スペック
サポート
Xperia 1 II XQ-AT42 2020/10/30 Android™ 10 スペック
サポート


docomo

対応周波数帯 - NTTドコモ 参照 (PDF)


au

モデル名 発売日 発売時のOSのバージョン
Pixel Fold 2023/07/27 Android™ 13 Google Pixel Fold 実装周波数一覧 (PDF)
au携帯電話などの対応周波数帯一覧
Pixel 7a 2023/05/11 Android™ 13 Google Pixel 7a 実装周波数一覧 (PDF)
au携帯電話などの対応周波数帯一覧
AQUOS sense7 SHG10 2022/11/11 Android™ 12 au携帯電話などの対応周波数帯一覧


ソフトバンク

モデル名 発売日 発売時のOSのバージョン
Pixel Fold 2023/07/27 Android™ 13 Google Pixel Fold 搭載周波数帯一覧 (PDF)
Pixel 7a 2023/05/11 Android™ 13 Google Pixel 7a 搭載周波数帯一覧 (PDF)
AQUOS R7 2022/07/08 Android™ 12 SHARP AQUOS R7 搭載周波数帯一覧 (PDF)

参考: SIMロックが解除可能な機種及びSIMフリー機種の周波数帯一覧 (PDF)



ワイモバイル

モデル名 発売日 発売時のOSのバージョン
Android One S10 2023/01/19 Android™ 13 京セラ Android One S10 搭載周波数帯一覧  (PDF)

参考: SIMロックが解除可能な機種及びSIMフリー機種の周波数帯一覧 (PDF)


楽天モバイル

モデル名 発売日 発売時のOSのバージョン
Xperia 5 V 2023/10/中旬 Android™ 13 スペック詳細
AQUOS wish3 2023/07/06 Android™ 13 スペック詳細
Xperia 10 V 2023/07/06 Android™ 13 スペック詳細
AQUOS sense7 2022/11/04 Android™ 12 スペック詳細
Xperia 5 IV 2022/10/21 Android™ 12 スペック詳細
Xperia 10 IV 2022/07/08 Android™ 12 スペック詳細
AQUOS wish 2022/01/21 Android™ 11 スペック詳細

2021/11/03

Android 12のクイック設定にWi-Fiとモバイルデータを追加する (エミュレータでの話)

2022/08/18 追記

Android 13ではクイック設定のWi-Fiとモバイルデータは分離できなくなりました。

変更時のコミット

https://android.googlesource.com/platform/frameworks/base/+/29c2e807e010ca0229e9db1d036649f3b7c21134%5E%21/

2022/08/18 追記ここまで

以下Android 12での内容です。


ここではAndroid Studioのエミュレータを使用しています。

実機では確認していませんので実機で設定を変更される方は自己責任でお願いします。

2021/11/12 追記: reddit への投稿によると実機でもできるようです。

2022/02/11 追記 ここから

2022/02/08 (日本時間) にリリースされた Pixel 3のアップデート (ビルド番号 SP1A.210812.016.C1) では2021/11のセキュリティパッチが取り込まれていないので、以前と同じ方法

$ adb shell settings put secure sysui_qs_tiles "wifi,cell,$(settings get secure sysui_qs_tiles)"

のみでWi-Fiとモバイルデータをクイック設定に追加できます。

追記ここまで


Android 12になってからクイック設定のWi-Fiとモバイルデータが1つにまとめられインターネットとなりました。Android 12にアップデートした直後は

9To5Google - How to bring back the Wi-Fi and mobile data toggles on Android 12

XDA - Google explains the reasoning behind Android 12’s Internet Quick Settings tile

で紹介されている方法でできていたのですが、2021/11のセキュリティパッチを適用するとこの方法が使えなくなるようです。

コミットログを見てみると

Pixel 3a, Pixel 3a XL, Pixel 4, Pixel 4a, Pixel 4a (5G), Pixel 4 XL, Pixel 5, Pixel 5a (5G)
https://android.googlesource.com/platform/frameworks/base/+/39627225836a334d785e2176ca517effe806ec3a

Pixel 6, Pixel 6 Pro
https://android.googlesource.com/platform/frameworks/base/+/a8c61c93a4adc401781424ff87167c8f2b02c332

でクイック設定の表示する項目でWi-Fi、モバイルデータがあった場合、削除するようになっています。

9To5Google、XDAで紹介された方法ではAndroid Studioのエミュレータ (Android 12 ビルド番号 SE1A.211012.001) ではWi-Fi、モバイルの追加ができなかったので、エミュレータも恐らくこのパッチが適用されているのだろう、ということで差分からクイック設定にWi-Fi、モバイルデータを追加できないか確認してみます。


差分を見ると FeatureFlags というのが追加されています。さらに

https://android.googlesource.com/platform/frameworks/base/+/a8c61c93a4adc401781424ff87167c8f2b02c332/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java#519

https://android.googlesource.com/platform/frameworks/base/+/a8c61c93a4adc401781424ff87167c8f2b02c332/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java#124

で featureFlags.isProviderModelSettingEnabled()

https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-12.0.0_r12/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java#107

は FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL) を返しているだけなので

https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-12.0.0_r12/core/java/android/util/FeatureFlagUtils.java#89

を false で返すことができれば、Wi-Fi、モバイルデータが削除されずに済みそうです。


最初に SETTINGS_PROVIDER_MODEL (= settings_provider_model)の値を確認。

$ adb shell settings get global settings_provider_model

エミュレータでは null (キーが無い) でした。

次に SETTINGS_PROVIDER_MODEL の値を false に設定します。

$ adb shell settings put global settings_provider_model false

次にクイック設定にWi-Fi (wifi) とモバイルデータ (cell) を追加。

$ adb shell settings put secure sysui_qs_tiles "wifi,cell,$(settings get secure sysui_qs_tiles)"

コマンド実行後、クイック設定を開く。(Wi-Fi (wifi) とモバイルデータ (cell) が追加されている)
並び替えたい場合ここで行う。

最後に SETTINGS_PROVIDER_MODEL の値を元に戻す。(エミュレータでは SETTINGS_PROVIDER_MODEL のキーは無かったので削除)

$ adb shell settings delete global settings_provider_model

SETTINGS_PROVIDER_MODEL を削除したのは設定アプリでこの値を参照しているのがいくつかあったので初期状態に戻すためです。


補足: SETTINGS_PROVIDER_MODEL のキーを削除しているので、端末の再起動、クイック設定の並び替えを行うとWi-Fi、モバイルデータの項目が消えます。


最後にもう一度

実機では確認していませんので実機で設定を変更される方は自己責任でお願いします。

参考: Connectivity User Interface


2021/10/12

回転提案ボタンの消し方

回転提案ボタン(下の画像の矢印)の消し方

詳しくは Android Open Source Project の 画面の回転の提案 を参照。


回転提案ボタンを非表示にするにはPCから

$ adb shell settings put secure show_rotation_suggestions 0


回転提案ボタンを表示する(元の設定に戻す)には、デフォルトではshow_rotation_suggestionsというキーはないので

$ adb shell settings delete secure show_rotation_suggestions

でキーを削除するか

$ adb shell settings put secure show_rotation_suggestions 1

で値を1にする。


2020/06/01

Rakuten MiniのNFCのアイコンを消す

先日始まった楽天モバイルのキャンペーンでRakuten Miniを入手したのですが、ステータスバーに表示されるNFCのアイコンが邪魔なので消します。



まずPCとRakuten Miniを繋ぎ、ステータスバーで現在非表示になっている項目を取得します。

$ adb shell settings get secure icon_blacklist

自分のRakuten Miniでは

rotate

と表示されました。現在非表示になっている項目に追加する形でNFCのアイコンを非表示にします。(rotateの後に",nfc"を追加)

$ adb shell settings put secure icon_blacklist rotate,nfc

これでNFCのアイコンが消えました。


2020/02/22

Android 11 Developer Preview 1 のスマートフォン情報が入っているパッケージ

Android 11 Developer Preview 1 (エミュレータ、ビルド番号 RPP1.200123.017)で、電話アプリから「*#*#4636#*#*」で呼び出せる画面にある「スマートフォン情報」(Android 10までは携帯電話情報)が入っているパッケージが変わってた。

Android 10では com.android.settings/.RadioInfo だったのが、
Android 11 Developer Preview 1では com.android.phone/.settings.RadioInfo に変更されてた。

「スマートフォン情報」のアクティビティを直接呼び出している自分用のアプリがあるのでメモ代わりに。


Android 11 Developer Preview 1(エミュレータ)での「スマートフォン情報」


変更された時のコミット
Merge "[RadioInfo] Remove from Settings (into Telephony)"

[RadioInfo] Move from Settings to Telephony

2019/10/21

Android 10でのMIME typeの定義が更新されてた

Android 10でMIME typeの定義が更新されているのでストレージアクセスフレームワーク (SAF)の ACTION_OPEN_DOCUMENT 等でMIME typeを設定している場合、見直したほうがいいかもしれません。

Android 9までは


で定義されていたのがAndroid 10では


にある


で定義されるようになりました。


コミットログは↓参照
https://android.googlesource.com/platform/libcore/+/d5e73ac1a2c92dd929e1462b63d6e36509813486


#Android 10からは "font/*" の指定が効くようになったのでTrueTypeフォント、OpenTypeフォントのファイルのみ選択させることができますね。

2018/10/08

Android Studioのレイアウトエディタのプレビューのフォントを日本語フォントに

Android Studioのレイアウトエディタのプレビューのフォントが気になる、というのを見たので中華フォントで表示されているプレビューを日本語フォントになるようにしてみます。

Windows 8.1 (64bit), Android Studio 3.2 (Windows 64-bit)の場合、修正するファイルは
C:\Program Files\Android\Android Studio\plugins\android\lib\layoutlib\data\fonts\fonts.xml
になります。

2018/10/12 追記
ファイルを編集すると、Android Studioのアップデートに失敗します。必ずバックアップを取っておいてください。また、Android Studioのアップデートは元のファイルに戻してから行うようにしてください。
追記ここまで

でパッチ。 日本語で使用するフォント(<family lang="ja">)を中国語(簡体字)(<family lang="zh-Hans">), 中国語(繁体字), 中国語(注音符号)(<family lang="zh-Hant zh-Bopo">)より前にもってきます。

XML修正前は中華フォントで表示されていたのが


XML修正後は日本語のフォントで表示されるようになりました。

2018/09/26

AndroidXへ移行後に出たNot annotated parameter overrides @NonNull parameterという警告

はじめに
警告の抑止方法がこれで合っているのかは分かりません。


Android Studio 3.2がリリースされたので"Migrate to AndroidX..."を使ってサポートライブラリからAndroidXへ移行したところ、


Not annotated parameter overrides @NonNull parameter
This inspection reports problems related to @Nullable and @NotNull annotations usage configured in Constant conditions & exceptions inspection.

という警告が。対応としては、

File -> Settings...
-> Editor -> Inspections
-> Java -> Probable bugs -> Constant conditions & exceptions


右側の"Configure annotations"をクリックして "Nullable/NotNull Configuration"を表示後、


Nullable annotations, NotNull annotationsの「+」をクリックしてNullable (androidx.annotation), NonNull (androidx.annotation)を追加



androidx.annotation.Nullable, androidx.annotation.NonNullをチェック後、OKをクリック


で警告が出なくなった。

2018/08/14

イースターエッグ ねこあつめのねこの数え方

先日リリースされたAndroid 9でもイースターエッグのねこあつめは残っており、「Andrdoid 8.0/8.1 でのイースターエッグのねこあつめ」に書いてある手順と同じ方法でねこあつめを有効化できます。

Android 8.xの時の「たこ」も残っており、

$ adb shell am start -n com.android.egg/.octo.Ocquarium

で起動できます。


ここから本題

Android 7.x, 8.x, 9.xのイースターエッグ ねこあつめで集まったねこの数を画面上で数えようとすると手間が掛かります。そこでねこの情報が格納されている設定ファイルからねこを数えてみます。


イースターエッグ ねこあつめの設定ファイルはソースから
/data/data/com.android.egg/shared_prefs/mPrefs.xml
にあることが分かります。

設定ファイルの内容は(既にねこが集まっている場合)、以下の様になっています。

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="cat:1871912869">Cat #869</string>
    <string name="cat:771645645">Cat #645</string>
    <int name="food" value="3" />
    <string name="cat:2101744869">Cat #869</string>
</map>

このうち、ねこ以外の行は
・XML宣言
・<map>
・<int name="food" value="n" /> (現在置いているエサの種類)
・</map>
の4行なので、XMLファイルの行数から4行引いてあげればねこの数になります。

root権限がある場合

直接設定ファイルの行数を数えて4引きます。

端末上なら

# wc -l < /data/data/com.android.egg/shared_prefs/mPrefs.xml

PCからだとadbで接続して

$ adb shell "su -c \"wc -l < /data/data/com.android.egg/shared_prefs/mPrefs.xml\""

で設定ファイルの行数が表示されるのでここから4引いた数がねこの数になります。

root権限がない場合

root権限がない場合、/data以下のファイルは直接読むことができません。しかし、設定ファイルはadb backupで取得することができます。手順としては、

(1) PCからadb backupでイースターエッグ (com.android.egg) の設定をバックアップ
(2) PC上でAndroid Backup Extractorを使用してバックアップファイルをTAR形式に変換
(3) TAR形式に変換したファイルから設定ファイル (mPrefs.xml) を抽出して行数 -4

でねこの数を数えることができます。
adb backupの説明は公式サイト (https://developer.android.com/studio/command-line/adb?hl=en) を参照。


(1) PCからadb backupでイースターエッグ (com.android.egg) の設定をバックアップ
-f でバックアップファイル名を指定 (この場合egg.ab) し、バックアップします。
端末とPCを接続後、

$ adb backup -f egg.ab com.android.egg

でPC側に egg.ab が作成されます。


(2) PC上でAndroid Backup Extractorを使用してバックアップファイルをTAR形式に変換
次にAndroid Backup Extractorのサイトから、
android-backup-extractor-YYYYMMDD-bin.zip (YYYYMMDDはリリース年月日)
というファイルをダウンロードし、ZIPファイルの中から abe.jar を抽出します。
(Android Backup Extractorの実行にはJREが必要になります)

引数に unpack、読み込むバックアップファイル (egg.ab)、出力するファイル名 (egg.tar) を指定して、

$ java -jar abe.jar unpack egg.ab egg.tar

でバックファイル (egg.ab) がTAR形式 (egg.tar) で出力されます。


(3) TAR形式に変換したファイルから設定ファイル (mPrefs.xml) を抽出して行数 -4
あとはtarファイルの中から mPrefs.xml を抽出し、ファイルの行数から4を引けばねこの数になります。

$ tar xOf egg.tar apps/com.android.egg/sp/mPrefs.xml | wc -l

で mPrefs.xml の行数が表示されるのでここから4引いた数がねこの数になります。


--

ここまで書いておいてなんですが、
Android 8.0 の 2018/03/01 以降のセキュリティパッチを当てるとThreadLocalRandomの動作が変わるようで、(Android 8.1, Android 9も含む。Android 7系は不明)

https://android.googlesource.com/platform/frameworks/base/+/7bcd6aa4f71a45b27a7f4486e35ebe29fa9eb507/packages/EasterEgg/src/com/android/egg/neko/Cat.java#203

で新しいねこが来る時に生成される乱数が端末を再起動しない限り同じ値を返すようになってしまって、ねこがなかなか増えない状態になってます。

プロセスが生きている間は 10 → 24 → 49 → 34 → ... のようにランダムに値を返すのですが、プロセスが一旦終了し再び実行されると 10 → 24 → 49 → 34 → ... と同じ値を返すようになっています。つまり、
新しいねこがくる(乱数で生成された値がnnn)、プロセスが終了する、
新しいねこがくる(乱数で生成された値がnnn)、プロセスが終了する、
の繰り返しになってしまい、新しく来るねこが毎回同じねこになってしまって…

2018/06/14

Termux上でFDcloneを動かす

2019/05/25 追記

Android 9に対応したFDclone 3.01iがリリースされました。
pkgコマンドでclang, make, ncurses-dev (2019/09/16 statさんの指摘により修正。2019/07の終わりに*-devなパッケージは無くなりました。)とそれらが依存する必要なパッケージをインストール後、makeコマンドでコンパイルできます。

2019/09/16 追記

ncurses-devに含まれているヘッダーファイルなどはncursesのパッケージに含まれるようになりました。
また、ncursesはTermuxの初回起動時にインストールされるので、FDcloneのコンパイルに追加で必要になるパッケージはclang, make (とこれらが依存するbinutils libffi libllvm ndk-sysroot) になります。

2019/09/16 追記ここまで

以下は古い情報です。

2019/05/25 追記ここまで


Termux上でFDcloneを動かそうとした場合、TermuxのAPTリポジトリにFDcloneは無いので自前でコンパイルする必要があります。
makeコマンド一発でコンパイルできればよかったのですが、FDcloneのInstallにもある通り、FDcloneはAndroid 4.xまでの対応となっており、Android 5.0からのサポートされた64bit環境でのコンパイルには対応していません。
ソースを修正してみたところ、少しの修正で済んだのでパッチを上げておきます。

Termuxのバージョン: 0.60
FDcloneのバージョン: 3.01g
端末は
Xperia X Compact (Android 8.0.0 (CPU ABI: arm64-v8a))
Android エミュレータ (Google Play Inten x86 Atom_64 System Image API Level 28 Revision 3)
でコンパイルし、FDcloneが起動するところまで確認しています。

パッチ FD-3.01g-android-termux.patch

FDclone コンパイル手順

コンパイルに必要なパッケージをインストールします。

$ pkg install clang make ncurses-dev

clangを動かすにあたり必要なパッケージ (binutils, libandroid-support-dev, libffi, libllvm, ndk-stl, ndk-sysroot) もインストールされます。

FDcloneのページからダウンロードしたFD-3.01g.tar.gzを展開し、

$ tar xf FD-3.01g.tar.gz

パッチを当てます。

$ patch -p1 < FD-3.01g-android-termux.patch

FDcloneのソースのあるディレクトリに移動してコンパイルして

$ cd FD-3.01g
$ make CC=clang PREFIX=$PREFIX CONFDIR=$PREFIX/etc

インストール。マニュアルは不要なので、バイナリのみインストールしています。マニュアルもインストールする場合は install-bin を install にします。(2019/05/08訂正)

$ make LN="ln -s" install-bin

2019/05/08 訂正
マニュアルもインストールする場合はMANTOPの場所を指定し、install-manを追加します。

$ make LN="ln -s" MANTOP=$PREFIX/share/man install-bin install-man

2019/05/08 訂正ここまで

Android 6.0からハードリンクの作成はできなくなっているのでlnコマンドにオプション "-s" を追加してシンボリックリンクを作成するようにします。
これでFDcloneを動かすのに必要なファイル(fd, fd-cat.C, fd-cat.ja, fd-dict.tbl, fd-unicd.tbl, fdsh)が /data/data/com.termux/files/usr/bin/ にインストールされます。


2018/06/15 追記
FDcloneを起動した状態での上下のスワイプはカーソルの上下になるので、Google 日本語入力のように左右のカーソルキーがあるソフトウェアキーボードを使用すれば、ハードウェアキーボードが無くても結構使えます。

2018/08/29 追記
Google 日本語入力の場合、カーソルキーのフリックでカーソルの上下もできることを教えていただきました。


2018/08/15 追記
2018/08/11にリリースされたFDclone 3.01hですが、FD-3.01h.tar.gzを展開したディレクトリに移動後、patchコマンドのオプションを "-p2" に変更しパッチを適用すればコンパイルできます。

$ tar xf FD-3.01h.tar.gz
$ cd FD-3.01h
$ patch -p2 < ../FD-3.01g-android-termux.patch
$ make CC=clang PREFIX=$PREFIX CONFDIR=$PREFIX/etc
$ make LN="ln -s" install-bin

2018/02/23

Android 8.0にしたXperiaでステータスバーの時計の午前/午後を消す

Xperia X CompactをAndroid 8.0にしたところ、ステータスバーの時計を12時間表示で使用している場合、Android7.xの時には無かった「午前/午後」が表示されるようになってしまいました。


邪魔なので消します。

Re: Sony Android Oreo Flavor: Accordion in Notification Bar on Network Activity
を参考にパッケージ(apk)を作成します。

まず、パッケージの情報と設定を変更する項目を指定したリソースファイルを作成

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.blogspot.zau2and.hideampm"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk
        android:minSdkVersion="26"
        android:targetSdkVersion="26" />
    <overlay
        android:priority="1"
        android:targetPackage="com.android.systemui" />
</manifest>

res/values/config.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="config_showAmpm">false</bool>
</resources>

続いてコマンドラインでパッケージの作成

パッケージの作成


$ aapt p -S res -M AndroidManifest.xml -I $ANDROID_HOME/platforms/android-26/android.jar -f -v -F hideampm.apk

アライメント (zipalign)


$ zipalign -v -p 4 hideampm.apk hideampm-align.apk

パッケージへの署名 (apksigner)


$ apksigner sign --ks キーストアのファイル --v1-signing-enabled false --out hideampm-release.apk hideampm-align.apk


キーストアのパスワードの入力後、インストール可能なパッケージが作成されるのでPCと端末を接続しインストール

$ adb install hideampm-release.apk

パッケージの設定を有効にします。

$ adb shell cmd overlay enable --user 0 jp.blogspot.zau2and.hideampm


消えました。

午前/午後を表示したくなった場合、

$ adb shell cmd overlay disable --user 0 jp.blogspot.zau2and.hideampm

とコマンドを打つか、パッケージをアンインストールします。

#設定を変更する項目で指定した「config_showAmpm」はAOSPのconfig.xmlには無い項目なのでSonyのカスタマイズかな

2018/02/07

Andrdoid 8.0/8.1 でのイースターエッグのねこあつめ

Android 7.x の時にあったイースターエッグは Android 8.0/8.1 でも引き続き遊べます。

ただ、最初から Android 8.x が入った端末では Android 7.x と同じ方法ではねこあつめを始めることはできません。
最初から Android 8.x だった端末でイースターエッグのねこあつめを有効にするにはPCから

$ adb shell am start -n com.android.egg/.neko.NekoActivationActivity

を実行します。実行後、Android 7.x でねこあつめを有効にした時と同じようにねこが表示されるので、Android 7.x の時と同じように通知にねこあつめのお皿を置いてあげれば動きます。


2018/08/14 追記
Android 9 でも引き続き遊べます。また、最初からAndroid 9 が入った端末でも上記と同じ方法で猫集めを有効にできます。
追記ここまで

2018/11/24 追記
Android 9でも遊べると以前書いたのですが、Pixelシリーズのソースを見ると、
・Pixel, Pixel XL(発売時Android 7.1.0)ではAndroid 9にアップデートしてもねこあつめが残っている
・Pixel 2, Pixel 2 XL(発売時Android 8.0.0)ではAndroid 9にアップデートするとねこあつめは(おそらく)削除される
・Pixel 3, Pixel 3 XL(発売時Android 9)は最初から無い
というものでした。
他の端末でも発売時にAndroid 8.0/8.1だった端末をAndroid 9にアップデートするとねこあつめが削除されて遊べなくなるかもしれません。
追記ここまで

2019/02/06 追記
Pixel, Pixel XLですが、Android 9 2018-12-05のセキュリティパッチ(該当するイースターエッグのソース)でねこあつめが削除されペイントになっています。
Essential PH-1はAndroid 9 2019-02-05のセキュリティパッチでねこあつめが削除されペイントになっています。
追記ここまで

Android 8.0/8.1 でねこあつめに修正が入ったかソースを見てみると Android 7.1.2 の時から3回修正が入っていました。

51efddbd3bb304de2dd47fa8cd1114ac555958bb

キャストの削除だけなので、見た目などの変更はありません。
参考: Android 8.0 の機能と API # findViewById() 署名の変更

49ddb0de55020320a4f08bd7060cb531a84fb536

Android 8.0 のイースターエッグの追加。見た目などの変更はありませんが、Android 7.x 用のまま Android 8.0 向けでコンパイルしているため、

(1) ねこが来ても通知に表示されない
(2) ねこの画像の共有時、アプリが落ちる

ようになってしまいました。

(1)の原因は Android 8.0 で通知の仕様に変更があったためです。修正する必要があったのですが忘れられていたようです。
参考: Android 8.0 の機能と API #通知

(2)の原因は Android 7.0 から FileProvider クラスを使用してファイルの共有をする必要があるのですが、FileProvider を使用していないため落ちます。
参考: Android 7.0 の動作の変更点 #アプリ間のファイルの共有

7bcd6aa4f71a45b27a7f4486e35ebe29fa9eb507

Android 8.1 では上記の2つのバグの修正と、Treatがドーナツからクッキー(オレオ)に変更されました。(クッキーと書いたのは画像ファイルがfood_cookie.xmlになっていたので)

2017/12/10

3000匹集まったので

Android 7 のイースターエッグ、ねこあつめで3000匹集まった
で3000匹のスクリーンショット










2017/11/20

Termuxの備忘録

昔書いた、
Android上で動くgccの導入
WgetをAndroid NDKでコンパイル
Android用のnkfをコンパイル
Android用のnkfをコンパイル その2
がたまにアクセスがあるので、自分の備忘録も兼ねて。

Android 5.0以上ならターミナルエミュレーターはTermuxの使用をお勧めします。


インストールと初期設定など


まずGoogle Playからインストール → Termux

使い方はTermuxのThe Termux Wikiを見ればOK

忘れがちなキーの割り当て(Touch Keyboardより)
・Volume Up + W → Up arrow key
・Volume Up + A → Left arrow key
・Volume Up + S → Down arrow key
・Volume Up + D → Right arrow key

ボリュームダウンが[Ctrl]キーに割り当てられてるけど、操作し辛いのでナビゲーションドロワーから「KEYBOARD」を長押しして、「Extra keys view」を表示しておく。(Touch Keyboardより)
バージョン 0.62から Extra keys view は Volume UP + Q で表示/非表示可能 (2018/06/24 追記)
Volume UP + Q での Extra keys view の表示/非表示は以前からあったようです(2018/06/27 追記)


Termux-setup-storage にある通り、ストレージの初期設定を行う。

あとはDebian系のディストリビューションと同じ感覚で、

$ apt update

で利用できるパッケージリストの更新。

$ apt upgrade

で新しいパッケージに更新。

以上で、Termuxの準備は完了。


パッケージのインストール


・Clang
以前はgccのパッケージがあったのですが、現在ではClangになっています。(clangのパッケージに含まれるgccはclangへのリンクになっています。)

$ apt install clang

でインストールされます。

・Wget
Termuxはbusyboxがインストールされているので、busyboxで機能が足りているならそのまま使用、機能が足りないようであれば、パッケージのインストール。

$ apt install wget

でインストールされます。

・nkf
Termuxのパッケージにはないので、コンパイルします。
nkf Network Kanji Filterからソースをダウンロードして、ファイルの展開後、config.h の

#define DEFAULT_CODE_UTF8

を有効にして

$ make

で実行ファイルが作成されます。

2018/06/16 追記
FDcloneのコンパイル、インストール方法は Termux上でFDcloneを動かす に書きました。

2017/08/25

Android 7 でのイースターエッグで表示されるねこの種類 (2)

前回は、"ねこの色などを決めている乱数のシードを0~231-1まで変えて種類を数えるしかない" となり、種類を数え切れていなかったので、今回はシードを0~2,147,483,647まで変えて数えました。

以下のような結果になりました。

まずは前回、選択可能なパターンで何種類いるか見た定義されている11色。

出現回数 種類
0xFF212121
386,547,201
2,048
0xFFFFFFFF
386,547,151
3,072
0xFF616161
300,647,462
3,072
0xFF795548
300,647,869
3,072
0xFF90A4AE
214,748,370
3,072
0xFFFFF9C4
214,748,365
3,072
0xFFFF8F00
214,748,377
3,072
0xFF29B6F6
10,737,323
3,044
0xFFFFCDD2
10,737,350
3,046
0xFFCE93D8
10,737,557
3,042
0xFF43A047
8,589,885
3,035
合計
2,059,436,909
30,599

0xFF212121 ~ 0xFFFF8F00 の色のねこは全種類出現していました。
0xFF29B6F6 ~ 0xFF43A047 の色のねこは出現回数が減るため、全種類は出ないようです。


続いて定義されている11色以外となるねこは

2,147,483,647 - 2,059,436,909 = 88,046,738 回

出現し、種類は結果だけを書くと 85,516,367 種類となりました。

このうち、定義されている11色と被る種類が、
  0xFF8F00 で 2種類
  0x29B6F6 で 3種類
  0x43A047 で 21種類
いたので、定義されている11色以外のねこは

85,516,367 - 2 - 3 - 21 = 85,516,341 種類

となります。

以上からねこの種類は

30,599 + 85,516,341 = 85,546,940 種類

となります。(書いたプログラムが合っていればですが…)

2017/08/21

Android 7 でのイースターエッグで表示されるねこの種類 (1)

先に結論を書いておくと、数え切れてません。

Android 7でのイースターエッグのねこの体の色は、定義されている11色以外に多くの色を取り得ること、各部位の色の全てのパターンが現れるとも限らないので、ねこの色などを決めている乱数のシードを0~231-1まで変えて種類を数えるしかないと思います。

2017/08/25 追記: シードを0~2,147,483,647まで変えて数えました → Android 7 でのイースターエッグで表示されるねこの種類 (2)

ひとまず、選択可能なパターンでねこが何種類いるかソースを見ながら計算してみる。
(体の色が定義されている11色以外の色があるが、今回は考えない。)




2. 目、口、鼻

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#158

体の色が暗いか(isDark(mBodyColor))どうかで決まる。
体の色が暗いなら白、そうでなければそのまま(黒)。



3. 耳の内側

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#161

目、口、鼻と同様に体の色が暗いかどうかで決まる。
暗ければ 0xFFEF9A9A、そうでなければ 0x20D50000。画像は"2. 目、口、鼻"と同じ。


4. 腹

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#163,
https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#108
より、0(透明、つまり体の色と同じ)か0xFFFFFFFF(白)の2通り



5. 顔の色(というか鼻と口周り)

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#165

腹と同じで0(透明、つまり体の色と同じ)か0xFFFFFFFF(白)の 2通り
Cat.java の167行目では顔の色が明るければ(!isDark(faceColor))口と鼻を黒くする。


顔の色が明るくなったので、口と鼻が黒くなる(右)



6. つま先

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#172
Cat.javaの172行目からどのつま先を白くするかの処理。
174行目、4本とも白。
178行目、前足2本(Android 7.0の場合は右前足、右後ろ足)が白。
181行目、後ろ足2本(Android 7.0の場合は左前足、左後ろ足)が白。
184行目、4本のうちどれか1本が白。
172, 176, 179, 182行目の各条件を満たさない場合は、白くならない。
全部で 1 + 1 + 1 + 4 + 1= 8通り



7. しっぽの先

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#188
白か体の色と同じになるので 2通り



8. 頭

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#190,
https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#119,
https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#113

体の色が暗ければ(isDark(mBodyColor))、P_LIGHT_SPOT_COLORS、暗くなければP_DARK_SPOT_COLORS の各配列の中から選択。
P_LIGHT_SPOT_COLORS は Cat.java の119行目で0(透明、つまり体の色と同じ)か0xFFFFFFFF (白) の2通り。
P_DARK_SPOT_COLORS は Cat.java の113行目で0(透明、つまり体の色と同じ)、0xFF212121、0xFF6D4C41 の3通り。
暗いか暗くないかで2通り、または3通りになる。
1.の体の色では、黒いねこ(色は0xFF212121)のみisDarkがtrueになる。

体の色が暗い場合

体の色が明るい場合


9.襟

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#194,
https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#97

P_COLLAR_COLORSで、定義されている8色
0xFFFFFFFF, 0xFF000000, 0xFFF44336, 0xFF1976D2, 0xFFFDD835, 0xFFFB8C00, 0xFFF48FB1, 0xFF4CAF50



10.蝶ネクタイ

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#196
Cat.java の196~197行目。
0(透明、つまり蝶ネクタイを描画しない)か襟と同じ色の2通り



以上から、
1. 体の色
4. 腹
5. 顔の色(というか鼻と口周り)
6. つま先
7. しっぽの先
8. 頭
9.襟
10.蝶ネクタイ
が変わる。

黒いねこ(色は0xFF212121)の場合、
1 x 2 x 2 x 8 x 2 x 2 x 8 x 2 = 2,048 通り
それ以外のねこの場合、
10 x 2 x 2 x 8 x 2 x 3 x 8 x 2 = 30,720 通り
合計 32,768 通り

定義されている体の色だけで、これだけのパターンが考えられるので、えさを置いてねこが来て、では全部集めるのは厳しい。


おまけ: 背中

https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#164

背中も腹と同様に0(透明、つまり体の色と同じ)か0xFFFFFFFF(白)の2通りあるのですが、
https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r50/packages/EasterEgg/src/com/android/egg/neko/Cat.java#411
での戻り値の配列に back が抜けているため、描画されません。
backを描画するとこんなねこになります。



2017/07/07

Android 7.0/7.1.1 でのイースターエッグで表示されるねこの違い

Android 7.0の正式版がリリースされて1年近くたち、Android 8.0のデベロッパープレビューも出てますが、Android 7.0/7.1.1 でのイースターエッグ(ねこあつめ、Android Neko)で表示されるねこの違いが気になったのでソースを見てみました。

Android 7.0でのソースは
https://android.googlesource.com/platform/frameworks/base/+log/android-7.0.0_r33/packages/EasterEgg
Android 7.1.1でのソースは
https://android.googlesource.com/platform/frameworks/base/+log/android-7.1.1_r46/packages/EasterEgg
を見ています。
Android 7.1.1と7.1.2のソースは同じでした。

Android 7.0のリリース後に修正された点は以下の7つです。
a801d40531b71f8c75bb03bb8fec429f503e391e
1bdc770e664d7052ae277ea07bd40bd36037d822
753762c8fa3fae29f20a0fc34531ecef3fef85a9 (1)
4a1bcd966b1c271909f38b41031cc012e233fbdd (2)
1e52909888fc27bc8d7f63ceeabba0a87b65e419
7c2e730f637ee40f2be642b08a3956895dbb178b (Android 7.1.0でのソース) (3)
946c2b89396554b2618ea5bbaff4652f75768016 (Android 7.1.1, 7.1.2でのソース)

この中で見た目が変わる修正が入ったのは3つありました。

(1) 753762c8fa3fae29f20a0fc34531ecef3fef85a9

一覧でのソート処理が入りました。ねこの体の色(HSV色空間の色相)でソートされます。
Android 7.0
Android 7.1.1

黒いねこ(色は0xFF212121)、白いねこ(色は0xFFFFFFFF)、ここにはいませんが灰色のねこ(色は0xFF616161)は色相の値が0.0のため、黒だけ、白だけ、灰だけの並びにはなりません。

(2) 4a1bcd966b1c271909f38b41031cc012e233fbdd

・ねこのデザインの調整
・一覧からの削除時にダイアログを表示
・共有時の画像サイズの変更(512x512 → 600x600)
が行われました。
ねこのデザインの調整で一番分かりやすい部分は、Android 7.0では足先が白くなるパターンとして右側だけ、左側だけというのがありましたが、Android 7.1.xでは前だけ、後ろだけになっています。(上の画像だと #139, #131, #574)

(3) 7c2e730f637ee40f2be642b08a3956895dbb178b

生成されたねこに付ける名前が修正されています。(ここまでの修正がAndroid 7.1.0に含まれています)

Android 7.0, 7.1.xともにねこの生成には乱数が使用されているのですが、乱数の生成に必要なシードから名前が付けられます。
Android 7.0ではシードの上3桁、Android 7.1.xではシードの下3桁(正確にはシードを1000で割った余り)になっています。
Android 7.0ではシードが3桁未満だとアプリが(多分)落ちます。
シードは https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r33/packages/EasterEgg/src/com/android/egg/neko/Cat.java#182 で生成されていて、 Math.abs(ThreadLocalRandom.current().nextInt()) となっているので、3桁未満になる可能性は低いです。
Android 7.1.xは下3桁になったのでアプリが落ちることは無くなりました。この修正で名前の数字部分が1桁、2桁のねこが現れるようになったと思います。


補足:
・シードの上3桁(Android 7.0)、下3桁(Android 7.1.x)をねこの名前にしているので、名前は同じなのに色が違うというのが起こります。
・ねこを全部集めようと思ってもシードが231個あるのでねこもその数だけいます。ただ、全く同じ柄のねこになる場合があるので柄の種類としては231より少なくなると思われます。(2017/07/10訂正: シードは232個ではなく231個でした)
Android 7 でのイースターエッグで表示されるねこの種類 (1)
Android 7 でのイースターエッグで表示されるねこの種類 (2)

おまけ:
ねこの体の色は
https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r46/packages/EasterEgg/src/com/android/egg/neko/Cat.java#82 で設定されていて、11個が定義されています。
P_BODY_COLORS の最後が "0" になっていますが、これは透明ではなく、
https://android.googlesource.com/platform/frameworks/base/+/android-7.1.1_r46/packages/EasterEgg/src/com/android/egg/neko/Cat.java#152 で乱数を使って体の色を決めています。(Color.HSVToColor(new float[]{}) はアルファ値を 0xFF でHSVToColor(int alpha, float hsv[])を呼び出しているので生成される色は透明になりません。)

P_BODY_COLORSで定義されている11色はこのようになっています。

P_BODY_COLORSの最後の "0" に当たった場合、色はランダムになります。