Android アプリを作るための環境設定 · プロジェクト名、アプリケーション名、Activity クラス名を「Test1」、パッケージ名を 「jp.test1」とします。
ESEC2011 ブース内セッション · ・Android...
Transcript of ESEC2011 ブース内セッション · ・Android...
Copyright © NIHON SYSTEM KAIHATSU CO., LTD.Copyright© Mamezou Co., Ltd. All Rights Reserved.
豆蔵・日本システム開発の Android開発エンジニア育成ソリューション
ESEC2011
ブース内セッション
p2p2株式会社豆蔵
1. Android エンジニア育成を目指す企業が 取るべき施策
2.豆蔵・日本システム開発の
Android 開発エンジニア育成ソリューション
目次
p3p3株式会社豆蔵
1.Android エンジニア育成を目指す企業が とるべき施策
p4p4株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
Androidエンジニア育成へのアプローチ
Androidという世界は全体像が大きい為、施策を立てずにエンジニア
育成を進めても効果が見込めない
段階的に、カバーする開発スコープや育成方法を検討する事で
効率的なエンジニア育成が見込まれる
施策を組み立てるための手順
STEP1 現状の理解と市場の把握
STEP2 カバーする開発スコープと割り当てる技術者比率の決定
STEP3 エンジニア育成方法の検討
p5p5株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
現状の理解と市場の把握 はじめに、組織の現状を理解し、Android開発の市場について把握して
おく必要がある。
自社のエンジニアの持つスキルセットを管理する
Android開発は、アプリケーション開発案件は多く、ポーティングやミドル
ウェアチューニングの案件は少ない
・案件の数(少)・対応可能な技術者数(少)
・案件の数(多)・対応可能な技術者数(多)
STEP 1
アプリケーション層
ネイティブ層
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング
p6p6株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
自社としてカバーする領域を決定する 自社の強み・市場性・協業パートナーの3観点から、自社がカバー出来
る階層や、将来的にカバーしたい階層を定める必要がある。
例)アプリケーション開発が得意、ネイティブ層もカバーしたい場合
ミドルウェアに強い協業パートナーに任せる
自社ではアプリケーションエンジニアとは別に、ポーティングエンジニアを育成す
る方が短時間で体制を築ける
組込み系・ポーティングエンジニア
アプリケーション層
ネイティブ層
別途エンジニアを育成
STEP 2
エンタープライズ系・ウェブエンジニア
・アプリエンジニアなど
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング
ミドルウェアをやっている協業
パートナー
p7p7株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
カバー領域に割り当てる技術者比率の検討 開発市場に合わせて、育成するエンジニアの比率を決定する。
下位層に進むに連れて、エンジニア比率を下げて行くほうが、
社内でエンジニアの飽和を抑えられる
・案件の数(多)・対応可能な技術者数(多)
STEP 2 アプリケーションエンジニア
ミドルウェアエンジニア
ポーティングエンジニア
> >
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング ・案件の数(少)・対応可能な技術者数(少)
p8p8株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
技術者構成を考える前に Androidは膨大な知識が必要とされる為、一人のエンジニアで全てをカ
バーする事は現実的ではない。
順番に階層を網羅していくような単純な育成計画ではNG
例)アプリケーションエンジニアが、Androidのネイティブ層の対応を
しようとすると全く別の知識が必要になり、エンジニア育成に膨大な
時間が掛かってしまう
アプリケーション層
ネイティブ層STEP 2
アプリケーションエンジニア
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
AndroidポーティングミドルウェアやLinuxの知識が必要になる
今まで積み重ねた
知識+αで対応可能
p9p9株式会社豆蔵
検討した技術者比率を実現するために誰にどこの教育をするかを決めていく必要がある。
全員が同じスキル習得の流れを通る必要はない
例)単純に全員アプリ開発から実施するのではなく、
Aさんはアプリケーションから習得、Bさんはミドルから習得というように
個人単位で分担を決める
STEP 2
Android エンジニア育成を目指す企業が取るべき施策
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング
アプリケーション
層から技術習得
アプリケーション
以外の層から
技術習得
Aさん
Bさん
p10p10株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
組織として得意なところからのスタート まずは組織やエンジニアの得意とする階層からスタートし、価格競争に
飲み込まれないために、対応可能な階層の拡大を目指す。
エンジニア属性や組織状況によって領域拡大の方法が異なる
エンタープライズ系
・・・
アプリ層からスタート
組込み系
・・・・・・・・・・・
ミドルウェア層からスタート
・・・・・・・・・・・
ポーティング層からスタート
下階層へ進む
同階層内の拡充
例)
STEP 2 ポーティングエンジニア
アプリケーションエンジニア
ミドルウェアエンジニア
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング同階層内の拡充
下階層へ進む
p11p11株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
エンジニア育成方法の検討 育成方法には、主にOFF-JTとOJTがある。
OFF-JTの例
インターネット情報サイト、書籍と開発環境を与え独学させる
トレーナー企業主催のオープンセミナーに参加させる
開発に取り組むための基礎となる知識の習得
自社主催のオンサイトセミナーに参加させる
実際のプロジェクトに必要な知識やノウハウに絞って習得も可能
OJTの例
契約社員や準委任契約などの方法で、スペシャリストをプロジェクトへ
投入し、一緒に仕事をさせる
既存チームで対応を開始し、技術的に難しい部分は外部サポートを受
け、ノウハウを吸収させる
STEP 3
p12p12株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
OFF-JTの検討
OFF-JTのメリット
チーム単位で基礎知識の底上げを図ることができる
体系的なスキルを身に付けることができる
OFF-JTのデメリット
初期コストとして育成予算の確保が必要である
職場を離れるため、仕事を中断させることになる
STEP 3
p13p13株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
OJTの検討
OJTのメリット
初期コストがかからない
案件をこなしながらエンジニア育成が可能
開発ノウハウを蓄積できれば、徐々にチームの開発効率が
上がっていく
OJTのデメリット
Androidの基礎知識を持たない組織ではOJT自体が機能しない
指導者の能力や経験に左右されやすい
担当以外のスキルが身につかず、体系的な理解が困難
STEP 3
p14p14株式会社豆蔵
Android エンジニア育成を目指す企業が取るべき施策
OFF-JT・OJTの組み合わせ検討 OFF-JT, OJTはそれぞれ単独では効果を発揮できないため、
開発チームやエンジニアの状況によって組み合わせを変えていく。
例1)Androidの開発経験がない場合
【OFF-JT】オープンセミナーで基礎知識を習得
【OJT】外部からスペシャリストを招いて開発ノウハウを吸収
例2)Androidの開発経験がある場合
【OFF-JT】オンサイトセミナーでプロジェクトに必要な知識の習得
【OJT】課題発生時に外部サポートでノウハウ吸収
STEP 3
p15p15株式会社豆蔵
2.豆蔵・日本システム開発の Android 開発エンジニア育成ソリューション
p16p16株式会社豆蔵
Android 開発エンジニア育成ソリューション
Android 開発エンジニア育成ソリューションの背景
豆蔵
Android開発における、事前に必要な知識の教育やコンサルティング
サービスの提供が可能
UML、オブジェクト指向、Javaなどの豊富な教育ノウハウ
上流工程を中心とした豊富なコンサルティング実績あり
NSK
豊富なAndroidの開発実績から、Androidにおける教育やテクニカル
サポートが可能
開発経験から作成したAndroid教育コンテンツを保有
複数のテクニカルサポート実績あり
Android開発エンジニア育成ソリューションの誕生
p17p17株式会社豆蔵
Android固有の知識を習得
Android 開発エンジニア育成ソリューション
Android エンジニア育成ソリューションの概要
OFF-JTとOJTの組み合わせによる、組織のスキルセットに 合わせた、幅広いソリューションの提供が可能
事前に必要とされる基礎知識の習得
・OFF-JT-実装-エンジニアリング-テスティング
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング
・OFF-JT-Androidアプリケーション開発コース
(初級・応用・ポーティング)・OJT-テクニカルサポート
p18p18株式会社豆蔵
Android 開発エンジニア育成ソリューション
OFF-JT でカバー出来る範囲
事前に必要とされる知識
実 装
・基礎から学ぶUMLとJavaプログラミング・JavaとUMLによる実践プログラミング基礎1,2・Java総合演習・デザインパターン入門
・・・etc
エンジニアリング
テスティング
Androidの知識
・Android アプリケーション開発コース(初級編)・Android アプリケーション開発コース(応用編)・Android ポーティングコース(※)
・エンジニアリング基礎講座・要求基礎講座・ソフトウェア設計基礎講座・ソフトウェア品質保証入門講座
・・・etc
・ソフトウェアテスティング基礎講座・【公認】JSTQB認定テスト技術者
-Foundation Levelトレーニング
・・・etc
※Androidポーティングコースは株式会社エンベデッド・システムが企画し、
日本システム開発株式会社にて作成したコンテンツです
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング
p19p19株式会社豆蔵
Android 開発エンジニア育成ソリューション
OFF-JT の特徴
コンテンツ作成から講師まで、現役のエンジニアやコンサル タントが担当
教科書的ではなく、開発現場の実態に即したコンテンツ
現場で直面する課題を題材にした演習中心のコンテンツ
お客様のご要望に合わせてコンテンツ内容をカスタマイズ が可能(オンサイトセミナーに限る)
p20p20株式会社豆蔵
Android 開発エンジニア育成ソリューション
Android アプリケーション開発講座の内容
電卓(アクティビティ)の作成 デジタル時計(ウィジェット)の作成
・OpenGLによる3D描画・NDKを使用したアプリ開発・カメラデバイスの制御・メモリ管理・テストフレームワーク
etc…
初級編
応用編
p21p21株式会社豆蔵
Android 開発エンジニア育成ソリューション
OJT によるエンジニア育成ソリューション
テクニカルサポートとは お客様が課題に直面された際に、その課題解決に絞って解決方法を提供す
るサービスです。
テクニカルサポートの特徴
実作業は社内エンジニアが行う為、技術力の向上ノウハウの蓄積が可能
不得意な領域に絞って開発支援を受けることが出来る為、対応可能な範
囲を広げる事が出来る
お客様開発チーム 豆蔵・NSK
お客様からヒアリング
調査結果、使用工数のご報告技術調査
依頼
ソースコードのご提出
レビュー結果、使用工数のご報告
コードレビュー
依頼
お客様の依頼内容に合わせて各スペシャリストが対応
p22p22株式会社豆蔵
Android テクニカルサポートの質問対応範囲Android アプリケーション設計・開発
例1) Low Memory で
Killされないアプリ/サービスを作成する方法
例2) Android 2.2でiPhone のようなオーバースクロールを実現する方法
例3) 複数
Activity が積まれた状態で一度にアプリを終了させる方法
Android プラットフォーム改造・開発
例1) HTML で複数の指定したフォントでブラウジングさせる方法
例2) Android を
24bitカラー化に対応させる方法
例3) 独自の共有
jar ライブラリを追加し、Android で使用する方法
Linux(予定)
Android 開発エンジニア育成ソリューション
※各事例の説明は後述【付録1】にて記載
p23p23株式会社豆蔵
Android 開発エンジニア育成ソリューション
Android開発エンジニアを育成するためには
Android開発エンジニア育成の戦略を立てる
エンジニアを育成する
OFF-JTで基本的な開発スキルを習得する
OFF-JTでAndroid開発固有の知識を習得する
テクニカルサポートを活用し、本やWebサイトには
書かれていない実践的な問題解決方法を効率良く獲得する
Android開発スペシャリストと共に開発チームを組み、OJTで仕事
のやり方を間近で学ぶ
p24p24株式会社豆蔵
まとめ
Androidエンジニア育成施策3STEP
STEP 3
STEP 2
STEP 1 現状の理解と市場の把握
カバーする開発スコープと割り当てる技術者比率の決定
エンジニア育成方法の検討
・案件の数(多)・対応可能な技術者数(多)
ミドルウェアチューニング
アプリケーション開発(JAVAオンリー)
アプリケーション開発(JAVA+NDK)
Linuxポーティング
Androidポーティング
・案件の数(少)・対応可能な技術者数(少)
アプリケーションエンジニア
ミドルウェアエンジニア
ポーティングエンジニア
Android固有の知識を習得
事前に必要とされる基礎知識の習得
・OFF-JT-実装-エンジニアリング-テスティング
・OFF-JT-Androidアプリケーション開発コース
(初級・応用・ポーティング)・OJT-テクニカルサポート
エンジニア育成
p25p25株式会社豆蔵
お問い合わせ
Androidに関するお問い合わせはこちらまで
豆蔵 豆蔵シンビオ
・組み込みソフトの開発力強化
・品質向上
・プロセス改善
・エンジニアリング教育
・オブジェクト指向導入
・Android
・オフショア開発
・ソフトウェア開発
・品質教育
・技術教育(Android・Linux)
日本システム
開発
〒163-0434東京都新宿区西新宿二丁目1番1号
新宿三井ビルディング34階
TEL:
03-5339-2114URL:
http://www.mamezou.com/e-mail:
〒163-0637東京都新宿区西新宿一丁目25番1号
新宿センタービル37階
TEL:
03-5324-0123URL:
http://www.nskint.co.jp/e-mail:
〒108-0075東京都港区港南二丁目16番1号
品川イーストワンタワー4階
TEL:03-6890-8323URL:http://mamezou-symbio.com/e-mail:
p26p26株式会社豆蔵
Low Memory で Killされないアプリ/サービスを作成する方法
[概要]
バックグランド上で動作している
Android アプリ/サービスは Low Memory 状態では
Kill される場合がある。
[質問]
・Kill されるアプリ/サービスの条件は何か?
・Kill されないアプリ/サービスを作成するにはどのようにすればよいか?
Androidアプリ技術
質問事例
1/3
【付録1】Android 開発エンジニア育成ソリューション
p27p27株式会社豆蔵
Low Memory で Killされないアプリ/サービスを作成する方法
[回答例]・Kill されるアプリ/サービスの条件は何か?
Android はアプリケーションの状態に合わせて、プロセスを停止させる優先度をもっている。
そして、アプリケーションの処理状態が変化するたびに優先度が再設定される。↑
高優先度(停止する可能性が最も低い)1:フォアグランド(最前面)にいるアクティビティ、処理中のサービス2:可視状態のアクティビティ3:処理待ちのサービス4:バックグランドにいるアクティビティ
↓
低優先度(メモリ不足で停止される可能性が高い)
・Kill されないアプリ/サービスを作成するにはどのようにすればよいか?Android には、アクティビティ/サービスの状態に関係なく優先度を固定するAPIが存在する。
アクティビティの場合:Activity#setPersistent()Activity の優先度をフォアグランドに近い優先度に上げる。※ただし、非推奨APIで、2.3 で廃止された
サービスの場合:Service#startForeground()Serviceの優先度をフォアグランドに近い優先度に上げる。
【付録1】Android 開発エンジニア育成ソリューション
p28p28株式会社豆蔵
[概要]
Android 2.2 で
iPhone のような横方向のオーバースクロールを行いたい
[質問]
・Android 2.2 でオーバースクロールの実装方法は?
Androidアプリ技術
質問事例
2/3
【付録1】Android 開発エンジニア育成ソリューション
Android 2.2 で iPhone のような横方向のオーバースクロール実現する方法
p29p29株式会社豆蔵
[概要]
複数 Activity (画面構成レイヤ) を積んだ状態で、例外が発生してもフォアグランドに
存在する Activity のみ終了する
[質問]
・一度に全
Activity を終了させるにはどのようにすればよいか?
(System.exit() 以外の方法)
Activity1
Activity2
Activity3最上位画面 異常発生
Activity1
Activity2
Activity3
何もしないと最上画面のみ終了
Activity1
Activity2
Activity3
異常時に全画面終了さ
せたい!
Androidアプリ技術
質問事例
3/3
【付録1】Android 開発エンジニア育成ソリューション
複数 Activity が積まれた状態で一度にアプリを終了させる方法
p30p30株式会社豆蔵
[概要]
Androidのプラットフォームが管理する日本語フォントは1つのみ存在する。
かつ、フォント・ファイル名は固定である。
[質問]
・HTML/CSS 文で指定した複数フォントを使用するためには?
例)HTML文の場合 <font face=“XXX”> でフォントを指定できる
・フォント・ファイル名はライセンス上変更できない
それでも上記を満たす(HTMLで指定してフォントを使用する)方法は?
Androidプラットフォーム技術
質問事例
1/3
HTML で複数の指定したフォントでブラウジングさせる方法
【付録1】Android 開発エンジニア育成ソリューション
p31p31株式会社豆蔵
[概要]
Android のプラットフォームは
16bitカラーで動作することを前提としている。
また、24bitカラー化することで、描画速度が
1/10 に低下した。
[質問]
・Android プラットフォームを
24bitカラーで描画させるには?
・24bitカラー化した
Android で描画速度を改善させるためには?
Android を
24bitカラー化に対応させる方法
Androidプラットフォーム技術
質問事例
2/3
【付録1】Android 開発エンジニア育成ソリューション
p32p32株式会社豆蔵
[概要]
独自の共有 jar ライブラリを追加し、Android で使用させる。
Android は独自の共有 jar ライブラリの追加にも権限を持たせている。
また、Eclipse から共有 jar ライブラリを使用してコンパイルさせる必要がある。
[質問]
・共有
jar ライブラリを
Android で参照させる方法は?
・共有
jar ライブラリを含めた独自
SDK の作成方法は?
独自の共有 jar ライブラリを追加し、Android で使用する方法
Androidプラットフォーム技術
質問事例
3/3
【付録1】Android 開発エンジニア育成ソリューション
p33p33株式会社豆蔵
【付録2】Android 開発エンジニア育成ソリューション
OFF-JTで提供可能なコンテンツの概要
(一例)講座名 内容 所要日数
基礎から学ぶUMLとJava プログラミング
オブジェクト指向プログラミングを理解するために必要となるオブジェクト指向
の概念やUML・Javaの基礎技術を身につける事により、Javaプログラマ(入門
レベル)の育成を目的としています。
2日
JavaとUMLによる実践プログラ
ミング基礎1
オブジェクト指向プログラミングの基礎(インスタンスの生成と利用、パッケージ
とアクセス制御、継承、例外処理など)をJavaで実現する方法を学び、そのメ
リットを理解します。さらに実践で活かすスキルを身につけるために、UMLで設
計されたモデルからJavaプログラムを実装する演習を行います。
2日
JavaとUMLによる実践プログラ
ミング基礎2
抽象化プログラミングの基本的な考え方とUML(クラス図)における表記法、お
よびJava言語による実装方法を学習します。また、Javaの標準APIの利用を
通して、抽象化プログラミングの効果を理解することができます。
2日
デザインパターン入門 【概要編】デザインパターンの概要を説明し、主に開発で用いられるデザインパ
ターンの解説・利用法を学ぶ事が出来ます。
【適用編】題材をベースに、課題、課題と解決するデザインパターン、適用時の
ポイントを学ぶ事ができます。
各1日
エンジニアリング基礎講座 オブジェクト指向や構造化設計といった道具を更に上のレベルで使いこなし、
エンジニアリング力をアップさせるために必要な基礎を習得します。例えば、3 ~5年間オブジェクト指向を使っているが、更にステップアップを目指したいと思
っている人、CMMを使って本当にエンジニアリング力をアップさせたいと考えて
いる人には最適なコースです。
1日
p34p34株式会社豆蔵
【付録2】Android 開発エンジニア育成ソリューション
OFF-JTで提供可能なコンテンツの概要
(一例)講座名 内容 所要日数
要求基礎講座 「要求」とそれに関係する概念を体系的に整理し、要求とは何か、要件とは何
か、また、ソフトウエア開発におけるそれらの役割について解説していきます。
また、要求や要件を他者に伝えたり、他者と共有する際のポイントや内容を確
認するためのポイントといった開発の現場で役立つノウハウや、ユースケース
や形式手法といった要求と関連の深い技術についても紹介していきます。
1日
ソフトウェア設計基礎講座 ソフトウエア設計とは何か、良いソフトウエア設計とはどういったことなのかを理
解するための講座です。本講座を受講することで、ソフトウエア設計の基本を
体系的に、かつ、設計手法に依存しない形で習得できます。
1日
Android アプリケーション開発
コース(初級編)
Androidのアプリケーション・フレームワークに対する理解の中でも特に抑えて
頂きたい「Activity」、「Service」、「AppWidgets」、「Intent」などアプリケー
ション実装の基盤となる要素を中心に学び、スマートフォン向けのAndroidア
プリケーション開発に必要とされるスキルの習得します。
2日
Android アプリケーション開発
コース(応用編)
アプリケーション・フレームワークに対する理解を深め、高度なアプリケーション
開発スキルの習得を目標としています。更にOpenGL、NDK、テスティング・フ
レームワークの利用方法、プラットフォーム開発に求められるシステム制御アプ
リケーションの作成方法なども習得することで、更に幅広い要求に応えられる
Androidアプリケーション開発エンジニアを目指します。
2日
Android ポーティングコース 実際のポーティング事例をもとに、ポーティングの際にAndroidに手を加えな
ければならないポイントを、手順にそって解説を行います。それにより、最小の
工数で効率よくAndroidをポーティングできるスキルの習得を目指します。
3日