pub*_*dge 12 java xml eclipse android android-studio
如果有人能帮助我理解有关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'
}
Run Code Online (Sandbox Code Playgroud)
另一方面,下面是迁移的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')
}
}
Run Code Online (Sandbox Code Playgroud)
在阅读中我采取的一些假设是否正确?
compileSdkVersion - 必须始终使用最高版本才能最大限度地兼容新手机?
targetedSdkVersion - 我自己对我的应用程序的最佳运行条件的偏好?
buildToolsVersion - 我读过这必须始终使用最新版本.有人可以解释原因吗?
关于manifest vs gradle,我现在提出问题:
编译和构建工具版本必须相同吗?他们可以不同吗?
如果我同时拥有AndroidManifest.xml和build.gradle,那么Android Studio如何知道哪个用于compile,min,targeted,buildtools版本?
作为问题1的扩展,当两个文件之间存在差异时会发生什么(如果有人由于某种原因忘记并决定在其中一个文件中添加内容?)
由于2之间存在重复属性,这是否意味着从Android Studio生成的应用开始,我根本不需要触摸AndroidManifest.xml?
怎么样<activity></activity>使应用程序不强制关闭时,它无法找到活动?build.gradle会自动处理吗?或者控制方向和其他更精细的功能(我是不是只修改了Android Studio上的java文件?)
(如果没有,那么有2个文件来控制应用程序是多余的,也许他们应该只是坚持AndroidManifest.xml?)
很抱歉,这些问题可能很长,也许很棘手,但这对我来说真的很混乱.
提前致谢.
更新:
阅读Android Studio中的什么是Gradle?和http://developer.android.com/tools/studio/index.html,我的新问题:
仍需要AndroidManifest.xml,如果build.gradle具有相同的属性,则会覆盖设置.
问题:Android Studio中仍然需要两个,对吗?
compile和buildtools版本不必相同但是buildtools必须始终高于compileSdkVersion.
问:这是因为Google为每个新的Sdk创建了一个新的buildtools版本,而更高版本是向后兼容的吗?因此,较高的buildtools会构建较低的compileSdkVersion而反之则不正确,对吗?
我将尝试尽可能多地解决问题,但我将首先建议您不要使用eclipse迁移中生成的build.gradle.在Android Studio中创建一个新项目,并使用它生成的build.gradle作为您应该使用的模板,即将其内容复制到您的实际项目并更改有意义的值.花时间了解并获得build.gradle,它将为您节省时间.也尽可能模仿新项目的文件结构.关于gradle的好处是它(通常)会给你带来有意义的错误.
compileSdkVersion - 必须始终使用最高版本才能最大限度地兼容新手机?
targetedSdkVersion - 我自己对我的应用程序的最佳运行条件的偏好?
在大多数情况下,编译和目标应该是相同的.编译值显然告诉编译器要编译哪个版本,目标版本告诉运行时要使用哪些兼容性功能.例如,如果您的目标是v21并且该应用程序在运行v23的手机上运行,则会启用一些兼容性功能,以使您的应用运行得更好一些.
buildToolsVersion - 我读过这必须始终使用最新版本.有人可以解释原因吗?
您可以将构建工具视为编译器.如果您已设置compileSdkVersion 23,那么您将需要23. +版本的构建工具.但是,为了回答你的问题,让我们说版本23.0的构建工具存在一个错误(例如,它没有正确构建本机代码),那么Google将发布23.1版本的构建工具.现在如果你的代码没有编译本机代码,那么更新并不真正适用于你 - 你不需要它,但是,嘿,更新你总是很好.此外,如果你的compileSdkVersion是23并且你有构建工具版本24,那么构建工具的版本24很能够构建版本23.
编译和构建工具版本必须相同吗?他们可以不同吗?
希望以上对此有所回答,但答案是肯定的,它们可能不同,但构建工具主要版本必须始终大于compileSdkVersion.
如果我同时拥有AndroidManifest.xml和build.gradle,那么Android Studio如何知道哪个用于compile,min,targeted,buildtools版本?
作为问题1的扩展,当两个文件之间存在差异时会发生什么(如果有人由于某种原因忘记并决定在其中一个文件中添加内容?)
build.gradle将覆盖AndroidManifest.xml文件中的值,但为了避免混淆,我会将所有上述值放入build.gradle中,并从清单中删除它们.这就是他们所属的地方.build.gradle可以做一些非常酷的事情,它可以覆盖清单中的值,甚至可以合并两个清单文件.
由于2之间存在重复属性,这是否意味着从Android Studio生成的应用开始,我根本不需要触摸AndroidManifest.xml?
那么当应用程序无法找到活动时,它不会强制关闭呢?build.gradle会自动处理吗?或者控制方向和其他更精细的功能(我是不是只修改了Android Studio上的java文件?)
(如果没有,那么有2个文件来控制应用程序是多余的,也许他们应该只是坚持AndroidManifest.xml?)
当然不.这只意味着你必须在build.gradle中做一些事情,在AndroidManifest.xml中做一些事情.例如,如果添加活动,则必须照常编辑AndroidManifest.xml.如果你想改变活动的属性(旋转,主题等),这也仍然在AndroidManifest.xml完成.如果要从Maven Central开始使用新库,则必须将其添加到build.gradle中.如果要更改用于在发布版本时对应用程序进行签名的密钥,或者更改应用程序的versionName:build.gradle.基本上build.gradle可以让你更高程度地控制你的构建,我真的建议你看看你能做些什么:http: //developer.android.com/tools/building/configuring-gradle.html
仍需要AndroidManifest.xml,如果build.gradle具有相同的属性,则会覆盖设置.
问题:Android Studio中仍然需要两个,对吗?
正确.你仍然需要两者.
compile和buildtools版本不必相同但是buildtools必须始终高于compileSdkVersion.
问:这是因为Google为每个新的Sdk创建了一个新的buildtools版本,而更高版本是向后兼容的吗?因此,较高的buildtools会构建较低的compileSdkVersion而反之则不正确,对吗?
也正确!
| 归档时间: |
|
| 查看次数: |
5865 次 |
| 最近记录: |