スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android 作成したAPKファイルで自クラスがNoClassDefFoundError


         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|     『おれは生成したAPKファイルを端末でテストしようとしたら
        i|:!ヾ、_ノ/ u {:}//ヘ      自分のクラスがないってエラーがでる』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    催眠術だとか超スピードだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ



ってポルナレル状態になってしまったのだが・・・


作成したアプリをリリースするためにEclipseからAPKファイルをエクスポートし、
端末へ手動インストール、またはDevelopコンソールからのベータ版としてインストールしてテストしようと思ったのだが、まず最初にActivityの実行中にエラーが発生して異常終了する。

エラーは「NoClassDefFoundError

AndroidでNoClassDefFoundErrorをググるとよく出てくるのが
「外部JAR」が取り込まれていないという問題。
これについては、プロジェクトのプロパティから対象のJarにエクスポートでチェックすれば解決できるのだが、私の問題はこれではなかった。

外部Jarではなく自分で作成したクラスがNoClassDefFoundErrorとなっているのだ。

ちなみにプロジェクト構成は
・プロジェクト
 →src
  →hoge.hoge
   →log.class
 →Android4.1

ここでいう共通ログクラスとして作成したlogクラスがNoClassDefFoundErrorになってしまっている。


でさらに困ってしまったのが
1.Eclipseから直接デバッグ実行したときにはエラーが発生しない
2.エクスポートしたAPKファイルをインストールするとエラーが発生する

という本当に不思議な状態になってしまった。

つまりはAPKを作成する際に、必要なクラスがすべて含まれていないみたいなのだ。

ちなみに環境としては
OS Win7
Eclipse4.2
ADT 22
Java 1.6
プロジェクトの対象SDKは4.1

最初はADTがおかしいのかもと思い、再インストール、Eclipse再インストールなどいろいろやったが改善されず。

それに何回もAPKファイルを作成してわかったことなのだが、その都度APKファイルの容量が異なるのだ。
100k程度の差が現れる。
たぶん必要なclassファイルが含まれていないからなのだろう。

これには困った・・・ デバッグ実行では問題なく動作するのだから・・・



■ファイル共有ソフト(DropBox、SkyDrive、GoogleDrive、しゅがーしんく(だっけ?))を利用する場合はご注意を

なぜここに行きついたのかよくわからなかったが、原因はこのファイル共有ソフトだった。

数か月前から複数の端末(家や会社など)でソースファイル(workspace自体)を共有したいと思い、紆余曲折があってSkyDriveで開発関連のソースやアプリケーションなど共有することにした。
使い方としては、ローカルのEclipseからSkyDriveにあるプロジェクトを参照して開発する形となっている。


原因はというと、たぶんAPKに必要なclassファイルをこの共有ソフト側が掴んでしまったことで、Eclipse側(ADT側)でAPKファイルを作成するときに使用できなかったのだと思う。
※エクスポートするタイミングでコンパイルが(たぶん)走るため、classが更新されて、それをファイル共有ソフトが検知してサーバへアップするために掴んでると思われる。たぶん。


そのため、一旦SkyDriveを終了させてからAPKのエクスポートをしたところ、やっと正しくAPKを作成することができた。
※SkyDriveは設定で「複数のファイルを纏めてアップ・・・」の設定があるのだが、これをチェックしている、理由はわからんが何かファイルにやっているのだろうか。SkyDriveを終了させてもAPKが正しく作成されない場合がある。

私のようにソースファイルをSkyDriveで共有する場合には
1.設定「複数のファイルを纏めてアップ・・・」のチェックを外す
2.APKファイルを作成するときには、SkyDriveを終了させる
3.それでもダメな場合はPCの再起動後、APKを作成
スポンサーサイト

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。