【发布时间】:2015-10-03 23:48:28
【问题描述】:
如果有人可以帮助我了解有关 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')
}
}
我在阅读中做出的一些假设是否正确?
compileSdkVersion - 必须始终使用最高版本才能最大程度地兼容新手机?
targetedSdkVersion - 我自己对应用程序最佳运行条件的偏好?
buildToolsVersion - 我读到这个必须始终使用最新版本。有人能解释一下原因吗?
现在我的问题是关于 manifest vs gradle:
编译和构建工具的版本必须相同吗?它们可以不同吗?
如果我同时拥有 AndroidManifest.xml 和 build.gradle,Android Studio 怎么知道 compile、min、targeted、buildtools 版本使用哪个?
作为问题 1 的扩展,当两个文件之间存在差异时会发生什么(如果有人出于某种原因忘记并决定在其中一个文件中添加内容?)
-
由于两者之间有重复的属性,这是否意味着从Android Studio生成的应用程序开始,我根本不需要触摸AndroidManifest.xml?
<activity></activity>怎么样,这样应用程序在找不到活动时不会强制关闭? build.gradle 会自动处理吗?或者控制方向和其他更精细的功能(我是否坚持只修改 Android Studio 上的 java 文件?)(如果没有,那么有 2 个文件来控制应用程序有点多余,也许他们应该坚持使用 AndroidManifest.xml?)
对不起,很长,也许是曲折的问题,但这真的让我很困惑。
提前致谢。
更新:
看完What is Gradle in Android Studio?和http://developer.android.com/tools/studio/index.html,我的新问题:
-
AndroidManifest.xml 仍然需要,如果 build.gradle 具有相同的属性,它只会覆盖设置。
问题:所以在 Android Studio 中仍然需要 BOTH,对吗?
-
compile & buildtools 版本不必相同,但 buildtools 必须始终高于 compileSdkVersion。
问题:这是因为 Google 会为每个新的 Sdk 创建一个新的 buildtools 版本,并且更高版本是向后兼容的吗?因此,更高的 buildtools 会构建更低的 compileSdkVersion,而反过来则不然,对吗?
【问题讨论】:
-
gradle : stackoverflow.com/questions/16754643/… studio : developer.android.com/tools/studio/index.html 首先参考这两个然后如果你有疑问发表你的评论
-
感谢您的 2 篇文章,我发现 developer.android.com/tools/building/configuring-gradle.html 最有帮助,并在更新部分重新表述了我的问题。
-
我可以回答 1:是的,您确实需要 Manifest 和 build.gradle。您需要在清单中声明应用程序的活动、接收器等组件以及权限。 versionName 和 versionCode 进入 build.gradle,清单中不需要它们。如果将它们放在清单中,它很可能会被 build.gradle 中的值覆盖。不过我还没有测试过。
-
补充一下,我自己也有一个迁移的Eclipse项目和一个新的AndroidStudio项目。他们的 build.gradle 文件看起来和你的一样。我不知道为什么它们如此不同,但它们工作得很好。
标签: java android xml eclipse android-studio