Recommended
PDF
PDF
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
PDF
PDF
PDF
Linux KVM環境におけるGPGPU活用最新動向
PDF
PDF
2012 03-03-titanium plusquicktigame2d
PDF
KEY
PDF
PPTX
[CEDEC2017] LINEゲームのセキュリティ診断手法
PDF
PDF
Synthesijer fpgax 20150201
PPTX
PPTX
PDF
MeeGo Seminar Winter Porting 20101209
PDF
I2CでRaspberry Piから複数の周辺機器を制御する
PDF
PDF
HalideでつくるDomain Specific Architectureの世界
PDF
【テストレポート】Datrium DVXによるIOmark-VM性能テスト
PDF
PDF
PPTX
PDF
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
PDF
OrigenBoard and PandaBoard
PPTX
Raspberry pi 2用のi2cアダプターの
PDF
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
PDF
PDF
PDF
More Related Content
PDF
PDF
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
PDF
PDF
PDF
Linux KVM環境におけるGPGPU活用最新動向
PDF
PDF
2012 03-03-titanium plusquicktigame2d
PDF
What's hot
KEY
PDF
PPTX
[CEDEC2017] LINEゲームのセキュリティ診断手法
PDF
PDF
Synthesijer fpgax 20150201
PPTX
PPTX
PDF
MeeGo Seminar Winter Porting 20101209
PDF
I2CでRaspberry Piから複数の周辺機器を制御する
PDF
PDF
HalideでつくるDomain Specific Architectureの世界
PDF
【テストレポート】Datrium DVXによるIOmark-VM性能テスト
PDF
PDF
PPTX
PDF
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
PDF
OrigenBoard and PandaBoard
PPTX
Raspberry pi 2用のi2cアダプターの
PDF
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
PDF
Viewers also liked
PDF
PDF
PDF
Pf部2012年1月勉強会.androidsola
PDF
PDF
Yokohama-PF-2014-05-androidsola
PDF
Pf部2011年10月勉強会.1@androidsola
PDF
PDF
PDF
Firefox OSのカスタムROM開発を始めてみた
PDF
PDF
PDF
JCROM で Android の「真の力」を解き放て
PDF
PF部2012年3月勉強会.androidsola
PDF
PDF
PDF
PDF
KEONとPEAKが無くてもFirefox OS開発出来る
ODP
PDF
PDF
Similar to PF部2011年12月勉強会.androidsola
PDF
“夏前にすぐに痩せるRam diet!” もしくは 「老頭児組込みエンジニアの苦悩」 (中継無し) パート1 公開版
PDF
はじめての4,500円OS無しジャンクIntel MacbookにLinux,NetBSDインストール iin OSC 2020 Online/Kyoto...
PDF
PDF
PDF
PDF
PDF
JellyBeanのソースをとりあえず眺めてみた(手抜き)
PDF
PDF
PPTX
PDF
PPT
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
PDF
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
PDF
PF部第19回資料 poor man's JTAG
PDF
はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux Beginner for Linux long-lifetime in USB...
PDF
はじめての超格安2,500円 Nexus7 2012改造と Android7.1.2 AOSP、postmarketOS in 2020 Beginner...
KEY
PDF
Getting started raspberry pi osc hamamatsu
PDF
PDF
Beginner for install Android applications in Xiaomi MiReader はじめてのXiaomi MiR...
PF部2011年12月勉強会.androidsola 1. 2. 自己紹介
●
twitter : @androidsola
G+ : http://gplus.to/sola
blog : http://blog.sola-dolphin-1.net/
3. ICS の動作を確認した実機
● PandaBoard
● PandaBoard ES
● BeagleBoard
● BeagleBoard-xM
● Snowball
● I.MX53 QSB
● ODROID-T
● Nexus One
4. ICS を動かして気になった事
● software navigation bar
● Tablet/Phone 統合
● SD カードの扱い
● init の変化
● input system の変化
● Linux Kernel への変更
● GPU 対応
5. 6. software navigation bar
● 表示させるにはイカの変更が必要
frameworks/base/core/res/res/values/config.xml
初期値
<bool name="config_showNavigationBar">false</bool>
表示させるために変更した後
<bool name="config_showNavigationBar">true</bool>
● Emulator で試す場合
qemu.hw.mainkeys が 1 に設定されて、
config_showNavigetionBar の値が false に変更される。
emulator で試す場合は 0 に設定する。
7. 8. software navigation bar
例 1 :解像度 720×1280 の端末
ro.sf.lcd_density が 320 の場合( Galaxy Nexus )
48×320÷160=96 が縦の 1280 から引かれる。
→1184
ro.sf.lcd_density が 240 の場合
48×240÷160=72 が縦の 1280 から引かれる。
→1208
ro.sf.lcd_density が 160 の場合
48×160÷160=48 が縦の 1280 から引かれる。
→1232
引かれる領域
9. software navigation bar
例 2 :解像度 1280×720 の端末
ro.sf.lcd_density が 320 の場合
42×320÷160=84 が横の 1280 から引かれる。
→1196
ro.sf.lcd_density が 240 の場合
42×240÷160=63 が横の 1280 から引かれる。
→1217
ro.sf.lcd_density が 160 の場合
42×160÷160=42 が横の 1280 から引かれる。
→1238
引かれる領域
10. 11. Tablet/Phone 統合
● Tablet と Phone の UI が統合されており、
イカの処理で区別している。
frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUI
Service.java
public void onCreate() {
// Pick status bar or system bar.
IWindowManager wm = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
try {
SERVICES[0] = wm.canStatusBarHide() Phone 向け
? R.string.config_statusBarComponent
: R.string.config_systemBarComponent;
} catch... Tablet 向け
12. Tablet/Phone 統合
● wm.canStatusBarHide() が返す true/false を
決めている場所
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWi
ndowManager.java
int shortSizeDp = shortSize
* DisplayMetrics.DENSITY_DEFAULT
/ DisplayMetrics.DENSITY_DEVICE;
mStatusBarCanHide = shortSizeDp < 600;
mStatusBarHeight = mContext.getResources().getDimensionPixelSize(
mStatusBarCanHide
? com.android.internal.R.dimen.status_bar_height
: com.android.internal.R.dimen.system_bar_height);
13. Tablet/Phone 統合
● Galaxy Nexus での計算式
int shortSizeDp = shortSize
* DisplayMetrics.DENSITY_DEFAULT
/ DisplayMetrics.DENSITY_DEVICE;
mStatusBarCanHide = shortSizeDp < 600;
int shortSizeDp = 720 (縦横の小さい方の解像度)
* 160
/ 320; ( ro.sf.lcd_density の値)
mStatusBarCanHide = 360 < 600;
14. Tablet/Phone 統合
● 解像度 800×480 なタブレットの場合の例
int shortSizeDp = shortSize
* DisplayMetrics.DENSITY_DEFAULT
/ DisplayMetrics.DENSITY_DEVICE;
mStatusBarCanHide = shortSizeDp < 600;
int shortSizeDp = 480 (縦横の小さい方の解像度)
* 160
/ 120; ( ro.sf.lcd_density の値)
mStatusBarCanHide = 640 < 600;
15. SD カードの扱い
● SD カードスロットを持たないターゲット向けに、
内蔵メモリを /sdcard として使う仕組みが入っている。
mount コマンドで /mnt/sdcard のマウント状態を確認
root@android:/ # mount
/dev/fuse /mnt/sdcard fuse
rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permiss
ions,allow_other 0 0
16. 内蔵メモリを SD カードとして使う方法
init.rc の on early-init にイカを追記
export EXTERNAL_STORAGE /mnt/sdcard
mkdir /mnt/sdcard 0000 system system
symlink /mnt/sdcard /sdcard
init.rc の on post-fs-data にイカを追記
mkdir /data/media 0775 media_rw media_rw
chown media_rw media_rw /data/media
setprop vold.post_fs_data_done 1
init.rc で /system/bin/sdcard を実行
service sdcard /system/bin/sdcard /data/media 1023 1023
class late_start
CONFIG_FUSE_FS=y でビルドした kernel を使う
17. init の変化
● Android2.3→4.0 では init にも変化有り。
Snowball で ICS を動かした時にはまった事を紹介。
18. init の変化
● Snowball 固有の設定を書いていた、
init.st-ericsson.rc の内容が反映されなかった。
● init でログを出してみたところ、
init.st-ericsson.rc 自体が読み込まれていなかった。
init.xxxx.rc の xxxx 部分について
cat /proc/cpuinfo で得られる Hardware の値を使用する。
Snowball の場合はイカの通り。
Hardware : ST-Ericsson Snowball platform
このうち空白文字までの文字を小文字にしたものが、
xxxx の部分となる。
19. init の変化
● init.xxxx.rc の xxxx 部分の決め方に変更有り。
system/core/init/util.c
get_hardware_name 関数
@@ -439,8 +382,9 @@
if (x) {
x += 2;
n = 0;
- while (*x && !isspace(*x)) {
- hardware[n++] = tolower(*x);
+ while (*x && *x != 'n') {
+ if (!isspace(*x))
+ hardware[n++] = tolower(*x);
x++;
if (n == 31) break;
}
20. init の変化
● ICS に対応した init.xxxx.rc の作成
cat /proc/cpuinfo で得られる
Hardware の値を変換
Hardware : ST-Ericsson Snowball platform
空白を飛ばして大文字を小文字にすると、
st-ericssonsnowballplatform となるので、
init.st-ericssonsnowballplatform.rc となる。
21. init の変化
● init.st-ericssonsnowballplatform.rc では
読み込まれない原因
system/core/init/init.c を見ると、
従来からの仕様
get_hardware_name(hardware, &revision);
snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
tmp は char tmp[32]; で定義。
init.st-ericssonsnowballplatform.rc は限界を突破する。
22. init の変化
● 対策として、 Linux Kernel を変更した
arch/arm/mach-ux500/board-mop500.c
変更前
MACHINE_START(SNOWBALL, "ST-Ericsson Snowball platform")
変更後
MACHINE_START(SNOWBALL, "ST-Ericsson")
以上のようにして、
init.st-ericsson.rc を用意するようにした。
● Android 側を修正して、 AOSP にコミットしたい内容 ...
23. 24. input system の変化
● ICS からは、
Input Device Configuration Files が存在する。
http://goo.gl/tPP8p
(ソースを調べた後で気が付いた ... )
idc ファイルはイカの順に探される。(=優先度)
/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/system/usr/idc/Vendor_XXXX_Product_XXXX.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc
/system/usr/idc/DEVICE_NAME.idc
/data/system/devices/idc/DEVICE_NAME.idc
25. input system の変化
● idc ファイルの内容から deviceType を判定してる箇所
frameworks/base/services/input/InputReader.cpp
if (getDevice()-
>getConfiguration().tryGetProperty(String8("touch.deviceType"),
deviceTypeString)) {
if (deviceTypeString == "touchScreen") {
mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN;
} else if (deviceTypeString == "touchPad") {
mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD;
} else if (deviceTypeString == "pointer") {
mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
} else if (deviceTypeString != "default") {
LOGW("Invalid value for touch.deviceType: '%s'",
deviceTypeString.string());
}
}
26. 27. input system の変化
● idc ファイル命名時の注意事項
アルファベット、数字、「 - 」、「 _ 」はそのまま使用。
その他は、「 _ 」に変換する。
eGalax Inc. USB TouchController
という名前の場合、
eGalax_Inc__USB_TouchController.idc
となる。
28. input system の変化
● マウスに対応
Android2.3 までお世話になっていた、
マウスカーソルのパッチは不要に。
リソース置き場
frameworks/base/core/res/res/drawable-xhdpi/pointer_arrow.png
frameworks/base/core/res/res/drawable-hdpi/pointer_arrow.png
frameworks/base/core/res/res/drawable-mdpi/pointer_arrow.png
29. 30. Linux Kernel への変更
● kernel config でイカを確認
CONFIG_FB_EARLYSUSPEND を有効
CONFIG_FRAMEBUFFER_CONSOLE を無効
厳密には Honeycomb から必要な変更
ソースは Emulator 向け kernel の変更履歴
31. GPU 対応
● Gingerbread で使えていたライブラリを
ICS で使うと落ちて起動しない。
現状は GPU を使わないようにして起動させている。
Linaro や CyanogenMod で対応している内容。
32. GPU 対応
frameworks/base/core/java/android/app/ActivityManager.java
static public boolean isHighEndGfx(Display display) {
/* MemInfoReader reader = new MemInfoReader();
reader.readMemInfo();
if (reader.getTotalSize() >= (512*1024*1024)) {
// If the device has at least 512MB RAM available to the kernel,
// we can afford the overhead of graphics acceleration.
return true;
}
Point p = new Point();
display.getRealSize(p);
int pixels = p.x * p.y;
if (pixels >= (1024*600)) {
// If this is a sufficiently large screen, then there are enough
// pixels on it that we'd really like to use hw drawing.
return true;
} */
return false;
}
33. 34. GPU 対応
● BeagleBoard/BeagleBoard-xM で動作させた時は
今のパッチは無くても良かった。
厳密には解像度が 640×480 の時は動いた。
1280×720 等の高解像度にすると、
Out of Memory が出てアプリが落ちた。
35. GPU 対応
● GPU 無効な状態で起動させると、
色がおかしい状態で起動するものがあった。
→ODROID-T
36. gralloc の変更
● 対策
hardware/libhardware/modules/gralloc/framebuffer.cpp
fb_device_open
@@ -335,7 +339,7 @@
if (status >= 0) {
int stride = m->finfo.line_length / (m-
>info.bits_per_pixel >> 3);
int format = (m->info.bits_per_pixel == 32)
- ? HAL_PIXEL_FORMAT_RGBX_8888
+ ? (m->info.red.offset ?
HAL_PIXEL_FORMAT_BGRA_8888 : HAL_PIXEL_FORMAT_RGBX_8888)
: HAL_PIXEL_FORMAT_RGB_565;
const_cast<uint32_t&>(dev->device.flags) = 0;
const_cast<uint32_t&>(dev->device.width) = m-
>info.xres;
37. 特定のターゲット用の gralloc 作成
● ODROID-T の場合の例
device/sec/odroidt/gralloc を作成
hardware/libhardware/modules/gralloc からのコピーに対して、
framebuffer.cpp を修正したもの。
Android.mk の修正
-LOCAL_MODULE := gralloc.default
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE := gralloc.hkdkc110
LOCAL_CFLAGS:= -DLOG_TAG="gralloc"
device/sec/odroidt/device.mk に追記
PRODUCT_PACKAGES += gralloc.hkdkc110