⚙️

BenesseExtension を使ってみよう

2024/09/13に公開

今回は、以前の DchaService に続いて、BenesseExtension を使う方法を解説していきます。

前提

前回同様ですが、
DchaService は、アプリ であり、
BenesseExtension は、フレームワーク です。
また、BenesseExtension は、CT302.00.000 以降及び、CTX(TAB-A05-BD), CTZ(TAB-A05-BA1) に存在しています。

DchaService について知りたい場合は、こちらの記事をご覧ください。

BenesseExtension

これまた Benesse が開発したものですが、実は DchaService より手が凝ってます。
ただ、端末によって使える関数が異なるので、またしても注意が必要です。
パッケージIDは、android.os.BenesseExtension です。

それでは、機能を紹介していきます。

boolean checkPassword(String)

引数を SHA-256 でハッシュ化し、BenesseExtensionServiceDEFAULT_HASH と等しいかどうかを真偽値で返します。
/factory/dcha_hash が在る場合は、そちらを優先して判断します。
これは設定アプリの開発者向けオプションでのみ使われています。

boolean checkUsbCam()

CT3 のみ存在します。
/dev/video0 が存在するかどうかを返します。

Point getBaseDisplaySize()

CT3 のみ存在します。
IWindowsManagergetWindowsManager().getBaseDisplaySize(0, new android.graphics.Point()) の値を返します。

int getDchaState()

dcha_state の値を返します。

Point getInitialDisplaySize()

BaseInitial に変わっただけ。

int getInt(String)

CTX と CTZ のみ存在します。
引数には、bc: から始まる変数名を入れます。

Point getLcdSize()

CT3 のみ存在します。
getInitialDisplaySize() を実行します。

String getString(String)

引数には、bc: から始まる変数名を入れます。
CT3 の場合は、bc:mac_address のみ有効です。

boolean putInt(String, int)

CTX と CTZ のみ存在します。
一つ目の引数に bc: から始まる変数名、二つ目の引数に値を入れます。

boolean putString(String, String)

CTZ のみ存在します。
恐らく、タッチパネルのファームウェアアップデートに用いられています。
一つ目の引数が対象、二つ目の引数がファイルのパスだと思われますが、上手く動作しませんでした。

void setDchaState(int)

dcha_state の値を変更します。

boolean setForcedDisplaySize(int, int)

CT3 のみ存在します。
画面の解像度を変更します。
一つ目の引数が横、二つ目の引数が縦です。
この関数を使う場合は、アプリ自体に WRITE_SECURE_SETTINGS の権限の付与が必要です。

BC 変数について

bc: から始まる変数って何ぞや?となるので解説していきます。
CTZ のコードをベースに解説しますが、CTX で使えるとは限らない ので気を付けてください。

bc:compatscreen

画面の密度と比率を変更できます。

  • 0 : h(240)dpi 1920x1200
  • 1 : m(160)dpi 1024x768
  • 2 : m(160)dpi 1200x800

bc:pen:battery

タッチペンのバッテリー残量を取得するもの?
ほとんど値が変わらないので、百分率で計算している訳では無さそう。

bc:mac_address

Wi-Fi の MAC アドレス

bc:nightcolor:current

読書灯(夜間モード)の現在の輝度
この値が小さい程、輝度が高くなります。

bc:nightcolor:max

読書灯の輝度の最大値 : 4082

bc:nightcolor:min

読書灯の輝度の最小値 : 2596

bc:nightmode:active

読書灯の状態

  • 0 : 無効
  • 1 : 有効

bc_password_hit

これだけ例外で bc_ から始まる。
端末再起動時に ADB が無効化されるのを阻止する。
値が 0 以外 だと阻止される。
また、 設定アプリから開発者向けオプションのパスワードの入力に成功した場合は、 1 に設定される。

bc:serial_no

本体の製造番号

画面関係

検証と解説が面倒なのでまとめておきます。
fw_update 系は putString の更新で使う奴です。

  • bc:digitizer:fw_update
  • bc:digitizer:fw_version
  • bc:touchpanel:fts:fw_update
  • bc:touchpanel:fts:fw_version
  • bc:touchpanel:fw_update
  • bc:touchpanel:fw_version
  • bc:touchpanel:lcd_type
  • bc:touchpanel:nvt:fw_update
  • bc:touchpanel:nvt:fw_version
  • bc:touchpanel:palmreject:size

ライブラリの作り方

  1. /system/framework/framework.jar を抽出
  2. classes.dex 及び classes2.dex を抽出し、dex2jar を使って JAR 化
  3. unzip し、android/os/BenesseExtension.class を抽出。
    それ以外は一切不要
  4. android ディレクトリをルートとしてZIPに圧縮
  5. ファイルの拡張子を .jar にして完了

ライブラリの使い方

DchaService とは違い、権限の宣言は不要です。

依存関係の使用を宣言

DchaService とは違いフレームワークなので、このクラスをAPKに含める事無くビルド出来ます。

Gradle(Groovy形式) の場合、以下の形式で使用を宣言します。

app/build.gradle
dependencies {
    compileOnly files('libs/BenesseExtension.jar')
}

先程生成したライブラリを app/libs/BenesseExtension.jar に配置している前提です。

Javaコード内での使い方

めっちゃ楽です(笑)

app/src/main/package/DchaStateChanger.java
import android.app.Activity;
import android.os.Bundle;

import static android.os.BenesseExtension.*;

public class DchaStateChanger extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finishAndRemoveTask();
        setDchaState(getDchaState() == 3 ? 0 : 3);
    }
}

import で読み込んで、そのまま関数を使うことが出来ます。
DchaService が如何に煩わしいかが分かるでしょう。

Discussion