上面手动加载 local.properties 的答案显然有效,下一个要求您知道应用了哪个插件的答案也应该有效。
这些方法对某些人来说可能会更好一些,因为它们更通用,因为无论您使用的是应用程序、测试还是库插件,它们都可以工作。这些 sn-ps 还为您提供对所有 Android 插件配置(产品风味、构建工具版本等)的完全编程访问权限:
如果您需要访问使用 Android Gradle 插件的 build.gradle 文件,只需直接访问 Android DSL,因为它现在可以直接使用:
project.android.sdkDirectory
如果您正在创建自定义 Gradle 任务类或插件,或者只是想查看哪些属性可用,则较长的形式(如下)非常方便。
// def is preferred to prevent having to add a build dependency.
def androidPluginExtension = project.getExtensions().getByName("android");
// List available properties.
androidPluginExtension.properties.each { Object key, Object value ->
logger.info("Extension prop: ${key} ${value}")
}
String sdkDir = androidPluginExtension.getProperties().get("sdkDirectory");
System.out.println("Using sdk dir: ${sdkDir}");
在发布这篇文章时,还有一个方便的 adbExe 属性,绝对值得注意。
此代码必须在根据 Gradle 生命周期配置 Android Gradle 插件之后执行。通常,这意味着您将其放在 Task 的 execute 方法中,或者将其放在 Android 应用程序/库的 build.gradle 文件中的 android DSL 声明之后。
这些 sn-ps 还附带一个警告,当您升级 Android Gradle 插件版本时,这些属性可能会随着插件的开发而改变,因此在 Gradle 和 Android Gradle 插件以及 Android Studio 版本之间移动时进行简单的测试(有时新版本的 Android Studio 需要新版本的 Android Gradle 插件)。