11

Android ライブラリ プロジェクトを含む IntelliJ 内に次のディレクトリ構造があります。

java/com/example/base/AndroidManifest.xml
java/com/example/base/assets # contains Android assets
java/com/example/base/res    # contains Android resources
java/com/example/base/Base.java
java/com/example/base/base.iml

には次のbase.imlものが含まれます。

<content url="file://$MODULE_DIR$">
  <sourceFolder url="file://$MODULE_DIR$"
                isTestSource="false"
                packagePrefix="com.example.base" />
  <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" />
  <excludeFolder url="file://$MODULE_DIR$/res" />
</content>

ライブラリ プロジェクトに依存する Android アプリケーション プロジェクトをビルドすると、次のエラーが発生します。

[myapp] java.util.zip.ZipException: duplicate entry: res/drawable/image_shadow.9.png

[プロジェクト構造] ダイアログで、プロジェクト コンパイラの出力outを、プロジェクトのルートの下のディレクトリになるように構成しました。out/production/base/com/example/base/res/Android プロジェクトをビルドしようとすると、Android リソースのコピーがフォルダーの下にあることに気付きました。

私の仮説は、Android リソースが「通常の」Java リソース (を使用してロードするタイプ) のように扱われているというClass.getResource()ことです。out/productionduplicate entry

これが事実であるかどうか、何か考えはありますか?その場合、これらのファイルがコピーされないようにするにはどうすればよいですか? Eclipse では、ファイル内の<classpathentry>要素には、この種の動作を防ぐために glob パターンを取る属性があります。.classpathexcluding

4

2 に答える 2

1

mainディレクトリが「ソース」としてマークされていたため、同様の問題が発生しました。

したがって、プロジェクト構造では、Android ファセットの「構造」タブの下に次のものがありました。

... Resources directory: .../src/main/res ...

モジュールの通常の「ソース」タブでは、そのmain下のディレクトリsrcが「ソース」としてマークされていました。

[ソース] タブを次のようにして修正しました。

- src (unmarked) - main (unmarked) - java (Sources) - res (Resources)

したがって、エラーは、リソースがソースとリソースの両方としてzipにパックされているため、重複しているためだと思います。

于 2016-05-11T14:31:16.587 に答える