9/08/2014

[note] ADTの動作不具合修正

久しぶりに開発環境周りでの不具合対処。結果から言えば解決出来たんですが、もう大変でした。その事の次第は次の通り。

Android用の開発環境であるところのAndroid Developer Tools(ADT)について、その最新版(20140702)が落ちまくりで使い物にならず、やむなく旧版を使い続けていたんですが、こちらもライブラリ類のアップデートに伴ってExportとかでエラーを吐くようになってしまい、修正も上手くいかなかったので仕方なく最新版に移行する事にしたのです。なお環境はUbuntu 14.04LTSの64bit版、IDEは勿論同梱のEclipseです。ADTのパッケージ名はadt-bundle-linux-x86_64-20140702。

しかしこの20140702版、とにかく落ちる。何をしても落ちるし、何もしてなくても内部で自動処理の類が動くと勝手に即落ち。話になりません。で、終了時にコンソールに吐くメッセージを眺めてみると、

Gtk-Message: Failed to load module "canberra-gtk-module"

とか言ってるんですね。gtkのモジュールが無いと。しかしチェックしてみると導入済みです。どういう事なんだろう、と訝しみながら調べてみると、どうもこのADT、基本的に32bitモジュールで動いてるんだとか。そういえばSDKの導入時に色々やったな、と思い出しつつ、i386版を入れます。

> sudo apt-get install libcanberra-gtk-module:i386

これは一応正解だったようで、とりあえず即落ちはしなくなりました。AVDマネージャがエラーを出したりはするものの落ちはせず、概ね編集作業はそこそこ出来る感じなので、とりあえずそのまま作業していると、今度はAndroid SDK Content Loaderが下記エラー。

parseSdkContent failed
Could not initialize class android.graphics.Typeface

一難去ってまた一難。まあそんなもんですよね、とため息を付きつつまた調べると、アップデートに絡んで設定に不整合が起こっているらしく、テンポラリを削除して初期化すればいいらしい、との事で、下記。一時フォルダを丸ごと消去します。

> rm -rf ~/.android

これまた正解のようで、当該エラーは出なくなります。が、続いて下記のような別のエラーで落ちる。

Gtk-WARNING **: Unable to loction theme engine in module_path:"murrine"

これも最初のと同様で32bit版ライブラリが無い事によるもの、と言う訳で同じくi386オプションを付けてインストール。

> sudo apt-get install gtk2-engines-murrine:i386

もうそろそろ打ち止めにならないかな、と祈りつつ恐る恐る作業をしてみると、大半の操作では落ちなくなりました。少し気分が上向きます。しかし安心するのはまだ早い。特定のコードを入力しようとすると落ちる。再現性がありそうな感じだったのでよくよく見てみると、メソッドの入力候補のドロップタウンリストが表示された所で落ちていました。メッセージは下記。

 Gtk-Message: Failed to load module "overlay-scrollbar"

 はいはい32bit版、というわけで下記実行。

 > sudo apt-get install libgtkmm-2.4-1c2:i386

が、今度はこれでも治りません。色々調べてみると、overlay-scrollbarコンポーネントには割と前から知られているライブラリ内部の不具合があるそうで、この場合は上手くリンク出来ないんだそうです。なので入れても無意味なのだと。これは困りました。色々と代わりのモジュールセットを入れてみましたがやはり改善せず。

これはギブアップか、と諦めかけたわけですが、我慢強く調査を続けていると、これに関連するworkaroundに、ADT同梱のEclipseには描画エンジンに使うブラウザの設定に不整合があり、これを修正するとoverlay-scrollbarのエラーも回避出来るよ、という話が目に留まります。文脈的にはUbuntuのバージョンアップに伴って発生したエラーの話で、本件とはあまり関係なさそうにも見えたし、まさかそんな事で、と眉唾ながら、駄目元で試してみました。ADT内、eclipseフォルダ中の設定ファイルeclipse.iniに下記を追記します。

-Dorg.eclipse.swt.browser.DefaultType=mozilla

するとこれがまさかの正解。同様のコーディングを行っても、正常に候補が表示されるだけで落ちなくなりました。いや、やってみるもんですね。

さらに嬉しい事に、問題はこれで打ち止め。その後は普段行う操作・処理については全て問題なし。落ちません。以前のバージョンの環境と同じレベルまで辿り着けたわけです。途中ではもうこれ泥沼のギブアップコースかと思いましたから、殆ど晴天の霹靂です。いや逆か。何にせよめでたしめでたし。というわけで、開発途中のプロジェクトも程なく無事作成完了する事が出来たのでした。

しかし疲れました。Androidの開発環境はコロコロとしかもドラスティックに変わるし、その割にドキュメント類は全然無いから、不具合に遭ったが最後、抜け出すのが大変です。元々OS自体からしてバンバン仕様が変わるのだから、それに伴って開発環境も大きく変わるのも仕方ないと言えばそうなんでしょう。加えてLinuxの環境もやはり激しく変化するし、その組み合わせを網羅して対応するのが困難なのも分かります。けれども、だからと言ってこう、Ubuntuの最新64bit、それもLTS版なんてポピュラーなディストリですらこう頻繁に動作しなくなるというのは、いくら何でも適当すぎじゃないでしょうか。管理しきれないのなら、利用する外部コンポーネントも安定したものに極力絞ればいいだけの話でしょう。なのにむしろ不安定度は上がる一方ってどういうことなの、と。

Googleがそういう勝手な会社である事は最初から分かり切った話なのだし言っても無駄な事も分かっていますが、それでも文句の一つ二つも言いたくなって当然だと思うのです。ほんと勘弁して欲しいわけですが、かと言ってAppleはAppleでもっと酷かったりするし、どうにかならないのでしょうかこの業界。Microsoftレベルとは言いませんが、プラットフォームのシェアを保有する事業者の責務として、最低限の所は弁えて欲しい、と心から願います。そうであればそもそも今回のようなworkaroundはする必要も無かった筈なのですから。
 
と一頻り愚痴ったところで、今回はこれでおしまい。