将属性从外部文件加载到build.gradle中

3

我有这个:

def loadProperties(String sourceFileName) {
    def config = new Properties()
    def propFile = new File(sourceFileName)
    if (propFile.canRead()) {
        config.load(new FileInputStream(propFile))
        for (Map.Entry property in config) {
            ext[property.key] = property.value;
        }
    }
}

loadProperties 'gradle.properties'

如何在build.gradle中引用属性(ndk.dir)?

def ndkBuild = new File("$ndk.dir", 'ndk-build')

有没有更好的方法从gradle.properties文件中读取ndk.dir?如何在使用中使用它?

def ndkBuild = new File("$ndk.dir", 'ndk-build')

完整代码:

task buildNative(type: Exec) {
    loadProperties 'gradle.properties'
    if (System.getenv('NDK_HOME') != null || "$ndk.dir" != null) {
        if ("$ndk.dir" != null) {
            def ndkBuild = new File("$ndk.dir", 'ndk-build')
        } else {
            def ndkBuild = new File(System.getenv('NDK_HOME'), 'ndk-build')
        }
        workingDir "jni"
        executable ndkBuild
    } else {
        throw new GradleException('Reason: NDK_HOME not set or ndk.dir is missing in gradle.properties...')
    }
}

def loadProperties(String sourceFileName) {
    def config = new Properties()
    def propFile = new File(sourceFileName)
    if (propFile.canRead()) {
        config.load(new FileInputStream(propFile))
        for (Map.Entry property in config) {
            ext[property.key] = property.value;
        }
    }
}

1
请始终准确地描述问题是什么,您收到了什么错误消息等。 - Peter Niederwieser
问题在于"$ndk.dir"无法工作,我猜想我使用方法不正确? - powder366
这不是一个精确的描述。你得到了什么精确的错误信息?等等。 - Peter Niederwieser
出了什么问题: 在评估项目“:primavista-android-reloaded”时发生了问题。
在任务“:primavista-android-reloaded:buildNative”上找不到属性“ndk”。
- powder366
更新问题并提供完整示例。 - powder366
1个回答

3
ndk.dir 一样,"$ndk.dir" 首先获取 ndk 属性,然后获取 dir 属性,这不是你想要的。(这也在错误信息中表现出来,显示“找不到属性 'ndk'”)。相反,应该使用以下方法:
def ndkBuild = new File(project.property('ndk.dir'), 'ndk-build')

更安全的解决方案是将整个 Properties 对象作为单个额外属性进行存储:

...
ext.externalProps = config

然后,您可以这样访问外部属性:
def ndkBuild = new File(externalProps['ndk.dir'], 'ndk-build')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接