从eclipse迁移到Android Studio。这是AS的构建目录结构
问题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
属于公共源,即由所有构建类型和所有版本使用
任何帮助将不胜感激。
答案 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类,那么最简单的解决方法是查看存在哪个目录。您将拥有一个或另一个,但不能同时拥有两个!