SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
Ice Cream Sandwich
を動かしてみて気が付いたこと
自己紹介
●
    twitter : @androidsola
    G+     : http://gplus.to/sola
    blog   : http://blog.sola-dolphin-1.net/
ICS の動作を確認した実機
●   PandaBoard
●   PandaBoard ES
●   BeagleBoard
●   BeagleBoard-xM
●   Snowball
●   I.MX53 QSB
●   ODROID-T
●   Nexus One
ICS を動かして気になった事
●   software navigation bar
●   Tablet/Phone 統合
●   SD カードの扱い
●   init の変化
●   input system の変化
●   Linux Kernel への変更
●   GPU 対応
software navigation bar
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 に設定する。
software navigation bar
●   (たぶん)気をつけた方がよいこと
    bar を表示すると、 bar を表示する領域のサイズだけ
    アプリが表示可能な領域が小さくなる。
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

                引かれる領域
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

          引かれる領域
Tablet/Phone 統合
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 向け
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);
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;
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;
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
内蔵メモリを 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 を使う
init の変化
●   Android2.3→4.0 では init にも変化有り。
    Snowball で ICS を動かした時にはまった事を紹介。
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 の部分となる。
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;
             }
init の変化
●   ICS に対応した init.xxxx.rc の作成
cat /proc/cpuinfo で得られる
Hardware の値を変換

Hardware : ST-Ericsson Snowball platform

空白を飛ばして大文字を小文字にすると、
st-ericssonsnowballplatform となるので、
init.st-ericssonsnowballplatform.rc となる。
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 は限界を突破する。
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 にコミットしたい内容 ...
input system の変化
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
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());
    }
}
input system の変化
●   タッチパネルを使いたい時の idc ファイルの内容
    touch.deviceType = touchScreen
    の 1 行があれば良い。
input system の変化
●   idc ファイル命名時の注意事項
アルファベット、数字、「 - 」、「 _ 」はそのまま使用。
その他は、「 _ 」に変換する。

eGalax Inc. USB TouchController
という名前の場合、
eGalax_Inc__USB_TouchController.idc
となる。
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
Linux Kernel への変更
●   ICS 向けに必要な変更はあるのか?
    調査してみた。
Linux Kernel への変更
●   kernel config でイカを確認
    CONFIG_FB_EARLYSUSPEND を有効
    CONFIG_FRAMEBUFFER_CONSOLE を無効


    厳密には Honeycomb から必要な変更
    ソースは Emulator 向け kernel の変更履歴 
GPU 対応
●   Gingerbread で使えていたライブラリを
    ICS で使うと落ちて起動しない。
    現状は GPU を使わないようにして起動させている。
    Linaro や CyanogenMod で対応している内容。
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;
}
GPU 対応
frameworks/base/core/java/android/view/HardwareRenderer.java
/**
 * A process can set this flag to false to prevent the use of hardware
 * rendering.
 *
 * @hide
 */
//public static boolean sRendererDisabled = false;
public static boolean sRendererDisabled = true;
GPU 対応
●   BeagleBoard/BeagleBoard-xM で動作させた時は
    今のパッチは無くても良かった。
    厳密には解像度が 640×480 の時は動いた。
    1280×720 等の高解像度にすると、
    Out of Memory が出てアプリが落ちた。
GPU 対応
●   GPU 無効な状態で起動させると、
    色がおかしい状態で起動するものがあった。
    →ODROID-T
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;
特定のターゲット用の 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

Weitere ähnliche Inhalte

Was ist angesagt?

GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたRyo Sakamoto
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法LINE Corporation
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Takefumi MIYOSHI
 
RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩Ryo Fujita
 
Aiwolf seminar 2019_ja
Aiwolf seminar 2019_jaAiwolf seminar 2019_ja
Aiwolf seminar 2019_jaTakedaatsushi
 
MeeGo Seminar Winter Porting 20101209
MeeGo Seminar Winter Porting 20101209MeeGo Seminar Winter Porting 20101209
MeeGo Seminar Winter Porting 20101209Mitz Amano
 
I2CでRaspberry Piから 複数の周辺機器を制御する
I2CでRaspberry Piから複数の周辺機器を制御するI2CでRaspberry Piから複数の周辺機器を制御する
I2CでRaspberry Piから 複数の周辺機器を制御するHirokazu Nishio
 
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 Fujio Kojima
 
HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界Fixstars Corporation
 
【テストレポート】Datrium DVXによるIOmark-VM性能テスト
【テストレポート】Datrium DVXによるIOmark-VM性能テスト【テストレポート】Datrium DVXによるIOmark-VM性能テスト
【テストレポート】Datrium DVXによるIOmark-VM性能テストデイトリウム
 
Hello, DirectCompute
Hello, DirectComputeHello, DirectCompute
Hello, DirectComputedasyprocta
 
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境智啓 出川
 
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoardandroid sola
 
Raspberry pi 2用のi2cアダプターの
Raspberry pi 2用のi2cアダプターのRaspberry pi 2用のi2cアダプターの
Raspberry pi 2用のi2cアダプターのTakehiko Tomiyama
 
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
20130804 OSC京都 Raspberry Piに何かつないで遊ぼうYasuhiro Ishii
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 

Was ist angesagt? (20)

GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみた
 
Reconf 201506
Reconf 201506Reconf 201506
Reconf 201506
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
 
Das 2015
Das 2015Das 2015
Das 2015
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
 
RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩
 
Aiwolf seminar 2019_ja
Aiwolf seminar 2019_jaAiwolf seminar 2019_ja
Aiwolf seminar 2019_ja
 
MeeGo Seminar Winter Porting 20101209
MeeGo Seminar Winter Porting 20101209MeeGo Seminar Winter Porting 20101209
MeeGo Seminar Winter Porting 20101209
 
I2CでRaspberry Piから 複数の周辺機器を制御する
I2CでRaspberry Piから複数の周辺機器を制御するI2CでRaspberry Piから複数の周辺機器を制御する
I2CでRaspberry Piから 複数の周辺機器を制御する
 
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編
 
HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界
 
【テストレポート】Datrium DVXによるIOmark-VM性能テスト
【テストレポート】Datrium DVXによるIOmark-VM性能テスト【テストレポート】Datrium DVXによるIOmark-VM性能テスト
【テストレポート】Datrium DVXによるIOmark-VM性能テスト
 
dm-thin-internal-ja
dm-thin-internal-jadm-thin-internal-ja
dm-thin-internal-ja
 
Hello, DirectCompute
Hello, DirectComputeHello, DirectCompute
Hello, DirectCompute
 
Your hash is.
Your hash is.Your hash is.
Your hash is.
 
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
 
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoard
 
Raspberry pi 2用のi2cアダプターの
Raspberry pi 2用のi2cアダプターのRaspberry pi 2用のi2cアダプターの
Raspberry pi 2用のi2cアダプターの
 
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 

Andere mochten auch

20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-androidandroid sola
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaandroid sola
 
Yokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaandroid sola
 
Pf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsolaPf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsolaandroid sola
 
私の欲しい Android 端末
私の欲しい Android 端末私の欲しい Android 端末
私の欲しい Android 端末android sola
 
SHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたSHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたandroid sola
 
Firefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみたFirefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみたandroid sola
 
JC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたJC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたandroid sola
 
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方Masahiro Hidaka
 
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
 
カスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidカスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidandroid sola
 
FancyFrontier22参戦報告
FancyFrontier22参戦報告FancyFrontier22参戦報告
FancyFrontier22参戦報告android sola
 
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るandroid sola
 
はじめてのAndroid開発
はじめてのAndroid開発はじめてのAndroid開発
はじめてのAndroid開発Katsumi Honda
 
Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウchancelab
 

Andere mochten auch (20)

20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-android
 
Embedded Master2
Embedded Master2Embedded Master2
Embedded Master2
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsola
 
Gingerbread
GingerbreadGingerbread
Gingerbread
 
Yokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsola
 
Pf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsolaPf部2011年10月勉強会.1@androidsola
Pf部2011年10月勉強会.1@androidsola
 
私の欲しい Android 端末
私の欲しい Android 端末私の欲しい Android 端末
私の欲しい Android 端末
 
SHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたSHARPのエコ技を実装してみた
SHARPのエコ技を実装してみた
 
Firefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみたFirefox OSのカスタムROM開発を始めてみた
Firefox OSのカスタムROM開発を始めてみた
 
JC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたJC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみた
 
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方
 
JCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放てJCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放て
 
PF部2012年3月勉強会.androidsola
PF部2012年3月勉強会.androidsolaPF部2012年3月勉強会.androidsola
PF部2012年3月勉強会.androidsola
 
JCROMの4.3対応
JCROMの4.3対応JCROMの4.3対応
JCROMの4.3対応
 
カスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidカスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroid
 
FancyFrontier22参戦報告
FancyFrontier22参戦報告FancyFrontier22参戦報告
FancyFrontier22参戦報告
 
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
 
はじめてのAndroid開発
はじめてのAndroid開発はじめてのAndroid開発
はじめてのAndroid開発
 
Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウ
 
AndroidとSELinux
AndroidとSELinuxAndroidとSELinux
AndroidとSELinux
 

Ähnlich wie PF部2011年12月勉強会.androidsola

NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!Masami Ichikawa
 
Open dronemapハンズオン
Open dronemapハンズオンOpen dronemapハンズオン
Open dronemapハンズオンMizutani Takayuki
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道なおき きしだ
 
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml ssuser3a4b8c
 
Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)Fixstars Corporation
 
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト清水樹
 
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
MastodonインスタンスをセットアップできるスタートアップスクリプトについてMastodonインスタンスをセットアップできるスタートアップスクリプトについて
Mastodonインスタンスをセットアップできるスタートアップスクリプトについてさくらインターネット株式会社
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Yasuhiro Arai
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002Takeshi Kuramochi
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス5mingame2
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールTomoaki Shimizu
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LTKohei KaiGai
 
Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発Shotaro Suzuki
 

Ähnlich wie PF部2011年12月勉強会.androidsola (20)

NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
Android gameprogramming
Android gameprogrammingAndroid gameprogramming
Android gameprogramming
 
Cuda
CudaCuda
Cuda
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 
Open dronemapハンズオン
Open dronemapハンズオンOpen dronemapハンズオン
Open dronemapハンズオン
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
 
Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)
 
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
 
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
MastodonインスタンスをセットアップできるスタートアップスクリプトについてMastodonインスタンスをセットアップできるスタートアップスクリプトについて
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツール
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発
 

Kürzlich hochgeladen

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Kürzlich hochgeladen (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

PF部2011年12月勉強会.androidsola

  • 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 対応
  • 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. software navigation bar ● (たぶん)気をつけた方がよいこと bar を表示すると、 bar を表示する領域のサイズだけ アプリが表示可能な領域が小さくなる。
  • 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 引かれる領域
  • 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 にコミットしたい内容 ...
  • 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. input system の変化 ● タッチパネルを使いたい時の idc ファイルの内容 touch.deviceType = touchScreen の 1 行があれば良い。
  • 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. Linux Kernel への変更 ● ICS 向けに必要な変更はあるのか? 調査してみた。
  • 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. GPU 対応 frameworks/base/core/java/android/view/HardwareRenderer.java /** * A process can set this flag to false to prevent the use of hardware * rendering. * * @hide */ //public static boolean sRendererDisabled = false; public static boolean sRendererDisabled = true;
  • 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