[解決済み] AndroidでDigestUtilsを使用してもメソッドが見つからない
質問
私は、ライブラリ ダイジェストユーティリティ を Android 2.3.1 で JDK 1.6 を使用して使用しようとしていますが、アプリを実行すると次のエラーが発生します。
Could not find method org.apache.commons.codec.binary.Hex.encodeHexString, referenced from method org.apache.commons.codec.digest.DigestUtils.shaHex
ここにスタックトレースがあります。
02-03 10:25:45.153: I/dalvikvm(1230): Could not find method org.apache.commons.codec.binary.Hex.encodeHexString, referenced from method org.apache.commons.codec.digest.DigestUtils.shaHex
02-03 10:25:45.153: W/dalvikvm(1230): VFY: unable to resolve static method 329: Lorg/apache/commons/codec/binary/Hex;.encodeHexString ([B)Ljava/lang/String;
02-03 10:25:45.153: D/dalvikvm(1230): VFY: replacing opcode 0x71 at 0x0004
02-03 10:25:45.153: D/dalvikvm(1230): VFY: dead code 0x0007-0008 in Lorg/apache/commons/codec/digest/DigestUtils;.shaHex ([B)Ljava/lang/String;
02-03 10:25:45.163: D/AndroidRuntime(1230): Shutting down VM
02-03 10:25:45.163: W/dalvikvm(1230): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-03 10:25:45.173: E/AndroidRuntime(1230): FATAL EXCEPTION: main
02-03 10:25:45.173: E/AndroidRuntime(1230): java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Hex.encodeHexString
02-03 10:25:45.173: E/AndroidRuntime(1230): at org.apache.commons.codec.digest.DigestUtils.md5Hex(DigestUtils.java:226)
02-03 10:25:45.173: E/AndroidRuntime(1230): at com.caumons.trainingdininghall.ConnectionProfileActivity.onCreate(ConnectionProfileActivity.java:20)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.os.Looper.loop(Looper.java:123)
02-03 10:25:45.173: E/AndroidRuntime(1230): at android.app.ActivityThread.main(ActivityThread.java:3647)
02-03 10:25:45.173: E/AndroidRuntime(1230): at java.lang.reflect.Method.invokeNative(Native Method)
02-03 10:25:45.173: E/AndroidRuntime(1230): at java.lang.reflect.Method.invoke(Method.java:507)
02-03 10:25:45.173: E/AndroidRuntime(1230): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-03 10:25:45.173: E/AndroidRuntime(1230): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-03 10:25:45.173: E/AndroidRuntime(1230): at dalvik.system.NativeStart.main(Native Method)
例外を発生させるコードの行は
String hash = DigestUtils.shaHex("textToHash");
同じコードをAndroid以外のJavaクラスで実行したところ、うまくいきました。したがって、Android で作業しているときになぜ動作しないのかわかりません... アプリ内の新しい libs/ フォルダにライブラリを配置し、それを使用するように BuildPath を更新しました。sha1の代わりにmd5を使用しようとすると、同じ例外が発生します。どんなヘルプでも結構です。ありがとうございます。
UPDATEです。
これは非常に活発な質問なので、私は @DA25 の解決策が簡単であり、多くのアップヴォートがそれが機能することを証明するため、受け入れた回答を変更しました。
どのように解決するのですか?
Android アプリで DigestUtils を使用しようとして、同じ問題に遭遇しました。これは、私が検索して見つけた最高の答えでしたが、名前空間を変更して .jar ファイルを再構築することに抵抗がありました。この問題に時間を費やした後、私の場合、より簡単に問題を解決する方法を見つけました。私のコードに対する問題文は
String s = DigestUtils.md5Hex(data);
この文を以下のように置き換えると、動作します。
String s = new String(Hex.encodeHex(DigestUtils.md5(data)));
同様に、shaHexのexampleについても、以下のように変更することができます。
String hash = new String(Hex.encodeHex(DigestUtils.sha("textToHash")));
AndroidにはencodeHexString()はありませんが、encodeHex()はあるので、これは動作します。これが同じ問題に遭遇した他の人の助けになることを願っています。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] Travis.yml ./gradlew : パーミッションが拒否されました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaでMD5ハッシュを生成するにはどうすればよいですか?
-
[解決済み] Android Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] AndroidにおけるMD5ハッシュ