gradle在哪里存储ANDROID项目的所有编译类?

问题描述 投票:4回答:2

从eclipse迁移到Android Studio。这是AS的构建目录结构

enter image description here

问题1. gradle在哪里放置所有已编译的.class文件?它是projectRoot/build/intermediates/classes目录吗?

这个问题的目的是在构建时生成Java类(例如:CustomBuildInfo.java)并且需要添加到编译的目录中,以便其他src文件可以使用它并在APK中正确打包。

注意:以前在Eclipse中,生成的文件用于驻留在projectRoot/gen/<package>目录中。

问题2.自定义生成的Java文件的正确位置是什么?是build/generated/r/<buildType>/<package>? (这是R.java居住的地方)

注意但是这个自定义生成的Java文件CustomBuildInfo.java属于公共源,即由所有构建类型和所有类型使用

任何帮助将不胜感激。

android android-studio gradle android-gradle build.gradle
2个回答
9
投票

在使用GRADLE构建系统时回答我自己的问题

  • Java字节代码位置(编译后)<projectroot>/build/intermediates/classes/<build-type>/....
  • 资产 <projectroot>/build/intermediates/assets/<build-type>/....
  • res <projectroot>/build/intermediates/res/merged/<build-type>/....
  • JNI libs(可配置)<projectroot>/build/intermediates/jniLibs/<build-type>/....
  • 表现<projectroot>/build/intermediates/manifests/full/<build-type>/....
  • 从AIDL <projectroot>/build/generated/source/aidl/<build-type>/....生成的Java类
  • R.java <projectroot>/build/generated/source/r/<build-type>/....
  • BuildConfig.java <projectroot>/build/generated/source/buildConfig/<build-type>/....
  • 测试报告HTML <projectroot>/build/reports/tests/<build-type>/index.html
  • APK输出文件<projectroot>/build/outputs/apk/...
  • 皮棉结果<projectroot>/build/outputs/...
  • 清单合并报告(如果使用多模块构建)<projectroot>/build/outputs/logs/...
  • 测试结果<projectroot>/build/test-results/...

2
投票

中间类有时可以存储在调试构建类的“../build/intermediates/javac/debug/compileDebugJavaWithJavac/classes”和发布版本的“../build/intermediates/javac/relese/compileReleaseJavaWithJavac/classes”中类。有时它们可​​以存储在“../build/debug”中用于调试类,而“../build/release”则用于发布构建类。

我不确定是什么原因导致他们在一个地方或另一个地方。如果您查看您感兴趣的模块的“.impl”文件(包含xml),您将找到如下条目:

  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
    <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />

或像这样的东西:

  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />

这就决定了为模块存储中间类的位置。为什么它有时在'build / intermediate / classes'目录中,有时在'build / intermediate / java'目录中让我感到困惑。我找了各种各样的原因,比如1.)是否受到manisfest的影响,2。)清单合并3.)jdk版本4.)模块类型(应用程序,android库,java库),5。)实例的使用跑。在我试图看到导致它选择其中一个的所有尝试中,我无法确定如何做出这个决定。如果有人知道决定目录方案选择的因素,请添加原因。

如果您像我一样并且有理由想要访问生成的中间java类,最简单的方法是查看存在哪个目录。你会有一个或另一个,但不是两个!

© www.soinside.com 2019 - 2024. All rights reserved.