Android Studio AndroidManifest.xml vs build.gradle

如果有人能帮助我理解一些关于Android Studio的东西,那将是最有启发性的。

所以,我已经在一个月前从Eclipse切换到了Android Studio,到目前为止,我只能在移植的应用程序上工作。 就像这样,我一直在Eclipse中习惯性地修改AndroidManifest.xml文件。

然而,最近,我开始创build一个新项目,以便从Android学习Android Studio与Eclipse的不同之处。 除了我遇到的非常恼人的appcompat_v7问题之外,我还对build.gradle的一些问题感到困惑。

以下是Android Studio创build的应用程序中的一个gradle代码块:

apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion '22.0.1' defaultConfig { applicationId "com.myapp" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:22.2.0' compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:mediarouter-v7:22.2.0' } 

另一方面,下面是一个来自迁移的Eclipse项目的build.gradle的代码块:

 apply plugin: 'android' dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':google-play-services_lib') } android { compileSdkVersion 21 buildToolsVersion '22.0.1' sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } } 

我从阅读中取得的一些假设是否正确?

  1. compileSdkVersion – 为了最大限度地兼容新手机,必须始终使用最高的密码。

  2. targetedSdkVersion – 我自己的偏好在我的应用程序的最佳运行条件?

  3. buildToolsVersion – 我读这个必须始终使用最新版本。 有人能解释为什么吗?

现在就我的问题,关于显示与gradle:

  1. 编译和buildtools版本必须相同吗? 他们可以不一样吗?

  2. 如果我同时拥有一个AndroidManifest.xml和一个build.gradle,Android Studio如何知道用于编译,min,target,buildtools版本的是哪一个?

  3. 作为问题1的延伸,当两个文件之间存在差异时(如果某人由于某种原因忘记了,并决定在其中添加东西),会发生什么?

  4. 由于2之间有重复的属性,这是否意味着从Android Studio生成的应用程序开始,我根本不需要触摸AndroidManifest.xml?

    那么<activity></activity>在应用程序无法find活动时强制closures? build.gradle是否自动处理? 或者控制方向和其他更好的function(我坚持只修改Android Studio上的java文件?)

    (如果没有,那么有2个文件来控制应用程序是多余的,也许他们应该坚持AndroidManifest.xml?)

对不起,可能是很长的问题,但是对我来说真的很困惑。

提前致谢。

更新:

阅读Android Studio中的什么是Gradle? 和http://developer.android.com/tools/studio/index.html ,我的新问题:

  1. AndroidManifest.xml仍然需要,build.gradle只是覆盖设置,如果它具有相同的属性。

    问题 :所以Android Studio仍然需要,对吗?

  2. 编译和buildtools版本不必是相同的但是buildtools必须总是比compileSdkVersion更高。

    问题 :这是因为Google为每个新的Sdk创build了一个新的buildtools版本,而较高版本是向后兼容的? 因此,更高的buildtools将build立更低的compileSdkVersion,而相反是不正确的,正确的?

Related of "Android Studio AndroidManifest.xml vs build.gradle"

我会尽量解决尽可能多的问题,但是我会首先build议您不要使用eclipse迁移中生成的build.gradle。 在Android Studio中创build一个新项目,并使用它生成的build.gradle作为你应该使用的模板,也就是将它的内容复制到你真实的项目中,并改变有意义的值。 花时间理解和获得构build权利,这将为您节省时间。 也尽可能模仿新项目的文件结构。 Gradle的伟大之处在于它(通常)会给你带来有意义的错误。

compileSdkVersion – 为了最大限度地兼容新手机,必须始终使用最高的密码。

targetedSdkVersion – 我自己的偏好在我的应用程序的最佳运行条件?

编译和定位在大多数情况下应该是相同的。 编译值显然告诉编译器要编译哪个版本,目标版本告诉运行时使用哪些兼容性function。 例如,如果您的目标是v21,并且该应用程序正在运行v23的手机上运行,​​则会启用某些兼容性function,以使您的应用程序运行得更好一些。

buildToolsVersion – 我读这个必须始终使用最新版本。 有人能解释为什么吗?

编译工具可以被认为是编译器。 如果你已经设置了compileSdkVersion 23,那么你将需要23. +版本的构build工具。 但是,为了回答你的问题,假设构build工具的版本23.0存在一个错误(例如,它不是正确构build本地代码),那么Google会发布构build工具的23.1。 现在,如果你的代码不能编译本地代码,那么这个更新并不适用于你 – 你不需要它,但是,嘿,你更新它总是很好的。 而且,如果你的compileSdkVersion是23,并且你有构build工具版本24,那么构build工具的版本24就可以构build版本23。

编译和buildtools版本必须相同吗? 他们可以不一样吗?

希望这是上面的答案,但答案是肯定的,他们可以是不同的,但构build工具的主要版本必须始终大于compileSdkVersion。

如果我同时拥有一个AndroidManifest.xml和一个build.gradle,Android Studio如何知道用于编译,min,target,buildtools版本的是哪一个?

作为问题1的延伸,当两个文件之间存在差异时(如果某人由于某种原因忘记了,并决定在其中添加东西),会发生什么?

build.gradle将覆盖AndroidManifest.xml文件中的值,但为了避免混淆,我将把所有上面提到的值放到build.gradle中,并从清单中删除它们。 那是他们所属的地方。 build.gradle可以做一些非常酷的事情,它可以覆盖清单中的值,甚至合并两个清单文件。

由于2之间有重复的属性,这是否意味着从Android Studio生成的应用程序开始,我根本不需要触摸AndroidManifest.xml?

那么这样的应用程序不会强制closures,当它无法find活动? build.gradle是否自动处理? 或者控制方向和其他更好的function(我坚持只修改Android Studio上的java文件?)

(如果没有,那么有2个文件来控制应用程序是多余的,也许他们应该坚持AndroidManifest.xml?)

当然不。 这只是意味着你必须在build.gradle和AndroidManifest.xml中做一些事情。 例如,如果您添加一个活动,您必须照常编辑AndroidManifest.xml。 如果你想改变活动的属性(旋转,主题等),这也是在AndroidManifest.xml中完成的。 如果你想从Maven Central开始使用一个新的库,你将不得不将它添加到build.gradle中。 如果要更改用于在进行发布版本时签署应用程序的密钥或更改应用程序的版本名称:build.gradle。 基本上build.gradle给你对你的构build的更高程度的控制,我真的build议看看你可以在这里做什么: http : //developer.android.com/tools/building/configuring-gradle.html

AndroidManifest.xml仍然需要,build.gradle只是覆盖设置,如果它具有相同的属性。

问题:所以Android Studio仍然需要,对吗?

正确。 你仍然需要两个。

编译和buildtools版本不必是相同的但是buildtools必须总是比compileSdkVersion更高。

问题:这是因为Google为每个新的Sdk创build了一个新的buildtools版本,而较高版本是向后兼容的? 因此,更高的buildtools将build立更低的compileSdkVersion,而相反是不正确的,正确的?

也正确!

Android Manifest文件对于Android应用程序中的Activity,Permissions required和Declaring Services是有用的,但是对于库声明等有用的build.gradle。

Gradle VS Menifest如下… Gradle覆盖清单值,我更喜欢更新android studio中的build.gradle文件和android eclipse中的manifest文件。 Gradle支持可以通过Android Studio框架进行控制的应用程序。 版本代码,版本名称,目标SDK和许多其他库文件。 通过在Android Studio中单击更改或更新,之后我们可以build立项目和生成新的apk。

对于Android Studio:

应用插件:'com.android.application'

android {compileSdkVersion 23 buildToolsVersion“23.0.3”

 defaultConfig { applicationId "com.android.demo" minSdkVersion 18 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 

}

依赖{编译fileTree(包括:''.jar',dir:'libs')testCompile'junit:junit:4.12'compile'c​​om.android.support:appcompat-v7:23.4.0'compile'c​​om.android .support:design:23.4.0'compile'c​​om.google.firebase:firebase-core:9.4.0'compile'c​​om.google.firebase:firebase-messaging:9.4.0'compile'c​​om.android.volley:volley :1.0.0'compile'c​​om.google.code.gson:gson:2.6.1'

} apply plugin:'com.google.gms.google-services'

对于Android Eclipse:

`

的xmlns:机器人= “http://schemas.android.com/apk/res/android&#x201D;

  package="com.android.app" android:versionCode="1" android:versionName="1.0" >`