2

私はこの問題に必死になっています:.jarビルドパスに追加したものを1つ追加して、Androidアプリケーションをエクスポート/実行したいと思います。私はそれを正しく追加したと確信しています。他に5つの.jarが含まれており、それらはすべて正常に機能します。

この特別なもので、私は言及されたエラーを受け取ります。私はすでにこの質問で見つけることができるすべてを試しました: 外​​部JARで「Dalvik形式への変換がエラー1で失敗しました」

そして他のいくつかのリンクはグーグルが吐き出しました。主な問題は、追加したメッセージが何を伝えたいのかを実際には理解していないことです。すべてのjarを「通常の」javaprojectに追加すると、完全に正常に実行されるからです...

Android 4.0.3での開発、

プロガード4.8、

adt 16.0.1.v201112150204-238534、

日食3.7.1.r37

私を助けてください

[2012-07-18 10:45:48 --myapp] Dx警告:関連付けられたEnclosingMethod属性が付属していない匿名内部クラス(iaik.xml.crypto.XSecProvider $ 1)のInnerClasses属性を無視します。このクラスは、おそらく最新の.classファイル形式を対象としないコンパイラによって生成されました。推奨される解決策は、最新のコンパイラを使用し、「-target」タイプのオプションを指定せずに、ソースからクラスを再コンパイルすることです。この警告を無視した結果、このクラスに対するリフレクティブ操作は、それが内部クラスではないことを誤って示します。

.....。

[2012-07-18 10:45:48 --myapp] Dx警告:関連付けられたEnclosingMethod属性が付属していない匿名内部クラス(iaik.xml.crypto.XSecProvider $ 2)のInnerClasses属性を無視します。このクラスは、おそらく最新の.classファイル形式を対象としないコンパイラによって生成されました。推奨される解決策は、最新のコンパイラを使用し、「-target」タイプのオプションを指定せずに、ソースからクラスを再コンパイルすることです。この警告を無視した結果、このクラスに対するリフレクティブ操作は、それが内部クラスではないことを誤って示します。

コアライブラリを構築していない場合のコアクラス(java。*またはjavax。*)の不適切な使用または誤った使用。

これは多くの場合、IDE(Eclipseなど)を使用しているときに、アプリケーションのプロジェクトにコアライブラリファイルが誤って含まれていることが原因です。コアクラスを意図的に定義していないことが確実な場合は、これが何が起こっているのかを説明している可能性が最も高いです。

ただし、実際にはコア名前空間でクラスを定義しようとしている可能性があります。そのソースは、たとえばAndroid以外の仮想マシンプロジェクトから取得した可能性があります。これは間違いなく機能しません。少なくとも、アプリとプラットフォームの将来のバージョンとの互換性を危険にさらします。また、合法性が疑わしいこともよくあります。

アプリケーションのコンパイルではなく、完全な仮想マシンディストリビューションの作成の一部としてのみ適切なコアライブラリを実際に構築する場合は、「-core-library」オプションを使用してこのエラーメッセージを抑制します。

先に進んで「--core-library」を使用しているが、実際にアプリケーションをビルドしている場合は、ある時点でアプリケーションのビルドまたは実行に失敗することに注意してください。たとえば、オペレーティングシステムをアップグレードすると、アプリケーションが機能しなくなることに気付いた怒っている顧客に備えてください。あなたはこの問題のせいになります。

コアパッケージに含まれているコードを合法的に使用している場合、最も安全な代替手段は、そのコードを再パッケージ化することです。つまり、問題のクラスを独自のパッケージ名前空間に移動します。これは、それらがコアシステムクラスと競合することは決してないことを意味します。JarJarは、この取り組みに役立つ可能性のあるツールです。あなたがこれを行うことができないことがわかった場合、それはあなたが進んでいる道が最終的に痛み、苦しみ、悲しみ、そして嘆きにつながることを示しています。

[2012-07-18 10:45:48 --myapp]Dx1エラー。中絶

[2012-07-18 10:45:48--myapp]Dalvik形式への変換がエラー1で失敗しました

これが私のプロジェクトがエクスプローラーでどのように見えるかです: http://s14.directupload.net/images/120718/zzy6mmym.jpg

4

6 に答える 6

5

問題は、含めるjarのクラスがjava。*またはjavax。*名前空間にあることです。最後の大きなエラーメッセージで述べたように、dxはこれを許可しません。

これらのクラスが実際に必要な場合は、jarjarツールなどを使用して、それらを別のパッケージに移動する必要があります。そうでなければ、あなたはそれらを瓶から取り除く必要があるでしょう-すべてがdxされる前にそれらを取り除くためにプロガードを持つことが可能かもしれません、私はよくわかりません。

于 2012-07-18T17:44:31.727 に答える
3

同じ問題に直面しましたが、プライベートライブラリを明示的にエクスポートすることで最終的に解決しました。

例:プロジェクト>>プロパティ>>Javaビルドパス>>ライブラリ>>外部JARの追加。

注:libsフォルダーからすべてのプライベートライブラリを削除しました。私はそれが正しくないことを知っていますが、それは私のために働きました。

ありがとう、アニル

于 2013-11-17T07:56:11.777 に答える
2

次のようにします:

project
  > properties
    > java build path
      > libraries
        > remove all including android jars

次に、プロジェクトブラウザに移動し、作業中のプロジェクトを右クリックして、

android tools
  > fix project properties.

クリーンアップしてからビルドします。

Eclipseを再起動するだけで、エラーは発生しなくなります

于 2013-12-05T07:11:59.413 に答える
1

Win7で作業している場合は、次の行を変更してください。

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*     

これにproguard.batファイルで:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9     

proguard.batにあります:

[AndroidSDKインストールディレクトリ]\tools \ proguard \ bin \ proguard.bat

編集
これらの組み合わせがお役に立てば幸いです:
1-libraries projectsプロジェクトから削除してみてください。
2-プロジェクトを(アーカイブファイルとして)エクスポートし、プロジェクトとそのソースをワークスペースから削除してから、再度インポートしてみてください。
3-パスからjarを削除し、clean-buildを実行してから、プロジェクトに再度追加してみてください。

于 2012-07-18T09:30:10.313 に答える
1

自分の難読化されたlibjarを使用したときに同じエラーが発生しました。

私のログ:

警告:関連付けられたEnclosingMethod属性が付属していない匿名内部クラスのInnerClasses属性を無視します。このクラスは、モーデン.classファイル形式をターゲットにしていないコンパイラによって誇らしげにされた可能性があります。

そして、このように解決しました。jarを難読化する前に、proguard.cfg(または最新のandroid adtバージョンではproguard-project.txt)に「-keepattributesEnclosingMethod」を追加しました。

于 2013-03-27T03:33:48.633 に答える
0

hasanghaforianに同意します。最も簡単な解決策は、ライブラリプロジェクトを削除することです。プロジェクト->プロパティ->Javaビルドパスを右クリックし、ライブラリプロジェクトを削除します

于 2012-07-18T10:00:41.413 に答える