Android Studio AndroidManifest.xml vs build.gradle
如果有人能帮助我了解一些关于Android Studio的事情,那将是最有启发性的。
因此,大约一个月前,我已经从Eclipse切换到Android Studio,到目前为止,我只在迁移的应用程序上工作。因此,我一直在按照Eclipse中的惯例,只修改AndroidManifest.xml文件。
然而,最近,我开始创建一个新项目,以便从头开始学习Android Studio与Eclipse的区别。除了我遇到的非常恼人的appcompat_v7问题之外,我还对有关build.gradle的一些事情感到困惑。
以下是从 Android Studio 创建的应用中的 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')
}
}
我从阅读中得出的一些假设是否正确?
编译SdkVersion - 必须始终使用最高的版本才能与较新的手机实现最大的兼容性?
TargetedSdkVersion - 我自己对应用程序最佳运行条件的偏好?
buildToolsVersion - 我读到这个必须总是使用最新版本。有人能解释一下为什么吗?
现在谈谈我关于 manifest vs gradle 的问题:
编译和构建工具版本必须相同吗?它们可以不同吗?
如果我同时拥有 AndroidManifest.xml 和 build.gradle,Android Studio 如何知道要使用哪个版本进行编译、最小、定向、构建工具版本?
作为问题1的扩展,当2个文件之间存在差异时会发生什么(如果有人出于某种原因忘记了并决定在其中一个文件中添加内容?
-
由于2之间存在重复的属性,这是否意味着从Android Studio生成的应用程序开始,我根本不需要触摸AndroidManifest.xml?
那么,当应用找不到活动时,它不会强制关闭呢?build.gradle会自动处理这个问题吗?或者控制方向和其他更精细的功能(我是否坚持只修改Android Studio上的java文件?
<activity></activity>
(如果没有,那么有2个文件来控制应用程序是多余的,也许他们应该坚持使用AndroidManifest.xml?
很抱歉冗长,也许是蜿蜒曲折的问题,但这对我来说真的很困惑。
提前致谢。
更新:
在阅读了 Android Studio 中的 Gradle 是什么?并 http://developer.android.com/tools/studio/index.html 之后,我的新问题:
-
AndroidManifest.xml仍然需要,build.gradle只是覆盖设置,如果它具有相同的属性。
问:所以在Android Studio中仍然需要两者,对吗?
-
编译和构建工具版本不必相同,但构建工具必须始终高于编译SdkVersion。
问:这是因为Google为每个新的Sdk创建了一个新的buildtools版本,并且更高版本是向后兼容的吗?因此,更高的构建工具将构建较低的编译SdkVersion,而相反的情况则不然,对吗?