AndroidのEclipse開発で陥った不具合経験のまとめ

開発で陥った不具合

Eclipseの環境が2か所にあり、日によってどちらかに移動して開発作業をした時の状況を示す。
その際に、Eclipseワークスペース内の開発中プロジェクトを「エクスポート」し、 移動先で「インポート」する作業を繰り返した。
一方の環境は32ビット版で、もう一方が64ビット版のEclipseの環境を使用しており、 初期は問題なくエクスポート・インポートできていたが、「Android SDK Manager」のアップロード後に、一方で動かなくなった。
詳細原因不明のままEclipseの「Build Path」の変更などでなんとか対処できることもあったが、対処に時間がかかり、 色々操作している過程で、プロジェクトのファイル「R.java」が消える現象も起きた。
(R.javaは、プロジェクトメニューの「クリーン」で生成できるが、この時 .xmlファイルに不具合があると「R.java」は消滅する。)
このような模索と並行して別途開発環境のインストールする作業を行うことが多く、 その新規環境でインポートした方が速く対処できた。
正確な原因は分からないが、経験的に次のことが予想される。 現状の開発環境の使い方
当初、Eclipse ADT Bundle版を使って、それが動作しなくなっては再インストールを行った経緯により、 結果的に複数のアンドロイドsdkが存在してしまった。
Eclipseのwindowsの設定メニューにandroidのsdk位置を指定できて、便利に感じることもあったが、 開発マシンが変わると参照できなくなり注意が必要である。

また、試作で使ったプロジェクトを削除する時、 設定によって参照するsdk内のライブライ(.jarのファイル)も削除が可能で、それによる不具合が拍車をかけた。

最終的な結論として、アンドロイド「sdk」フォルダの存在を一つにし、 その位置は複数のマシンで絶対パスが同じになるように配置を注意する。
複数開発環境のバージョンの違いやツールの違う(Eclipseやstudio)場合でも、一つの共通「sdk」フォルダ使う。
なお仮想デバイスは、アンドロイド「sdk」フォルダ内の「AVD Manager.exe」を使って開発者が作成するが、 この作成した仮想デバイスは、Eclipseやstudioなど、複数の開発ツールを使っても、 その開発者のユーザディレクトリ内の指定位置が共通で使われ、位置の違いによる不具合は起きにくいと考えられる。
なおWindows7の場合であれば、「C:\Users\(ユーザー名)\.android\avd」の位置に仮想デバイスが作られる。
この位置は環境変数「ANDROID_SDK_HOME」で変更できる。

過去のプロジェクトのインポートのエラー対策例

以下はfileview2の名前のプロジェクトを 「Eclipse IDE for Android Developers 23.0.2.1259578」の環境で作成し、 それからエクスポートしたフォルダを 「Eclipse Java EE IDE for Web Developers.Version: Luna Service Release 1 (4.4.1)Build id: 20140918-0600」の 環境でインポートした場合で生じた体験です。
  1. マニフェストの android:targetSdkVersion="17" と、 プロジェクトの設定で R:/android-sdk-windows/sources/android-20 が合わなかった。
    マニフェストの android:targetSdkVersion="20" に変更した。

  2. プロジェクトsrc内のimport android.support.v7.app.ActionBarActivity;でエラーになっていた。

    エラーの理由は、「Build Path」パス設定android.support.v7.appcompat.jarがないためと判断でき、 次の指定でパスを追加した。

    追加後の「ビルド・パス」内容を、以下に示す。

    上記のリブライ設定が在っても、以下のチェックが外れているとエラーが出ます。

    また「設定」のプロパティで、ライブラリのチェックがないとエラーの指摘が消えませんでした。

    上記の設定で、エラーを指摘する赤マークが無くなった。
  3. しかしこんどは、プロジェクトのビルドで、以下の指摘が出た。
    [2015-02-01 13:59:32 - fileviewer2] Found 2 versions of android-support-v4.jar in the dependency list,
    [2015-02-01 13:59:32 - fileviewer2] but not all the versions are identical (check is based on SHA-1 only at this time).
    [2015-02-01 13:59:32 - fileviewer2] All versions of the libraries must be the same at this time.
    [2015-02-01 13:59:32 - fileviewer2] Versions found are:
    [2015-02-01 13:59:32 - fileviewer2] パス: R:\workspace\fileviewer2\libs\android-support-v4.jar
    [2015-02-01 13:59:32 - fileviewer2] 	長さ: 758727
    [2015-02-01 13:59:32 - fileviewer2] 	SHA-1: efec67655f6db90757faa37201efcee2a9ec3507
    [2015-02-01 13:59:32 - fileviewer2] パス: R:\workspace\appcompat_v7\libs\android-support-v4.jar
    [2015-02-01 13:59:32 - fileviewer2] 	長さ: 995624
    [2015-02-01 13:59:32 - fileviewer2] 	SHA-1: 3e4e879d0b3dc11f2feb3f55e77e3b5bd82c4a28
    [2015-02-01 13:59:32 - fileviewer2] Jar mismatch! Fix your dependencie
    これはlibフォルダ内の次ライブラリが古く、バージョンの違いによるもの考えら、 そのファオルダ内のandroid-support-v4.jarを、新しいSDK内ファイルで上書きした。
    これでビルドのエラーが無くなったが、しかし.apkのパッケージファイルはまだ生成できない。
    この時、R.javaの生成で「プロジェクト」の「クリーン」を選択する必要があった。
    しかし、R.javaのクラスフィールド変数にfinal が付かない不具合があり、やはり.apkのパッケージファイルは生成できなかった。
  4. その後で試行錯誤で次のように、Android 5.0.1に設定して、ライブラリのチェックを外すことで、R.javaが正常に生成され、 fileview2.apkのパッケージファイルも出来て動くようになった。

  5. 最終的に動作した時の「ビルドパス」の設定は以下のように、4つjarファイルが参照必要となる。(ActionBarActivity継承作品時)