狠狠撸

狠狠撸Share a Scribd company logo
厂贬础搁笔のエコ技を実装してみた
@androidsola
自己紹介
●
twitter ID は @androidsola
●
最近はカスタム ROM の開発してます。
JCROM(Japanese custom rom)
https://sites.google.com/site/jcromproject/
JCROM(Japanese custom rom)
●
最近の状況
– JCROM 用のキャラクターを作った
テーマの配信を Google Play を使用して行う予定
– NFC を使用したテーマ変更と解除
(最近事故ってる残念な人もいるので...)
今回の話
●
エコ技とは
●
エコ技を取り上げた理由
●
実装するエコ技の仕様
●
エコ技の実装
●
実装したエコ技の动作确认
●
次にやること
エコ技とは
●
SHARPが開発した独自の省エネ機能
AQUOS PHONE 102SHの説明
エコ技を取り上げた理由
●
Android プラットフォームを改造するネタをあまりみ
かけない?
このあたりを改造す
るネタを増やしたい
(JCROM 以外で)
エコ技を取り上げた理由
●
エコ技は Android Framework を改造している。
(公開されている仕様を確認する限りでは)
●
Google 先生に聞いても、実装したようなネタのブログ
等が見当たらない。
●
102SH のサイトの説明通りだと、素晴らしい省エネ効
果があるので、JCROM(Japanese custom rom)で使え
ると良いかも?
実装するエコ技の仕様
●
SH Developers Square で公開されています。
https://sh-dev.sharp.co.jp/android/
エコ技は2種類ある
●
2011年冬-2012年春と2012年夏-2012年秋モデルで仕様
が異なる。
2011年冬-2012年春モデルの仕様
●
Broadcast Intent の動作を抑制する。
動作条件は以下の二つ
– エコ技設定で、省エネ待受機能をONにしていること
– 画面が消灯していること
ACTION_SCREEN_OFF が通知されてから
ACTION_SCREEN_ON が通知されるまでの期間を指す
2011年冬-2012年春モデルの仕様
●
抑止対象のアプリケーション
以下二つの条件のどちらかに一致するものは対象から
除外される。
– フォアグラウンドで動作中のアプリケーション
– 省エネ待受対象外リストに登録されているアプリケー
ション
2011年冬-2012年春モデルの仕様
●
抑止対象の Broadcast Intent
AndroidManifest.xml に定義するものが対象で、プロ
グラム上で registerReceiver を使用して登録するも
のは対象外となる。
AndroidManifest.xml に定義する例
<receiver android:name="net.jcrom.ecotest.myReciever" >
<intent-filter>
<action android:name="android.intent.action.KASSY_ZANNEN" />
</intent-filter>
</receiver>
2012年夏-2012年秋モデルの仕様
●
Broadcast Intent の通知制限、データ通信制限、自
動同期処理の遅延を行う。
動作条件は以下の二つ
– エコ技設定で、省エネ待受機能をONにしていること
– 画面が消灯していること
ACTION_SCREEN_OFF が通知されてから
ACTION_SCREEN_ON が通知されるまでの期間を指す
2012年夏-2012年秋モデルの仕様
●
抑止対象のアプリケーション
以下二つの条件のどちらかに一致するものは対象から
除外される。
– フォアグラウンドで動作中のアプリケーション
– 省エネ待受対象外リストに登録されているアプリケー
ション
2012年夏-2012年秋モデルの仕様
●
抑止対象の Broadcast Intent
AndroidManifest.xml に定義するもの、プログラム上
で registerReceiver を使用して登録するもの全てを
対象にする。
ただし、以下の Broadcast Intent は抑止対象外
– android.intent.action.BOOT_COMPLETED
– android.intent.action.SCREEN_OFF
– android.intent.action.SCREEN_ON
– com.google.android.c2dm.intent.RECEIVE
2012年夏-2012年秋モデルの仕様
●
データ通信制限
各アプリのデータ通信を制限する機能。
●
自動同期処理の遅延
自動同期処理を次回画面点灯時まで遅延させる機能。
2011年冬-2012年春モデル 2012年夏-2012年秋モデル
動作を抑止する条件 ●
省エネ待受機能をONにしていること
●
画面が消灯していること
●
バックグラウンドで動作中であるこ
と
●
省エネ待受対象外リストに登録され
ていないこと
●
左と同じ
Broadcast Intent の制限 ●
AndroidManifest.xml に定義するも
のが対象で、プログラム上で
registerReceiver を使用して登録
するものは対象外。
●
以下の Broadcast Intent 以外は全
て対象となる。
android.intent.action.BOOT_COMPL
ETED
android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON
com.google.android.c2dm.intent.R
ECEIVE
データ通信の制限 ●
未対応 ●
各アプリのデータ通信を制限する機
能
自動同期処理の遅延 ●
未対応 ●
自動同期処理を、次回画面点灯時ま
で遅延させる機能
エコ技の仕様を整理
2011年冬-2012年春モデル 2012年夏-2012年秋モデル
動作を抑止する条件 ●
省エネ待受機能をONにしていること
●
画面が消灯していること
●
バックグラウンドで動作中であるこ
と
●
省エネ待受対象外リストに登録され
ていないこと
※今回はとりあえず全てを対象に
●
左と同じ
Broadcast Intent の制限 ●
AndroidManifest.xml に定義するも
のが対象で、プログラム上で
registerReceiver を使用して登録
するものは対象外。
●
以下の Broadcast Intent 以外は全
て対象となる。
android.intent.action.BOOT_COMPL
ETED
android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON
com.google.android.c2dm.intent.R
ECEIVE
データ通信の制限 ●
未対応 ●
各アプリのデータ通信を制限する機
能
自動同期処理の遅延 ●
未対応 ●
自動同期処理を、次回画面点灯時ま
で遅延させる機能
今回実装するエコ技の仕様
エコ技の実装
その前に気になる仕様の调査
Broadcast Intent の動作(予想)
●
Broadcast Receiver の登録方法による動作の違い
– AndroidManifest.xml に定義するもの
– プログラム上で registerReceiver を使用して登録す
るもの
初期のエコ技では片方(AndroidManifest.xml)しか
対応していなかったので、おそらく動きが違うはず。
●
Broadcast Intent を投げてる奴が Android
Framework のどこかにいる。
(この手のものは ActivityManagerService あたりか
と大雑把に予想した。)
Broadcast Intent ってどこから来る?
Broadcast Intent の動作を調べる
●
デバッグ機能を有効にした状態で Broadcast Intent
を投げてログを確認する。
ActivityManagerService.java に定義されている
DEBUG_BROADCAST がフラグ。
ActivityManagerService.java に定義されている値
変更前
static final boolean DEBUG_BROADCAST = localLOGV || false;
static final boolean DEBUG_BACKGROUND_BROADCAST = DEBUG_BROADCAST || false;
static final boolean DEBUG_BROADCAST_LIGHT = DEBUG_BROADCAST || false;
変更後
static final boolean DEBUG_BROADCAST = localLOGV || true;
static final boolean DEBUG_BACKGROUND_BROADCAST = DEBUG_BROADCAST || false;
static final boolean DEBUG_BROADCAST_LIGHT = DEBUG_BROADCAST || false;
便利そうなデバッグ機能
●
ActivityManagerService.java には DEBUG_BROADCAST
以外にもたくさん定義が存在する。
static final boolean DEBUG_SWITCH = localLOGV || false;
static final boolean DEBUG_TASKS = localLOGV || false;
static final boolean DEBUG_THUMBNAILS = localLOGV || false;
static final boolean DEBUG_PAUSE = localLOGV || false;
static final boolean DEBUG_OOM_ADJ = localLOGV || false;
static final boolean DEBUG_TRANSITION = localLOGV || false;
static final boolean DEBUG_BROADCAST = localLOGV || true;
static final boolean DEBUG_BACKGROUND_BROADCAST = DEBUG_BROADCAST || false;
static final boolean DEBUG_BROADCAST_LIGHT = DEBUG_BROADCAST || false;
static final boolean DEBUG_SERVICE = localLOGV || false;
static final boolean DEBUG_SERVICE_EXECUTING = localLOGV || false;
static final boolean DEBUG_VISBILITY = localLOGV || false;
便利そうなデバッグ機能
●
ActivityManagerService.java には DEBUG_BROADCAST
以外にもたくさん定義が存在する。
static final boolean DEBUG_PROCESSES = localLOGV || false;
static final boolean DEBUG_PROCESS_OBSERVERS = localLOGV || false;
static final boolean DEBUG_CLEANUP = localLOGV || false;
static final boolean DEBUG_PROVIDER = localLOGV || false;
static final boolean DEBUG_URI_PERMISSION = localLOGV || false;
static final boolean DEBUG_USER_LEAVING = localLOGV || false;
static final boolean DEBUG_RESULTS = localLOGV || false;
static final boolean DEBUG_BACKUP = localLOGV || false;
static final boolean DEBUG_CONFIGURATION = localLOGV || false;
static final boolean DEBUG_POWER = localLOGV || false;
static final boolean DEBUG_POWER_QUICK = DEBUG_POWER || false;
static final boolean DEBUG_MU = localLOGV || false;
Broadcast Intent の動作を調べる
●
動作確認用の Broadcast receiver を用意する。
AndroidManifest.xml に定義するもので、受信すると
ログを出力するだけのもの。
Receiver
public class myReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ECO_WAZA_MANIFEST", "Received KASSY_ZANNEN");
}
}
AndroidManifest.xml
<receiver android:name="net.jcrom.eco.manifest.myReciever" >
<intent-filter>
<action android:name="android.intent.action.KASSY_ZANNEN" />
</intent-filter>
</receiver>
Broadcast Intent の動作を調べる
●
動作確認用の Broadcast receiver を用意する。
プログラム上で registerReceiver を使用して登録す
るもので、受信するとログを出力するだけのもの。
Receiver
private BroadcastReceiver mReceiver;
private void registerReceiver(){
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ECO_WAZA_PROGRAM", "Received KASSY_HENTAI");
}
};
IntentFilter filter = new
IntentFilter("android.intent.action.KASSY_HENTAI");
registerReceiver(mReceiver, filter);
}
Broadcast Intent の動作を調べる
●
動作確認用の Broadcast Intent をコマンドラインか
ら投げる。
$ adb shell
root@android:/ # logcat &
AndroidManifest.xml に定義するものの動作を確認する
root@android:/ # am broadcast -a android.intent.action.KASSY_ZANNEN
プログラム上で registerReceiver を使用して登録するものの動作を確認する
root@android:/ # am broadcast -a android.intent.action.KASSY_HENTAI
Receiver を AndroidManifest.xml に定義する
ケースのものを調べる
Broadcast Intent の動作を調べる
●
DEBUG_BROADCAST が有効になったログを確認する。
root@android:/ # am broadcast -a android.intent.action.KASSY_ZANNEN
ActivityManager からのログ
V/ActivityManager( 287): Broadcast: Intent { act=android.intent.action.KASSY_ZANNEN
flg=0x10 } ordered=true userid=-1
V/ActivityManager( 287): Enqueing broadcast: android.intent.action.KASSY_ZANNEN
replacePending=false
I/ActivityManager( 287): Broadcast intent Intent
{ act=android.intent.action.KASSY_ZANNEN flg=0x10 } on background queue
V/ActivityManager( 287): Enqueueing ordered broadcast BroadcastRecord{410f5648 u-1
android.intent.action.KASSY_ZANNEN}: prev had 0
I/ActivityManager( 287): Enqueueing broadcast android.intent.action.KASSY_ZANNEN
seq=-1
???次のスライドに続く
Broadcast Intent の動作を調べる
●
DEBUG_BROADCAST が有効になったログを確認する。
BroadcastQueue からのログ
V/BroadcastQueue( 287): Schedule broadcasts [background]: current=false
V/BroadcastQueue( 287): Received BROADCAST_INTENT_MSG
V/BroadcastQueue( 287): processNextBroadcast [background]: 0 broadcasts, 1 ordered
broadcasts
V/BroadcastQueue( 287): Processing ordered broadcast [background]
BroadcastRecord{410f5648 u-1 android.intent.action.KASSY_ZANNEN}
V/BroadcastQueue( 287): Submitting BROADCAST_TIMEOUT_MSG [background] for
BroadcastRecord{410f5648 u-1 android.intent.action.KASSY_ZANNEN} at 254845
V/BroadcastQueue( 287): Process cur broadcast BroadcastRecord{410f5648 u-1
android.intent.action.KASSY_ZANNEN} for app ProcessRecord{4111d258
788:net.jcrom.eco.manifest/u0a10045}
V/BroadcastQueue( 287): Delivering to component
ComponentInfo{net.jcrom.eco.manifest/net.jcrom.eco.manifest.myReciever}:
BroadcastRecord{410f5648 u-1 android.intent.action.KASSY_ZANNEN}
D/ECO_WAZA_MANIFEST( 788): Received KASSY_ZANNEN
Broadcast Intent の動作を調べる
●
DEBUG_BROADCAST が有効になったログを確認する。
BroadcastQueue からのログ
V/BroadcastQueue( 287): Schedule broadcasts [background]: current=false
V/BroadcastQueue( 287): Received BROADCAST_INTENT_MSG
V/BroadcastQueue( 287): processNextBroadcast [background]: 0 broadcasts, 1 ordered
broadcasts
V/BroadcastQueue( 287): Processing ordered broadcast [background]
BroadcastRecord{410f5648 u-1 android.intent.action.KASSY_ZANNEN}
V/BroadcastQueue( 287): Submitting BROADCAST_TIMEOUT_MSG [background] for
BroadcastRecord{410f5648 u-1 android.intent.action.KASSY_ZANNEN} at 254845
V/BroadcastQueue( 287): Process cur broadcast BroadcastRecord{410f5648 u-1
android.intent.action.KASSY_ZANNEN} for app ProcessRecord{4111d258
788:net.jcrom.eco.manifest/u0a10045}
V/BroadcastQueue( 287): Delivering to component
ComponentInfo{net.jcrom.eco.manifest/net.jcrom.eco.manifest.myReciever}:
BroadcastRecord{410f5648 u-1 android.intent.action.KASSY_ZANNEN}
D/ECO_WAZA_MANIFEST( 788): Received KASSY_ZANNEN
Broadcast Intent の動作を調べる
●
BroadcastQueue.java で Delivering to component
を出力している場所を探す。
210行目
private final void processCurBroadcastLocked(BroadcastRecord r,
ProcessRecord app) throws RemoteException {
?中略?
// Tell the application to launch this receiver.
r.intent.setComponent(r.curComponent);
boolean started = false;
try {
if (DEBUG_BROADCAST_LIGHT) Slog.v(TAG,
"Delivering to component " + r.curComponent
+ ": " + r);
Broadcast Intent の動作を調べる
●
BroadcastQueue.java で processCurBroadcastLocked
を呼び出している場所を探す。
– 254行目 sendPendingBroadcastsLocked の中
– 778行目 processNextBroadcast の中
Broadcast Intent の動作を調べる
●
BroadcastQueue.java で processCurBroadcastLocked
を呼び出している場所を探す。
– 254行目 sendPendingBroadcastsLocked の中
– 778行目 processNextBroadcast の中
ログを出してみると、
processNextBroadcast から呼ばれていた。
AndroidManifest.xml に定義するものは、
BoradcastQueue.java の processNextBroadcast から
呼ばれてる事が分かった。
プログラム上で registerReceiver を使用して
Receiver を登録するものを调べる
Broadcast Intent の動作を調べる
●
DEBUG_BROADCAST が有効になったログを確認する。
root@android:/ # am broadcast -a android.intent.action.KASSY_HENTAI
ActivityManager からのログ
V/ActivityManager( 287): Broadcast: Intent { act=android.intent.action.KASSY_HENTAI
flg=0x10 } ordered=true userid=-1
V/ActivityManager( 287): Enqueing broadcast: android.intent.action.KASSY_HENTAI
replacePending=false
I/ActivityManager( 287): Broadcast intent Intent
{ act=android.intent.action.KASSY_HENTAI flg=0x10 } on background queue
V/ActivityManager( 287): Enqueueing ordered broadcast BroadcastRecord{41154910 u-1
android.intent.action.KASSY_HENTAI}: prev had 0
I/ActivityManager( 287): Enqueueing broadcast android.intent.action.KASSY_HENTAI
seq=-1
???次のスライドに続く
Broadcast Intent の動作を調べる
●
DEBUG_BROADCAST が有効になったログを確認する。
BroadcastQueue からのログ
V/BroadcastQueue( 287): Schedule broadcasts [background]: current=false
V/BroadcastQueue( 287): Received BROADCAST_INTENT_MSG
V/BroadcastQueue( 287): processNextBroadcast [background]: 0 broadcasts, 1 ordered
broadcasts
V/BroadcastQueue( 287): Processing ordered broadcast [background]
BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI}
V/BroadcastQueue( 287): Submitting BROADCAST_TIMEOUT_MSG [background] for
BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI} at 34768193
V/BroadcastQueue( 287): Delivering ordered [background] to registered
BroadcastFilter{4102e4a8 u0 ReceiverList{4102e400 807 net.jcrom.eco.program/10046/u0
remote:4102def0}}: BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI}
I/BroadcastQueue( 287): Delivering to BroadcastFilter{4102e4a8 u0
ReceiverList{4102e400 807 net.jcrom.eco.program/10046/u0 remote:4102def0}} (seq=-1):
BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI}
D/ECO_WAZA_PROGRAM( 807): Received KASSY_HENTAI
Broadcast Intent の動作を調べる
●
DEBUG_BROADCAST が有効になったログを確認する。
BroadcastQueue からのログ
V/BroadcastQueue( 287): Schedule broadcasts [background]: current=false
V/BroadcastQueue( 287): Received BROADCAST_INTENT_MSG
V/BroadcastQueue( 287): processNextBroadcast [background]: 0 broadcasts, 1 ordered
broadcasts
V/BroadcastQueue( 287): Processing ordered broadcast [background]
BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI}
V/BroadcastQueue( 287): Submitting BROADCAST_TIMEOUT_MSG [background] for
BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI} at 34768193
V/BroadcastQueue( 287): Delivering ordered [background] to registered
BroadcastFilter{4102e4a8 u0 ReceiverList{4102e400 807 net.jcrom.eco.program/10046/u0
remote:4102def0}}: BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI}
I/BroadcastQueue( 287): Delivering to BroadcastFilter{4102e4a8 u0
ReceiverList{4102e400 807 net.jcrom.eco.program/10046/u0 remote:4102def0}} (seq=-1):
BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI}
D/ECO_WAZA_PROGRAM( 807): Received KASSY_HENTAI
Broadcast Intent の動作を調べる
●
AndroidManifest.xml に定義するものとログの出方が
異なっていた。
以下は Reciever が実行される直前のログ。
AndroidManifest.xml に定義するもの
V/BroadcastQueue( 287): Delivering to component
ComponentInfo{net.jcrom.eco.manifest/net.jcrom.eco.manifest.myReciever}:
BroadcastRecord{410f5648 u-1 android.intent.action.KASSY_ZANNEN}
プログラム上で registerReceiver を使用して登録するもの
I/BroadcastQueue( 287): Delivering to BroadcastFilter{4102e4a8 u0
ReceiverList{4102e400 807 net.jcrom.eco.program/10046/u0 remote:4102def0}}
(seq=-1): BroadcastRecord{41154910 u-1 android.intent.action.KASSY_HENTAI}
Broadcast Intent の動作を調べる
●
BroadcastQueue.java で Delivering to
BroadcastFilter を出力している場所を探す。
436行目
private final void deliverToRegisteredReceiverLocked(BroadcastRecord r,
BroadcastFilter filter, boolean ordered) {
try {
if (DEBUG_BROADCAST_LIGHT) {
int seq = r.intent.getIntExtra("seq", -1);
Slog.i(TAG, "Delivering to " + filter
+ " (seq=" + seq + "): " + r);
}
performReceiveLocked(filter.receiverList.app,
filter.receiverList.receiver,
new Intent(r.intent), r.resultCode, r.resultData,
r.resultExtras, r.ordered, r.initialSticky, r.userId);
Broadcast Intent の動作を調べる
●
BroadcastQueue.java で
deliverToRegisteredReceiverLocked を呼び出してい
る場所を探す。
– 487行目 processNextBroadcast の中
– 646行目 processNextBroadcast の中
同じメソッド内で分散してるので、1箇所で動作抑制出
来るように別の方法を探してみることにした。
Broadcast Intent の動作を調べる
●
registerReceiver を使用して登録する方法なの
で、registerReceiver を確認してみた。
– 登録リストみたいなものがあれば、Receiver を呼び出
す前にリストを確認してるのではと予想。
Broadcast Intent の動作を調べる
●
registerReceiver を調べてみた結果
– ActivityManagerService.java で定義されている。
– 登録する Receiver は mRegisteredReceivers に格納
される。(mRegisteredReceivers は HashMap)
登録された Receiver は、
broadcastIntentLocked で読み出されている。
11909行目 receivers.add(registeredReceivers.get(ir));
この receivers に add されたものが、
Broadcast Intent 受信時に呼ばれるらしい。
なので add の前に判定処理を追加すると、
1箇所の処理で出来そう。
调べ物が终わったので、エコ技を実装する
実装する内容
●
Broadcast Intent の動作を抑制する処理の追加する
– BoradcastQueue.java の processNextBroadcast(778行目
の前)に Broadcast Receiver を呼び出すかの判定処理を
追加する
– ActivityManagerService.java の
broadcastIntentLocked(11909行目の前)にBroadcast
Receiver を呼び出すかの判定処理を追加する
●
画面消灯時にフラグを設定する
– ACTION_SCREEN_OFF で OFF、ACTION_SCREEN_ON で ON
●
通知する Receiver のプロセスがフォアグラウンドかど
うかの判定を行う
●
エコ技の有効?無効を設定する項目を追加する
フォアグラウンドか判定する
BoradcastQueue.java への改造内容
boolean broadcast_skip = false; //Broadcast Intent を抑制するかどうかのフラグ
try {
List<RunningAppProcessInfo> appProcesses =
ActivityManagerNative.getDefault().getRunningAppProcesses(); //プロセスの情報を取得
for(RunningAppProcessInfo appProcess : appProcesses) {
if(appProcess.processName.equals(app.processName)) {
if(!(appProcess.importance ==
RunningAppProcessInfo.IMPORTANCE_FOREGROUND)) { //フォアグラウンドか確認
broadcast_skip = true;
}
break;
}
}
} catch (RemoteException e) {
}
プロセスの状態は RunningAppProcessInfo の
importance の値を見ると分かる。
http://developer.android.com/reference/andro
id/app/ActivityManager.RunningAppProcessInfo
.html
フォアグラウンドか判定する
ActivityManagerService.java への改造内容
boolean broadcast_skip = false; //Broadcast Intent を抑制するかどうかのフラグ
try {
List<RunningAppProcessInfo> appProcesses =
ActivityManagerNative.getDefault().getRunningAppProcesses(); //プロセスの情報を取得
for(RunningAppProcessInfo appProcess : appProcesses) {
if(appProcess.processName.equals((registeredReceivers.get(ir)).packageName)){
if(!(appProcess.importance ==
RunningAppProcessInfo.IMPORTANCE_FOREGROUND)) { //フォアグラウンドか確認
broadcast_skip = true;
}
break;
}
}
} catch (RemoteException e) {
}
registeredReceivers.get で登録している
receiver を取得し、パッケージ名を確認する。
画面消灯時にフラグを設定する処理
●
Broadcast Intent の動作を抑制する処理の前に追加
する。
※エコ技管理アプリを作っても良いが、Receiver が
呼ばれる前に確実に処理出来ると考えた。
BoradcastQueue.java での処理例
フラグはシステムプロパティ(persist.sys.screen.eco)を用意して管理する。
if (r.intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
SystemProperties.set("persist.sys.screen.eco", "on");
} else if (r.intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
SystemProperties.set("persist.sys.screen.eco", "off");
}
if("off".equals(SystemProperties.get("persist.sys.screen.eco"))) {
//Broadcast Intent の動作抑制処理
}
エコ技の有効?無効を設定する
●
設定アプリにエコ技の有効?無効のチェックボックス
を追加
有効?無効はシステムプロパティ
(persist.sys.eco.enable)を使用して管理する。
チェックボックスにチェック有り → true
チェックボックスにチェック無し → false
Broadcast Intent の動作を抑制する処理
BoradcastQueue.java への改造内容
boolean eco_skip = false;
//抑止対象外の Broadcast と画面消灯の管理
if (r.intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
eco_skip = true; SystemProperties.set("persist.sys.screen.eco", "on");
} else if (r.intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
eco_skip = true; SystemProperties.set("persist.sys.screen.eco", "off");
} else if (r.intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) ||
r.intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
eco_skip = true;
}
boolean broadcast_skip = false;
if(!eco_skip) {
if(("true".equals(SystemProperties.get("persist.sys.eco.enable"))) &&
("off".equals(SystemProperties.get("persist.sys.screen.eco")))) {
//フォアグラウンドか判定する処理
} //フォアグラウンドでなければ broadcast_skip が true になる。
}
if(broadcast_skip) { //Broadcast Intent を抑制する場合は後の処理をさせないようにする
return;
}
Broadcast Intent の動作を抑制する処理
ActivityManagerService.java への改造内容
boolean eco_skip = false;
//抑止対象外の Broadcast と画面消灯の管理
if (r.intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
eco_skip = true; SystemProperties.set("persist.sys.screen.eco", "on");
} else if (r.intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
eco_skip = true; SystemProperties.set("persist.sys.screen.eco", "off");
} else if (r.intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) ||
r.intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
eco_skip = true;
}
boolean broadcast_skip = false;
if(!eco_skip) {
if(("true".equals(SystemProperties.get("persist.sys.eco.enable"))) &&
("off".equals(SystemProperties.get("persist.sys.screen.eco")))) {
//フォアグラウンドか判定する処理
} //フォアグラウンドでなければ broadcast_skip が true になる。
}
if(!broadcast_skip) { //Broadcast Intent を抑制する場合は receivers.add を呼ばない
receivers.add(registeredReceivers.get(ir));
}
実装したエコ技の动作确认
動作確認環境
●
android-4.2.2_r1.2 から作成した Emulator と
Galaxy Nexus
●
Broadcast Intent は am コマンドを使用して投げる
実装したエコ技の动作确认
●
画面を消灯し、am コマンドで Broadcast Intent を
投げた結果。
エコ技無効時
root@android:/ # am broadcast -a android.intent.action.KASSY_ZANNEN
D/ECO_WAZA_MANIFEST( 942): Received KASSY_ZANNEN
root@android:/ # am broadcast -a android.intent.action.KASSY_HENTAI
D/ECO_WAZA_PROGRAM( 963): Received KASSY_HENTAI
エコ技有効時
root@android:/ # am broadcast -a android.intent.action.KASSY_ZANNEN
root@android:/ # am broadcast -a android.intent.action.KASSY_HENTAI
※Receiver が呼び出されない。
結果のログを貼っても分かり難いので、
Galaxy Nexus を使用したデモ
2011年冬-2012年春モデル 2012年夏-2012年秋モデル
動作を抑止する条件 ●
省エネ待受機能をONにしていること
●
画面が消灯していること
●
バックグラウンドで動作中であるこ
と
●
省エネ待受対象外リストに登録され
ていないこと
※対象外リストを作る
●
左と同じ
Broadcast Intent の制限 ●
AndroidManifest.xml に定義するも
のが対象で、プログラム上で
registerReceiver を使用して登録
するものは対象外。
●
以下の Broadcast Intent 以外は全
て対象となる。
android.intent.action.BOOT_COMPL
ETED
android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON
com.google.android.c2dm.intent.R
ECEIVE
データ通信の制限 ●
未対応 ●
各アプリのデータ通信を制限する機
能
自動同期処理の遅延 ●
未対応 ●
自動同期処理を、次回画面点灯時ま
で遅延させる機能
次にやること
次にやること
●
電話帳アクセスモニター
動作確認して気が付いたこと
●
AndroidManifest.xml に Receiver を定義してると、
Broadcast Intent が投げられた時にアプリが起動し
て Receiver が動作する。
BroadcastQueue.java の 804行目
// Not running -- get it started, to be executed when the app comes up.
if (DEBUG_BROADCAST) Slog.v(TAG,
"Need to start app ["
+ mQueueName + "] " + targetProcess + " for broadcast " + r);
if ((r.curApp=mService.startProcessLocked(targetProcess,
info.activityInfo.applicationInfo, true,
r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND,
"broadcast", r.curComponent,
(r.intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false))
== null) {
今回作成したものは Github に登録済み
●
素の AOSP(Galaxy Nexus)に対してエコ技だけ追加
した環境
ソースコード取得
$ repo init -u https://github.com/sola-dolphin1/platform_manifest.git -b
jb-4.2
$ repo sync
Galaxy Nexus 向けにビルドする
$ cd device/samsung/maguro/
$ ./download-blobs.sh
$ cd -
$ cd selfbuild/samsung/maguro/proprietary/
$ ./extract-files.sh ※sudo を使用してるので、パスワード聞かれます。
$ cd -
$ source build/envsetup.sh
$ lunch full_maguro-userdebug
$ make otapackage
终了

More Related Content

Similar to 厂贬础搁笔のエコ技を実装してみた (20)

ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
akira6592
?
顿谤颈惫别谤について
顿谤颈惫别谤について顿谤颈惫别谤について
顿谤颈惫别谤について
幸雄 村上
?
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催) ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
akira6592
?
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
yoshikawa_t
?
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debug
uupaa
?
omoon.org の裏側 ?FuelPHP の task 活用例?
omoon.org の裏側 ?FuelPHP の task 活用例?omoon.org の裏側 ?FuelPHP の task 活用例?
omoon.org の裏側 ?FuelPHP の task 活用例?
Sotaro Omura
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruik
Rui Kimura
?
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
hirokiky
?
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorial
Kazuaki Ueda
?
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
?
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
Hiro Yoshioka
?
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi
?
日本础苍诲谤辞颈诲の会 中国支部资料
日本础苍诲谤辞颈诲の会 中国支部资料日本础苍诲谤辞颈诲の会 中国支部资料
日本础苍诲谤辞颈诲の会 中国支部资料
Masafumi Terazono
?
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
Ayumi Goto
?
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
?
今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍
tomo_masakura
?
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
Sadao Tokuyama
?
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
?
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
akira6592
?
顿谤颈惫别谤について
顿谤颈惫别谤について顿谤颈惫别谤について
顿谤颈惫别谤について
幸雄 村上
?
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催) ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
akira6592
?
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
yoshikawa_t
?
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debug
uupaa
?
omoon.org の裏側 ?FuelPHP の task 活用例?
omoon.org の裏側 ?FuelPHP の task 活用例?omoon.org の裏側 ?FuelPHP の task 活用例?
omoon.org の裏側 ?FuelPHP の task 活用例?
Sotaro Omura
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruik
Rui Kimura
?
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
hirokiky
?
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorial
Kazuaki Ueda
?
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
?
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
Hiro Yoshioka
?
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi
?
日本础苍诲谤辞颈诲の会 中国支部资料
日本础苍诲谤辞颈诲の会 中国支部资料日本础苍诲谤辞颈诲の会 中国支部资料
日本础苍诲谤辞颈诲の会 中国支部资料
Masafumi Terazono
?
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
?
今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍
tomo_masakura
?
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
Sadao Tokuyama
?
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
?

More from android sola (18)

カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲
カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲
カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲
android sola
?
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
android sola
?
ロリ化で进化する闯颁搁翱惭
ロリ化で进化する闯颁搁翱惭ロリ化で进化する闯颁搁翱惭
ロリ化で进化する闯颁搁翱惭
android sola
?
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsola
android sola
?
闯颁(搁翱惭)に俺の碍颈迟碍补迟をあげてみた闯颁(搁翱惭)に俺の碍颈迟碍补迟をあげてみた
闯颁(搁翱惭)に俺の碍颈迟碍补迟をあげてみた
android sola
?
闯颁搁翱惭の4.3対応闯颁搁翱惭の4.3対応
闯颁搁翱惭の4.3対応
android sola
?
贵补苍肠测贵谤辞苍迟颈别谤22参戦报告
贵补苍肠测贵谤辞苍迟颈别谤22参戦报告贵补苍肠测贵谤辞苍迟颈别谤22参戦报告
贵补苍肠测贵谤辞苍迟颈别谤22参戦报告
android sola
?
Firefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみたFirefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみた
android sola
?
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
android sola
?
私の欲しい Android 端末
私の欲しい Android 端末私の欲しい Android 端末
私の欲しい Android 端末
android sola
?
JCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放てJCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放て
android sola
?
笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补
android sola
?
笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补
android sola
?
笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补
笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补
笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补
android sola
?
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoard
android sola
?
Gingerbread
GingerbreadGingerbread
Gingerbread
android sola
?
20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-android
android sola
?
カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲
カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲
カスタム搁翱惭开発者の视点から见た础苍诲谤辞颈诲
android sola
?
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
android sola
?
ロリ化で进化する闯颁搁翱惭
ロリ化で进化する闯颁搁翱惭ロリ化で进化する闯颁搁翱惭
ロリ化で进化する闯颁搁翱惭
android sola
?
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsola
android sola
?
闯颁(搁翱惭)に俺の碍颈迟碍补迟をあげてみた闯颁(搁翱惭)に俺の碍颈迟碍补迟をあげてみた
闯颁(搁翱惭)に俺の碍颈迟碍补迟をあげてみた
android sola
?
闯颁搁翱惭の4.3対応闯颁搁翱惭の4.3対応
闯颁搁翱惭の4.3対応
android sola
?
贵补苍肠测贵谤辞苍迟颈别谤22参戦报告
贵补苍肠测贵谤辞苍迟颈别谤22参戦报告贵补苍肠测贵谤辞苍迟颈别谤22参戦报告
贵补苍肠测贵谤辞苍迟颈别谤22参戦报告
android sola
?
Firefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみたFirefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみた
android sola
?
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
android sola
?
私の欲しい Android 端末
私の欲しい Android 端末私の欲しい Android 端末
私の欲しい Android 端末
android sola
?
JCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放てJCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放て
android sola
?
笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2012年3月勉强会.补苍诲谤辞颈诲蝉辞濒补
android sola
?
笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补
笔贵部2011年12月勉强会.补苍诲谤辞颈诲蝉辞濒补
android sola
?
笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补
笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补
笔蹿部2011年10月勉强会.1蔼补苍诲谤辞颈诲蝉辞濒补
android sola
?
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoard
android sola
?
20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-android
android sola
?

Recently uploaded (11)

2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?

厂贬础搁笔のエコ技を実装してみた