BenesseExtension を使ってみよう
今回は、以前の DchaService に続いて、BenesseExtension を使う方法を解説していきます。
前提
前回同様ですが、
DchaService は、アプリ であり、
BenesseExtension は、フレームワーク です。
また、BenesseExtension は、CT3 の 02.00.000 以降及び、CTX(TAB-A05-BD), CTZ(TAB-A05-BA1) に存在しています。
DchaService について知りたい場合は、こちらの記事をご覧ください。
BenesseExtension
これまた Benesse が開発したものですが、実は DchaService より手が凝ってます。
ただ、端末によって使える関数が異なるので、またしても注意が必要です。
パッケージIDは、android.os.BenesseExtension
です。
それでは、機能を紹介していきます。
boolean checkPassword(String)
引数を SHA-256 でハッシュ化し、BenesseExtensionService の DEFAULT_HASH と等しいかどうかを真偽値で返します。
/factory/dcha_hash
が在る場合は、そちらを優先して判断します。
これは設定アプリの開発者向けオプションでのみ使われています。
boolean checkUsbCam()
CT3 のみ存在します。
/dev/video0
が存在するかどうかを返します。
Point getBaseDisplaySize()
CT3 のみ存在します。
IWindowsManager
の getWindowsManager().getBaseDisplaySize(0, new android.graphics.Point())
の値を返します。
int getDchaState()
dcha_state の値を返します。
Point getInitialDisplaySize()
Base
が Initial
に変わっただけ。
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
ライブラリの作り方
-
/system/framework/framework.jar
を抽出 -
classes.dex
及びclasses2.dex
を抽出し、dex2jar を使って JAR 化 - unzip し、
android/os/BenesseExtension.class
を抽出。
それ以外は一切不要 -
android
ディレクトリをルートとしてZIPに圧縮 - ファイルの拡張子を
.jar
にして完了
ライブラリの使い方
DchaService とは違い、権限の宣言は不要です。
依存関係の使用を宣言
DchaService とは違いフレームワークなので、このクラスをAPKに含める事無くビルド出来ます。
Gradle(Groovy形式) の場合、以下の形式で使用を宣言します。
dependencies {
compileOnly files('libs/BenesseExtension.jar')
}
先程生成したライブラリを app/libs/BenesseExtension.jar
に配置している前提です。
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