スキップしてメイン コンテンツに移動

Androidプロジェクトの実行時にDx warningやConversion to Dalvik format failedと言われてしまう件

まだちょっとよく分かってないのですが、メモを残しておきます。

AndroidプロジェクトのlibディレクトリにいくつかJarファイルを追加して、実行しようとするとEclipseのコンソールに以下のようなメッセージが表示されてしまう現象なのですが、
[2013-10-09 21:59:20 - HogePj] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.htmlparser.beans.BeanyBaby$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
同じようなエラーが、
  • org.apache.commons.httpclient
  • org.apache.commons.logging
についても表示されています。あと、コンソールの最後に
[2013-10-09 22:06:17 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/htmlparser/util/SimpleNodeIterator;
[2013-10-09 22:06:17 - HogePj] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/htmlparser/util/SimpleNodeIterator;

と表示されていました。検索してみると、プロジェクトのクリーンがうまくいってない感じの記事がヒットします。
・"Conversion to Dalvik format failed with error 1" の解決策 - 某ソフト作者の開発日記
http://d.hatena.ne.jp/halts/20120516/1337170409
こちらのやり方を試してみましたが、ダメでした。
・java - Android - Apache commons libraries & Exchange Web Service Managed API - Stack Overflow
http://stackoverflow.com/questions/8524208/android-apache-commons-libraries-exchange-web-service-managed-api
Ansdroid already contains commons-http (not sure which version is used, but it is 4 or better), so you have to ensure that your build process does not pack aleready contained jars into apk.
こちらに、commons-httpは既に入ってるという風に書かれているのをヒントに、以下の対応を行いました。
  • htmlparser.jarとhtmllexer.jar → libsから別ディレクトリへ移動させ、ビルドパスへ外部JARとして適用
  • commons-httpclient.jar → libsから削除
  • commons-logging.jar → libsから削除
この対応で、プロジェクトをクリーンしてビルドすると警告等出なくなり、起動できました(゜∀。)

コメント

このブログの人気の投稿

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

Eclipseで一通り基本的なGitを使ってみる

備忘録的にまとめておきたいと思います。おかしな点があればご指摘いただければ幸いです。 目次 環境 プロジェクト作成~初コミットまで コミットの履歴&差分を見る 元に戻す ブランチについて ブランチを作成してみる ブランチを統合するには マージする Rebaseする ローカルリポジトリからプロジェクトを取り込む コミットしたメッセージの修正 環境 Eclipse IDE for Java Developers:Juno Service Release 1 Git:上記Eclipseのプリインストール版