# プロジェクト概要
スマートフォン向けのAndroid OS(Android 4.0~5.1)開発
## 業務内容
Android Media FrameworkのAudio開発
### 詳細内容
1. Android Frameworkの調査
AndroidのFrameworkはAndroidのコードネームが変わるたびに大幅な修正が施されます。
担当したバージョンは次の通りです。
- Ice Cream Sandwich (4.0)
- Jelly Bean (4.1, 4.2, 4.3)
- KitKat (4.4)
- Lollipop (5.0, 5.1)
AndroidのFramework(OS)内にメーカー独自の対応を入れているため,バージョンが上がるたびに,Android Framework(OS)内にどのような変更が施されたのかの把握と,メーカー独自の対応に関する影響の把握を行う必要があります。
そのため,Android Media FrameworkのAudio部分に関して調査を実施。
2. バージョンアップの都度メーカー独自の対応の適用
Androidのバージョンアップ毎に過去に施してきたメーカー独自の対応を適用していく必要があります。最新のAndroid OSでのAndroid Media Frameworkの調査結果に基づきそのまま適用できるものはそのまま適用し、設計から修正が必要なものは設計・実装・テストを行ってメーカー独自の対応の更新を実施。
3. Hi-Res Audio開発
メーカーよりHi-Res Audioの再生及び出力を行いたい旨の要望を受けて,そのための調査・設計・実装・テストを担当しました。
WAV,FLAC,Apple Lossless(ALAC)の非圧縮音声や可逆圧縮音声フォーマットに関してHi-Resの再生をサポート。
MP3やAAC等の非可逆圧縮音声はHi-Res相当に出力を行うアップコンバートをサポート。
開発期間は1年ほどとなります。
開発ではまず,Android Media Frameworkを詳細に調査し,メーカー側に説明するための資料を纏め。どのように変更すればHi-Res Audioの再生が可能なのかの設計提案を行い,設計に沿って実装を行いました。
また,調査してもわからない個所などはチップメーカー(Qualcomm)へ問い合わせながら作業を進めていきました。
4. Auto Testの追加
Android Media Frameworkのテストを行うテストモジュールが存在しますが,それではメーカー独自の対応に関するテストを行えません。
メーカー独自の対応もサポートしたテストモジュール(InstrumentationTest)の開発を行いました。
ALACのテストや通話中の音楽再生等特殊なケースの自動化にも対応。
### 問題点
1. 長時間労働
Android Media Frameworkのソースコードはソースコードのみで30M~40Mの巨大なシステムであり,Android AS-ISではHi-Res Audioの再生はサポートされていない,また誰も開発したことのない機能の開発のため有識者も存在しないため開発は困難で長時間労働(最大で月300時間以上の労働)であった。
Android Media Frameworkの把握(Android OSのVersionが上がるたびに実施)では再生ボタン押下~Audioデータのデコードまで,デコード後~リサンプリング、エフェクト加工処理まで,その後の音を出すまでの処理とある程度処理範囲を分けチーム内で担当者を割り当てて調査しチーム内で教え合う事で調査時間がなるべく少なくなるように対応。
各修正パッチの動作確認には最新環境での動作確認が必須となるが,Androidのソースコード取得には1時間程度かかりOSビルドには2~3時間必要となる。出社してからこのような作業を行っていては時間がかかるため,動作確認が必要な時は午前5時頃からソースコードを取得しビルドを自動で行うようにしておき,出社時にすぐに確認が行えるような環境を整えて作業時間が減るように対応。
2. 想定はしていたが動かしてみないとわからない不具合の対応
Hi-Res Audioの再生をしながらの通話やHi-Res Audioの再生をしながらのスピーカーでアラーム再生などで音が出なかったり,Hi-Res Audioの再生が普通の再生に切り替わってしまったりと問題が多発して長時間労働の一つの要因にもなった。
設計やソースコードの見直しの徹底及びチップメーカー(Qualcomm)に各問題点をどうすれば解決できるかアドバイスを求めたりして解決を図った。
### プロジェクト人数・役割
- プロジェクト人数
- プロパーマネージャー1名
- 協力会社エンジニア3名
- 役割
- エンジニア
### 環境
- 開発環境
- Android OS(Android 4.0~5.1)
- Java
- C++
- C
- その他
- Git(Gerrit)
- OpenGrok