什么是Android SDK的构建工具,平台工具和工具?以及应该使用哪个版本?


331

我知道这是一个非常基本的问题,但是令我惊讶的是,我找不到任何有关Android SDK Build-tools的文档。除了Android SDK工具和Android SDK平台工具之外,还有许多Android SDK生成工具,如所附屏幕截图所示。任何人都可以指向一个源代码解释所有这些源代码,并帮助阐明如何选择使用某个版本的Android SDK构建工具吗?

在此处输入图片说明

编辑(2014-02-27)

我仍然不完全了解所有工具。以下是我对Google最新文档的有限理解:

  • Android SDK构建工具曾经是Android SDK Platform-tools的组件。它们已与Android SDK平台工具脱钩,因此可以独立于集成开发环境(IDE)组件来更新构建工具。
  • 定制了Android SDK平台工具,以支持最新的Android平台的功能。它们是向后兼容的,因此即使您的应用程序针对较旧的Android平台,您也始终使用最新版的Android SDK平台工具
  • SDK工具与平台无关,无论您在哪个Android平台上进行开发,SDK工具都是必需的。

我仍然不了解将Android SDK构建工具从具有单个实例且易于管理更新的Android SDK平台工具中删除的理由。我能想到的唯一可能的原因是,某些应用程序必须依靠较早的构建组件来构建它们。Google的文档中提到了这一点,但没有解释原因。查看发行说明,您会注意到Android SDK Build-tools的更新主要用于修复bug或(或)添加对新平台的支持。我能想到的某些应用程序使用较旧版本的Android SDK构建工具的唯一原因是,它们依赖于Android SDK构建工具的某些错误。如果没有这些bug,这些应用将无法正常运行。我希望Google可以提供一个或两个示例,以说明为什么这些工具中的错误对于某些应用至关重要的原因,才能更好地解释这一点。

Answers:


88

关于Android SDK Build-tools的版本,答案是

默认情况下,Android SDK使用构建工具的最新下载版本。

资源

在Eclipse中,您可以通过使用文件中的sdk.buildtools属性来选择特定版本project.properties

似乎没有官方页面解释所有构建工具。这是Android团队对此的评价。

[build]工具(例如aidl,aapt,dexdump和dx)通常由Android构建工具或Android开发工具(ADT)调用,因此您很少需要直接调用这些工具。通常,您应依赖构建工具或ADT插件按需调用它们。

资源

无论如何,这是工具,平台工具和构建工具之间差异综合:

  • Android SDK工具
    • 位置: $ANDROID_HOME/tools
    • 主要工具:蚂蚁脚本(用于构建APK)和ddms(用于调试)
  • Android SDK平台工具
    • 位置: $ANDROID_HOME/platform-tools
    • 主要工具:(adb用于管理模拟器或Android设备的状态)
  • Android SDK构建工具
    • 位置: $ANDROID_HOME/build-tools/$VERSION/
    • 文献资料
    • 主要工具:(aapt生成R.java和未对齐,未签名的APK),dx(将Java字节码转换为Dalvik字节码)和zipalign(优化APK)

我真的很高兴有不同版本的构建工具的更改日志
Ewoks 2015年

@lacton我在项目中使用了旧的构建工具(版本17)。我可以使用最新的构建工具对其进行重建吗?
user1156041 2016年

我们可以在Eclipse和Studio中使用相同的SDK +构建工具吗?
穆罕默德·巴巴尔

38

Android SDK构建工具用于调试,构建,运行和测试Android应用程序。

Android Build Tools可用于通过命令行或IDE(即Eclipse或Android Studio)进行开发和工作。

也用于连接Android设备并对其进行root(fastboot,adb等)。

始终使用最新版本。(推荐)

有关Android构建工具和命令的更多信息


谢谢(你的)信息。您的意思是说Android Build Tools是“用于连接Android设备并为它们添加根目录的”吗?adbis是Android平台工具的一部分。adb是否要依靠Android Build Tools起作用?如果是这样,怎么办?我好奇。

adb可用于从命令行推入和拉出文件。(更多功能。)fastboot可用于刷新自定义引导加载程序。但是,除非您使用终端进行开发,否则这些命令对Android开发没有用。IDE本身提供了所有功能。
mipreamble

1
我的理解是Eclipse在后台使用adb.exe。

@mipreamble那么android sdk有什么区别:工具,平台工具和构建工具?我可以在没有构建工具的情况下构建和运行我的应用程序。
kreker 2014年

1
@CJBS是的。坚持使用版本设置工具即可。构建工具会在新版本的Android出现时进行更新。您可能希望针对最新的Android版本编译和测试该应用程序。
mipreamble

16

我将不再讨论构建工具,平台工具和其他工具之间的区别。从实际的角度来看,您只需要知道第二个问题的答案即可:

应该使用哪个版本?

答:请使用最新版本。

对于将Android Studio与Gradle结合使用的用户,buildToolsVersion必须在build.gradle(Module:app)文件中进行设置。

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    ...
}

在哪里可以获得构建工具的最新版本号?

打开Android SDK Manager。

  • 在Android Studio中,转到“ 工具” >“ Android” >“ SDK Manager” >“ 外观和行为” >“ 系统设置” >“ Android SDK”
  • 选择“ SDK工具”选项卡。
  • 从列表中选择Android SDK Build Tools
  • 选中显示软件包详细信息

最后一项将显示最新版本。

在此处输入图片说明

确保已安装它,然后将该数字写为buildToolsVersionin build.gradle(模块:app)。


1
如果有24.0.2,为什么24.0.1和24没有标记为过时的(独立管理器允许显示/隐藏过时的包)?
user1803551 '16

3
@ user1803551,并不总是希望自动使用最新的构建工具版本。例如,假设您已经使用特定的构建工具版本彻底测试了您的应用程序。如果您更新构建工具,则那里的更改可能会破坏您的应用程序。允许开发人员继续使用旧的构建工具版本,可以确保他们的构建可以按预期进行。如果查看被声明为过时的模式,您会发现24和24.0.1最终将被声明为过时。
Suragch '16

13

您可以在此 Android中找到有关这些内容的详细信息-命令行工具


tl; dr:

SDK工具:

  1. Android SDK Manager(sdkmanager)
  2. AVD经理(avdmanager)
  3. Dalvik调试监控服务器(ddms)

生成工具:

  1. 签署人
  2. proGuard
  3. zipalign
  4. 工作

平台工具:

  1. 亚行
  2. aidl,aapt,dexdump和dx
  3. bmgr
  4. 日志猫

1
AIDL,AAPT,dexdump,而不是平台工具DX的构建工具这些组件
Masum

9

正确的答案是

将Android SDK的特定于构建的组件与platform-tools组件解耦,以便可以独立于集成开发环境(IDE)组件来更新构建工具。

链接(扩展修订版17)


4
感谢您的信息。如果新版本只是旧版本的改进版本,那么Google为什么不只有一个构建工具并像SDK工具和平台工具那样不断更新呢?换句话说,在那里拥有较旧版本的原因是什么?

2
我只是尝试对这个答案进行投票,但是事实证明,我去年已经对它进行了投票!@Hong,他们保留了旧的构建工具,因为在更新工具时,某些功能已被弃用。但是应用程序开发人员可能拥有依赖于这些功能的源代码,因此他们保留了旧版本以支持这些旧代码库。
家长

1
在这种情况下,他们是否应该具有不推荐使用的功能列表,以便开发人员可以确切地知道是否仍然需要使用旧版本?

@Hong:这正是我要寻找的问题。现在...下班找到答案了:)
DerpyNerd '16

2

顾名思义,Android SDK Build Tools就是如此。用于构建Android应用程序的工具。使用最新的构建工具版本(由IDE通过Android SDK自动选择)非常重要,但是保留旧版本的原因是为了向后兼容,也就是说,如果您的项目依赖于旧版的构建工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.