如果有人能够帮助我理解一些关于Android Studio的问题,那将是最具启发性的。
因此,一个月前,我已经从Eclipse转换到Android Studio,迄今为止只是在我的已迁移应用上工作。因此,我一直在尝试调整只有在Eclipse中惯用的AndroidManifest.xml文件。
然而,最近,我开始创建一个新项目,以了解Android Studio与Eclipse的差异。除了我遇到的非常烦人的appcompat_v7问题外,我还对构建.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')
}
}
通过阅读,我从中得出了一些假设,请问这些对吗?
compileSdkVersion - 必须始终使用最高版本以最大程度地兼容较新的手机?
targetedSdkVersion - 我自己对我的应用程序的最佳运行条件的偏好?
buildToolsVersion - 我阅读过这必须始终使用最新版本。有人能解释一下为什么吗?
现在针对清单与 Gradle 的问题:
编译和 buildtools 版本必须相同吗?它们可以不同吗?
如果我同时拥有 AndroidManifest.xml 和 build.gradle,Android Studio 如何知道要使用哪个版本进行编译、min、targeted、buildtools?
作为问题 1 的扩展,当两个文件之间存在差异时会发生什么(如果某些人由于某些原因忘记并决定在其中一个文件中添加内容)?
由于两个文件之间存在重复的属性,这是否意味着从 Android Studio 生成的应用程序起,我根本不需要触及 AndroidManifest.xml?
那
<activity></activity>
呢?这样的话应用程序不会因为找不到活动而强制关闭。build.gradle 是否会自动处理它?或控制方向和其他细微的功能(我是否只能修改 Android Studio 上的 Java 文件)?(如果没有,那么控制应用程序的两个文件有点冗余,也许他们应该坚持使用 AndroidManifest.xml?)
抱歉问题比较长,可能有些啰嗦,但它确实对我很困惑。
提前谢谢。
更新:
阅读完 What is Gradle in Android Studio? 和 http://developer.android.com/tools/studio/index.html 后,我的新问题:
AndroidManifest.xml 仍然是必需的,如果 build.gradle 具有相同属性,则会覆盖设置。
问题:在 Android Studio 中两个都还需要,对吗?
编译和 buildtools 版本不必相同,但 buildtools 必须始终高于 compileSdkVersion。
问题:这是因为 Google 为每个新的 SDK 创建新的 buildtools 版本,更高版本向后兼容?因此,较高的 buildtools 将创建较低的 compileSdkVersion,反之则不成立,对吗?