我如何读取build.gradle中的local.properties中定义的属性

我已经在local.properties中设置了sdk.dir和ndk.dir。

如何读取build.gradle文件中的sdk.dir和ndk.dir中定义的值?

你可以这样做:

Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def sdkDir = properties.getProperty('sdk.dir') def ndkDir = properties.getProperty('ndk.dir') 

如果您正在读取子项目build.gradle的属性文件,请使用project.rootProject

 . ├── app │  ├── build.gradle <-- You are reading the local.properties in this gradle build file │  └── src ├── build.gradle ├── gradle ├── gradlew ├── gradlew.bat ├── settings.gradle └── local.properties 

如果属性文件位于相同的子项目目录中,则可以使用project

尽pipe@ rciovati的答案当然是正确的,但也有另一种读取sdk.dirndk.dir的值的ndk.dir

正如Gaku Ueda的这个博客文章 (Getting ndk目录)中指出的那样, BasePlugin类提供了getNdkFolder()getSdkFolder()

 def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder() def sdkDir = project.plugins.findPlugin('com.android.application').getSdkFolder() 

注意:如果你正在构build一个库,你可能不得不把com.android.application改成com.android.application

这也许是阅读文件夹值的更优雅的方式。 虽然不得不说@ @ riovati提供的答案更加灵活,因为可以读取属性文件中的任何值。

上面手动加载local.properties的答案明显起作用,下一个需要知道应用哪个插件的应该也可以。

这些方法可能会稍微好一些,因为它们更通用,因为无论您是使用Application,Test还是Library插件,它们都可以工作。 这些片段还使您可以完全编程访问所有Android插件configuration(产品风格,构build工具版本等等):

如果您需要访问使用Android Gradle插件的build.gradle文件,只需直接访问Android DSL,因为它现在可直接使用:

 project.android.sdkDirectory 

如果您正在创build自定义的Gradle Tasks类或插件,或者只是想查看哪些属性可用,则较长的forms(下面)是方便的。

 // 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生命周期configurationAndroid Gradle插件之后执行。 通常这意味着你把它放在Taskexecute方法中,或者把它放在Android应用/库的build.gradle文件中的android DSL声明之后)。

这些片段还带有警告,当你升级Android Gradle Plugin版本时,这些属性可以随着插件的开发而改变,所以只需在Gradle和Android Gradle插件以及Android Studio(有时是Android的新版本) Studio需要新版本的Android Gradle插件)。

我认为这是更优雅的方式。

 println "${android.getSdkDirectory().getAbsolutePath()}" 

它适用于Android Gradle 1.5.0。

local.properties

 default.account.iccid=123 

build.gradle –

 def Properties properties = new Properties() properties.load(project.rootProject.file("local.properties").newDataInputStream()) defaultConfig { resValue "string", "default_account_iccid", properties.getProperty("default.account.iccid", "") } 

并在代码中,你从另一个string从资源 –

 resources.getString(R.string.default_account_iccid);