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

时间:2016-01-06 02:57:20

标签: android android-studio gradle android-gradle build.gradle

从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属于公共源,即由所有构建类型和所有版本使用

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:9)

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

  • Java字节代码位置(编译后)pd.merge

  • <强>资产
    <projectroot>/build/intermediates/classes/<build-type>/....

  • <强> RES <projectroot>/build/intermediates/assets/<build-type>/....

  • JNI libs (可配置) <projectroot>/build/intermediates/res/merged/<build-type>/....

  • <强>舱单 <projectroot>/build/intermediates/jniLibs/<build-type>/....

  • 从AIDL生成的Java类 <projectroot>/build/intermediates/manifests/full/<build-type>/....

  • <强> R.java <projectroot>/build/generated/source/aidl/<build-type>/....

  • <强> BuildConfig.java <projectroot>/build/generated/source/r/<build-type>/....

  • 测试报告HTML <projectroot>/build/generated/source/buildConfig/<build-type>/....

  • APK输出文件 <projectroot>/build/reports/tests/<build-type>/index.html

  • Lint结果 <projectroot>/build/outputs/apk/...

  • 清单合并报告(如果使用多模块构建) <projectroot>/build/outputs/...

  • 测试结果 <projectroot>/build/outputs/logs/...

答案 1 :(得分: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类,那么最简单的解决方法是查看存在哪个目录。您将拥有一个或另一个,但不能同时拥有两个!