SlideShare une entreprise Scribd logo
1  sur  61
SHARPのエコ技を実装してみた
@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
終了

Contenu connexe

Similaire à SHARPのエコ技を実装してみた

ネットワーク自動化、なに使う? ~自動化ツール紹介~ (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.nextyoshikawa_t
 
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debuguupaa
 
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 GUIDEdcubeio
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruikRui Kimura
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performancehirokiky
 
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorialKazuaki 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 CodereadingHiro Yoshioka
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
日本Androidの会 中国支部資料
日本Androidの会 中国支部資料日本Androidの会 中国支部資料
日本Androidの会 中国支部資料Masafumi Terazono
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeomantomo_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
 

Similaire à SHARPのエコ技を実装してみた (20)

ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
 
Driverについて
DriverについてDriverについて
Driverについて
 
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催) ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
 
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debug
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruik
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorial
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
日本Androidの会 中国支部資料
日本Androidの会 中国支部資料日本Androidの会 中国支部資料
日本Androidの会 中国支部資料
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
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 & ...
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 

Plus de android sola

カスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidカスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidandroid sola
 
ロリ化で進化するJCROM
ロリ化で進化するJCROMロリ化で進化するJCROM
ロリ化で進化するJCROMandroid sola
 
Yokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaandroid sola
 
JC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたJC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたandroid sola
 
FancyFrontier22参戦報告
FancyFrontier22参戦報告FancyFrontier22参戦報告
FancyFrontier22参戦報告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
 
PF部2012年3月勉強会.androidsola
PF部2012年3月勉強会.androidsolaPF部2012年3月勉強会.androidsola
PF部2012年3月勉強会.androidsolaandroid sola
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaandroid sola
 
Pf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsolaPf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsolaandroid sola
 
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoardandroid sola
 
20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-androidandroid sola
 

Plus de android sola (18)

カスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidカスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroid
 
AndroidとSELinux
AndroidとSELinuxAndroidとSELinux
AndroidとSELinux
 
ロリ化で進化するJCROM
ロリ化で進化するJCROMロリ化で進化するJCROM
ロリ化で進化するJCROM
 
Yokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsola
 
JC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたJC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみた
 
JCROMの4.3対応
JCROMの4.3対応JCROMの4.3対応
JCROMの4.3対応
 
FancyFrontier22参戦報告
FancyFrontier22参戦報告FancyFrontier22参戦報告
FancyFrontier22参戦報告
 
Firefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみたFirefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみた
 
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
 
私の欲しい Android 端末
私の欲しい Android 端末私の欲しい Android 端末
私の欲しい Android 端末
 
JCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放てJCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放て
 
PF部2012年3月勉強会.androidsola
PF部2012年3月勉強会.androidsolaPF部2012年3月勉強会.androidsola
PF部2012年3月勉強会.androidsola
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
Pf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsolaPf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsola
 
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoard
 
Gingerbread
GingerbreadGingerbread
Gingerbread
 
Embedded Master2
Embedded Master2Embedded Master2
Embedded Master2
 
20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-android
 

Dernier

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 

Dernier (11)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

SHARPのエコ技を実装してみた