我如何读取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.dir
和ndk.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插件之后执行。 通常这意味着你把它放在Task
的execute
方法中,或者把它放在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);
- onActivityResult中的操作和“错误无法在onSaveInstanceState之后执行此操作”
- Android列'_id'不存在?
- java.lang.RuntimeException:takePicture失败
- 从网页获取文本到string
- Android的BroadcastReceiver还是简单的callback方法?
- 如何用Glide库将图像四舍五入?
- 如何使用Volley在Android中发送“multipart / form-data”POST
- 应用内结算(v3) – IllegalArgumentException:服务未注册:
- 以编程方式将imageview的高度设置为matchparent