私はgradleでこの奇妙なエラーを受け取りました、助けてください!
/.../app/build/intermediates/res/debug/drawable-xxhdpi-v4/ic_launcher.png:
error: Duplicate file
/.../app/build/intermediates/res/debug/drawable-xxhdpi/ic_launcher.png:
Original is here. The version qualifier may be implied.
Error:Execution failed for task ':app:processDebugResources'.
com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:
Process 'command '/.../sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1
正常に動作する前に、クラスパスcom.Android.tools.build:gradle:1.2.2を配置したため、これによりエラーが発生しました
com.Android.tools.build:gradle:1.1.へのダウングレード
G +に関するXavier Durochetの説明 によると、それは使用するライブラリの1つが独自のic_launcher.png
を持っているためです-もちろんそうすべきではありません(詳細は下部にあります)。
ログに記載されている2つのアイコンは異なる可能性があります。1つはあなたのものであり、もう1つはおそらくライブラリから削除するのを忘れた汎用Androidアイコンです。
問題のある依存関係を確認するには、Ctrl + Shift + N
twice(非プロジェクトマッチングの場合)を押し、ic_launcher.png
を入力します(スクリーンショットの最後の行を参照)
問題を一時的に回避するには、-v4
修飾子を描画可能なリソースフォルダーに追加します(または理由がある場合はic_launcher.png
を*dpi-v4
に移動します)-クレジットto Xavier Durochet ソリューションの場合。また、アイコンの名前を別の名前に変更して、AndroidManifest.xml
に対応する変更を加えることもできます。
本当の問題は、問題のライブラリが役に立たないアイコンを持っていることです。独自のリソースを持っているライブラリ(ActionBarSherlockやGoogle独自のSupport v7ライブラリなど)は独特の命名を使用しますリソース名(abs_
、abc_
)との衝突を避けるためのスキーム。
ランチャーアイコンはライブラリに存在しないため、使用しているライブラリの作成者に、冗長なic_launcher.png
ファイルを削除するのを忘れたことを通知することをお勧めします。
言及する価値もあります、 Barry Carroll同じ議論 で非常に正確に記述されています、これは ' tは、リソースがライブラリ内のリソースと重複してはならないことを意味します。ライブラリのリソースを独自のものでオーバーライドするlegit理由は多数あります(たとえば、ライブラリが提供するアクティビティの外観を変更する)そして、gradleプラグインのリソースマージロジックは、意図的にこれを許可します。
この特定のケースでは、libがAndroid gradleプラグインバージョン(1.2.2より前)の背後にあるときに競合が発生し、その場合、リソースは2つの異なる*dpi
フォルダーになります-と-v4
修飾子なし;しかし、実際には同じリソース「バケット」にあるため、システムはそれらを重複していると見なします。
このグリッチは、無駄なic_launcher.png
オーバーライド(実際には、グリッチによる衝突)を引き起こしますが、この状況は他の種類のリソースにとって一般的に悪いことではありません。
つまりlibのリソースを意図的にオーバーライドしても、このグリッチによりエラーメッセージが表示される場合があります。今回はリソース名に実際の問題はありませんので、上記の一時的な解決策またはプラグインのバージョンを控えることが先です。
サードパーティのライブラリを使用しているときにも同じ問題が発生しました。( RomainPiel/Shimmer-Android Githubのライブラリ)
それを解決するために、ic_launcher.pngファイルをdrawableフォルダーからmipmapフォルダーに移動しました。そして問題は解決しました。
問題を見つける一般的な方法は次のとおりです。
走る
./ gradlew build --stacktrace --info
そして、あなたはエラーの詳細を見つけるでしょう。私は自分のエラーを見つけました:重複したクラスがトップレベルのエラーを引き起こし、重複したクラスを削除すると問題が解決します。
私にとっては、単純な「クリーンなプロジェクト」と「プロジェクトの再構築」がトリックをしました。
1.2.3にアップグレードしますが、gradleとbuildToolsVersionがプロジェクトと使用したaarで同一であることを確認してください。
Gradle/buildバージョンを制御できない外部ライブラリを使用する場合:著者に連絡するか、自分でソースを確認してください。一部のライブラリには、この競合を引き起こす未使用のランチャーアイコンがあります。このアイコンを削除すると、問題が解決します。同じ名前のソース(例:menu.xml)もまれにこの問題を引き起こす可能性があります。簡単な回避策は、リソースの名前を変更することです。
私の場合、strings.xmlファイルにアポストロフィを追加しました。このようなエラーがないかどうかを確認し、削除すると間違いなく役立ちます。 IDEがエラーを適切に表示できず、すべてのリソースが同期しなくなるのは面倒です。
私は質問で尋ねられたケースではないことを知っていますが、エラーはまったく同じです、すなわちGradleの実行が失敗します。
単にRename
Image
(Rightclick on the Image, Select Refactor and select Rename
)。 library
の1つでもsame name
でimage
を使用しているため、問題が発生したため、問題を解決します。
Ic_launcher.pngを別の名前に変更するだけです(例:ic_launcher.png)
私は同じ問題を抱えていて、次のことがうまくいきました:
tools:replace="Android:icon"
タグに<application>
を追加します最初のステップだけを試すことができますが、マニフェストファイルをマージする際にまだ問題がありました。このようにして、ライブラリで使用されているリソースをオーバーライドする必要があります。
私は、ファイル名拡張子の一貫性のない大文字化によってこの問題を引き起こすことができました。 1つのドロウアブルディレクトリに.jpgイメージがありましたが、別のドローアブルディレクトリにある同じファイル名の.JPGのイメージがありました。ファイル名とディレクトリは正しいものでしたが、拡張子は正しくありませんでした。
最新のgradleプラグインへの更新1.5.はこの問題を解決しました。ルートのbuild.gradle
ファイルの次のスクリプトを更新します
buildscript {
...
dependencies {
classpath 'com.Android.tools.build:gradle:1.5.0'
}
...
}
このリンクをたどってください ここ
または
このような変更を行います。
repositories {
maven {url "https://clojars.org/repo/"}
}
dependencies {
compile 'frankiesardo:icepick:{{latest-version}}'
**provided** 'frankiesardo:icepick-processor:{{latest-version}}'
}