Do You PHP はてな このページをアンテナに追加 RSSフィード Twitter

2011-06-01

[]Commons CodecのBase64クラス使うとCould not find methodが発生する

API Version 4(Android OS 1.6)ではBase64エンコード/デコードするクラスが用意されていないので、Apache CommonsCommons Codecを使ったところ、見事にハマったのでまとめときます。

現象

Commons CodecにあるBase64クラスを使ったコードをシミュレータ(Android OS 1.6)で実行すると、次のようなエラーが発生する。

ERROR/dalvikvm(574): Could not find method org.apache.commons.codec.binary.Base64.decodeBase64, referenced from method jp.xxxxxx.xxxxxx.xxxxxx

API Version 8(Android OS 2.2)上では、シミュレータ・実機とも問題なく動作する。

原因

android commons Could not find method」でググるといろいろと出てきますが、

I copied the java source code of Base64 to my project into the the namespace of org.apache.commons.codec.binary. The project compiled without any problem. However, at the runtime in Android simulator, I had the same error, java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String.

However, after I changed the namespace to com.apache.commons.codec.binary instead of org, the app runs like magic. I guess inside Android implementation, org.apache.commons.codec.binary is used and it doesn't allow you to use it in your code again.

eclipse - NoSuchMethodError using commonc codec in Android application - Stack Overflow

な辺りが起因してるのか、と。

対応

今回は別packageにBase64クラスを用意することで回避。元にしたJavaソースコードはググればいろいろ出てきます。

その他

API Version 8(Android OS 2.2)以降であればandroid.util.Base64クラスが用意されているので、この辺の問題は発生しないハズ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/shimooka/20110601/1306898692
リンク元