【问题标题】:No sdkHandler field in LibraryPlugin after updating to build tools 2.3.0更新为构建工具 2.3.0 后,LibraryPlugin 中没有 sdkHandler 字段
【发布时间】:2017-07-27 10:06:00
【问题描述】:
我是用这个方法来获取NDK目录的:
project.plugins.findPlugin('com.android.library').sdkHandler.getNdkFolder()
在将com.android.tools.build:gradle 更新为2.3 之后,sdkHandler 字段似乎已在删除时重命名
错误:没有这样的属性:sdkHandler 类:com.android.build.gradle.LibraryPlugin
有没有其他方法可以在库模块中获取 NDK 目录路径?
【问题讨论】:
标签:
android
android-ndk
android-gradle-plugin
【解决方案1】:
此方法现在将返回 NDK 的完整路径:
project.android.ndkDirectory.absolutePath
【解决方案2】:
只需将您的 gradle 版本降级到 2.2.3。它会解决问题
【解决方案3】:
对我来说,解决方法是简单地设置 ANDROID_NDK 环境变量。
更多here。
【解决方案4】:
我已经进行了一些挖掘。似乎该字段仍然存在,但标记为私有。
一种解决方案是使用反射。
该字段位于com.android.build.gradle.BasePlugin 中,com.android.build.gradle.LibraryPlugin 继承自该字段。
LibraryPlugin plugin = project.plugins.findPlugin('com.android.library')
Class<?> clazz = plugin.getClass().getSuperclass();
Field field = clazz.getDeclaredField('sdkHandler')
field.setAccessible(true)
SdkHandler sdkHandler = field.get(plugin)
System.out.println("Ndk location: " + sdkHandler.getNdkFolder())
说实话,我不太喜欢这种解决方案。希望能找到更好的。